Repository: envoyproxy/gateway

Issue:
Guide for deployment in airgap 
*Description*:
The current guides don't describe that without configuring a custom EnvoyProxy with an image specification it will automatically use the distroless image from docker.io.

Example from slack:

```yaml
---
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
  name: custom-proxy-config
  namespace: default
spec:
  provider:
    type: Kubernetes
    kubernetes:
      envoyDeployment:
        container:
          image: envoyproxy/envoy:v1.25-latest 
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: eg
spec:
  gatewayClassName: eg
  infrastructure:
    parametersRef:
      group: gateway.envoyproxy.io
      kind: EnvoyProxy
      name: custom-proxy-config
  listeners:
 name: http
      protocol: HTTP
      port: 80
```


[optional *Relevant Links*:]
>Any extra documentation required to understand the issue.


Hints from issue comments:
@zhaohuabing: It would be great to add some guidance on how to deploy Envoy Gateway in a air-gapped environment. Key points to cover could include:
* Customizing the Helm chart to set a local image registry for Envoy Gateway and RateLimit image by specifying the `global.imageRegistry` and `global.imagePullSecrets`.
* Creating an `EnvoyProxy` resource with a custom Envoy image and necessary imagePullSecrets, and attaching it to the `Gateway` or `GatewayClass`.

Tasks - Operations is a good home for this guidance.

@ion-elgreco since you’ve already got this working  — would you be up for creating a PR?@ion-elgreco: @zhaohuabing sure, I'll take a look over the weekend to add this:)

Solution patch:
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index fef0c7ae4..32cd32290 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -36,14 +36,14 @@ jobs:
     - uses: ./tools/github-actions/setup-deps
 
     - name: Initialize CodeQL
-      uses: github/codeql-action/init@39edc492dbe16b1465b0cafca41432d857bdb31a  # v3.29.1
+      uses: github/codeql-action/init@181d5eefc20863364f96762470ba6f862bdef56b  # v3.29.2
       with:
         languages: ${{ matrix.language }}
 
     - name: Autobuild
-      uses: github/codeql-action/autobuild@39edc492dbe16b1465b0cafca41432d857bdb31a  # v3.29.1
+      uses: github/codeql-action/autobuild@181d5eefc20863364f96762470ba6f862bdef56b  # v3.29.2
 
     - name: Perform CodeQL Analysis
-      uses: github/codeql-action/analyze@39edc492dbe16b1465b0cafca41432d857bdb31a  # v3.29.1
+      uses: github/codeql-action/analyze@181d5eefc20863364f96762470ba6f862bdef56b  # v3.29.2
       with:
         category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/latest_release.yaml b/.github/workflows/latest_release.yaml
deleted file mode 100644
index 88bac8ffd..000000000
--- a/.github/workflows/latest_release.yaml
+++ /dev/null
@@ -1,156 +0,0 @@
-name: Latest Release
-
-permissions:
-  contents: read
-
-on:
-  push:
-    branches:
-    - "main"
-    paths-ignore:
-    - "**/*.png"
-
-# Limit workflow run or job concurrency,
-# avoid workflow failed when merge more than one PR in short time.
-concurrency:
-  group: ${{ github.workflow }}-${{ github.ref }}
-  cancel-in-progress: true
-
-jobs:
-  # For push event, we run benchmark test here because we need to
-  # include benchmark report in the latest release.
-  benchmark-test:
-    runs-on: ubuntu-latest
-    steps:
-    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
-    - uses: ./tools/github-actions/setup-deps
-
-    - name: Setup Graphviz
-      uses: ts-graphviz/setup-graphviz@b1de5da23ed0a6d14e0aeee8ed52fdd87af2363c  # v2.0.2
-
-    # Benchmark
-    - name: Run Benchmark tests
-      env:
-        KIND_NODE_TAG: v1.29.10
-        IMAGE_PULL_POLICY: IfNotPresent
-        # Args for benchmark test
-        BENCHMARK_RPS: 10000
-        BENCHMARK_CONNECTIONS: 100
-        BENCHMARK_DURATION: 30
-        BENCHMARK_CPU_LIMITS: 1000m
-        BENCHMARK_MEMORY_LIMITS: 2000Mi
-        BENCHMARK_REPORT_DIR: benchmark_report
-      run: make benchmark
-
-    - name: Package benchmark report
-      run: cd test/benchmark && zip -r benchmark_report.zip benchmark_report
-
-    - name: Upload Benchmark Report
-      uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02  # v4.6.2
-      with:
-        name: benchmark_report
-        path: test/benchmark/benchmark_report.zip
-
-  latest-release:
-    runs-on: ubuntu-22.04
-    needs: [benchmark-test]
-    permissions:
-      contents: write
-    steps:
-    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
-
-    - name: Generate Release Manifests
-      # Use `Always` image pull policy for latest version.
-      run: IMAGE_PULL_POLICY=Always make generate-manifests IMAGE=envoyproxy/gateway-dev TAG=latest OUTPUT_DIR=release-artifacts
-
-    - name: Download Benchmark Report
-      uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
-      with:
-        name: benchmark_report
-        path: release-artifacts
-
-    - name: Build egctl latest multiarch binaries
-      run: |
-        make build-multiarch
-        tar -zcvf envoy-gateway_latest_linux_amd64.tar.gz bin/linux/amd64/envoy-gateway
-        tar -zcvf envoy-gateway_latest_linux_arm64.tar.gz bin/linux/arm64/envoy-gateway
-        tar -zcvf envoy-gateway_latest_darwin_amd64.tar.gz bin/darwin/amd64/envoy-gateway
-        tar -zcvf envoy-gateway_latest_darwin_arm64.tar.gz bin/darwin/arm64/envoy-gateway
-        tar -zcvf egctl_latest_linux_amd64.tar.gz bin/linux/amd64/egctl
-        tar -zcvf egctl_latest_linux_arm64.tar.gz bin/linux/arm64/egctl
-        tar -zcvf egctl_latest_darwin_amd64.tar.gz bin/darwin/amd64/egctl
-        tar -zcvf egctl_latest_darwin_arm64.tar.gz bin/darwin/arm64/egctl
-        zip -r egctl_latest_windows_amd64.zip bin/windows/amd64/egctl
-
-    # Ignore the error when we delete the latest release, it might not exist.
-
-    # GitHub APIs take sometime to make effect, we should make sure before Recreate the Latest Release and Tag,
-    # tag and release all get deleted. So we sleep sometime after deleting tag and release to wait for it taking effect.
-
-    - name: Delete the Latest Release
-      continue-on-error: true
-      run: |
-        gh release delete latest --repo $GITHUB_REPOSITORY
-        sleep 4
-      env:
-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        GITHUB_REPOSITORY: ${{ github.repository_owner }}/${{ github.event.repository.name }}
-
-    # Ignore the error when we delete the latest tag, it might not exist.
-    - name: Delete the Latest Tag
-      continue-on-error: true
-      run: |
-        gh api --method DELETE /repos/$GITHUB_REPOSITORY/git/refs/tags/latest
-        sleep 4
-      env:
-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        GITHUB_REPOSITORY: ${{ github.repository_owner }}/${{ github.event.repository.name }}
-
-    - name: Recreate the Latest Release and Tag
-      uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8  # v2.3.2
-      with:
-        draft: false
-        prerelease: true
-        tag_name: latest
-        files: |
-          release-artifacts/install.yaml
-          release-artifacts/quickstart.yaml
-          release-artifacts/envoy-gateway-crds.yaml
-          release-artifacts/benchmark_report.zip
-          envoy-gateway_latest_linux_amd64.tar.gz
-          envoy-gateway_latest_linux_arm64.tar.gz
-          envoy-gateway_latest_darwin_amd64.tar.gz
-          envoy-gateway_latest_darwin_arm64.tar.gz
-          egctl_latest_linux_amd64.tar.gz
-          egctl_latest_linux_arm64.tar.gz
-          egctl_latest_darwin_amd64.tar.gz
-          egctl_latest_darwin_arm64.tar.gz
-          egctl_latest_windows_amd64.zip
-        body: |
-          This is the "latest" release of **Envoy Gateway**, which contains the most recent commits from the main branch.
-
-          This release **might not be stable**.
-
-          It is only intended for developers wishing to try out the latest features in Envoy Gateway, some of which may not be fully implemented.
-
-          We use `v0.0.0-latest` as the latest chart version to install latest envoy-gateway:
-
-          ```shell
-          helm install eg oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --create-namespace
-          ```
-
-          Try latest version of `egctl` with:
-
-          ```shell
-          curl -Ls https://gateway.envoyproxy.io/get-egctl.sh | VERSION=latest bash
-          ```
-
-    # Check if latest release and tag are created properly,
-    # if not, the workflow needs to report an error,
-    # let maintainers be aware of it and rerun it manually.
-    # After Recreate the Latest Release and Tag, we need to sleep some time to wait
-    # new tag and release are created before checking it.
-    - name: Check Latest Release and Tag
-      run: |
-        sleep 4
-        make latest-release-check
diff --git a/.github/workflows/license-scan.yml b/.github/workflows/license-scan.yml
index 42cb3e522..eaa79acd0 100644
--- a/.github/workflows/license-scan.yml
+++ b/.github/workflows/license-scan.yml
@@ -18,7 +18,7 @@ jobs:
     - name: Checkout code
       uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
     - name: Run scanner
-      uses: google/osv-scanner-action/osv-scanner-action@40a8940a65eab1544a6af759e43d936201a131a2  # v2.0.3
+      uses: google/osv-scanner-action/osv-scanner-action@b00f71e051ddddc6e46a193c31c8c0bf283bf9e6  # v2.1.0
       continue-on-error: true  # remove this after https://github.com/google/deps.dev/issues/146 has been resolved
       with:
         scan-args: |-
diff --git a/.github/workflows/osv-scanner.yml b/.github/workflows/osv-scanner.yml
index 0112df156..687d1d72e 100644
--- a/.github/workflows/osv-scanner.yml
+++ b/.github/workflows/osv-scanner.yml
@@ -19,7 +19,7 @@ permissions:
 jobs:
   scan-scheduled:
     if: ${{ github.event_name == 'push' || github.event_name == 'schedule' }}
-    uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@40a8940a65eab1544a6af759e43d936201a131a2"  # v2.0.3
+    uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@b00f71e051ddddc6e46a193c31c8c0bf283bf9e6"  # v2.1.0
     with:
       scan-args: |-
         --recursive
@@ -32,7 +32,7 @@ jobs:
 
   scan-pr:
     if: ${{ github.event_name == 'pull_request' || github.event_name == 'merge_group' }}
-    uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable-pr.yml@40a8940a65eab1544a6af759e43d936201a131a2"  # v2.0.3
+    uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable-pr.yml@b00f71e051ddddc6e46a193c31c8c0bf283bf9e6"  # v2.1.0
     with:
       scan-args: |-
         --recursive
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index f512e68a2..486a4e722 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -40,6 +40,6 @@ jobs:
         retention-days: 5
 
     - name: "Upload to code-scanning"
-      uses: github/codeql-action/upload-sarif@39edc492dbe16b1465b0cafca41432d857bdb31a  # v3.29.1
+      uses: github/codeql-action/upload-sarif@181d5eefc20863364f96762470ba6f862bdef56b  # v3.29.2
       with:
         sarif_file: results.sarif
diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml
index 671835f70..a2b15673e 100644
--- a/.github/workflows/trivy.yml
+++ b/.github/workflows/trivy.yml
@@ -25,7 +25,7 @@ jobs:
         IMAGE=envoy-proxy/gateway-dev TAG=${{ github.sha }} make image
 
     - name: Run Trivy vulnerability scanner
-      uses: aquasecurity/trivy-action@76071ef0d7ec797419534a183b498b4d6366cf37  # v0.31.0
+      uses: aquasecurity/trivy-action@dc5a429b52fcf669ce959baa2c2dd26090d2a6c4  # v0.32.0
       with:
         image-ref: envoy-proxy/gateway-dev:${{ github.sha }}
         exit-code: '1'
diff --git a/OWNERS b/OWNERS
index 5e4a3b86e..209e6d66f 100644
--- a/OWNERS
+++ b/OWNERS
@@ -33,6 +33,8 @@ reviewers:
 - kflynn
 - tanujd11
 - liorokman
+- jukie
+- kkk777-7
 
 emeritus-reviewers:
 
diff --git a/api/v1alpha1/backend_types.go b/api/v1alpha1/backend_types.go
index ceec90834..3f90209ac 100644
--- a/api/v1alpha1/backend_types.go
+++ b/api/v1alpha1/backend_types.go
@@ -55,6 +55,14 @@ type Backend struct {
 // +kubebuilder:validation:XValidation:rule="(has(self.fqdn) || has(self.ip) || has(self.unix))",message="one of fqdn, ip or unix must be specified"
 // +kubebuilder:validation:XValidation:rule="((has(self.fqdn) && !(has(self.ip) || has(self.unix))) || (has(self.ip) && !(has(self.fqdn) || has(self.unix))) || (has(self.unix) && !(has(self.ip) || has(self.fqdn))))",message="only one of fqdn, ip or unix can be specified"
 type BackendEndpoint struct {
+	// Hostname defines a hostname endpoint.
+	//
+	// +kubebuilder:validation:MinLength=1
+	// +kubebuilder:validation:MaxLength=253
+	// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`
+	// +optional
+	Hostname *string `json:"hostname,omitempty"`
+
 	// FQDN defines a FQDN endpoint
 	//
 	// +optional
diff --git a/api/v1alpha1/envoygateway_helpers.go b/api/v1alpha1/envoygateway_helpers.go
index 63b726691..22a7fcd34 100644
--- a/api/v1alpha1/envoygateway_helpers.go
+++ b/api/v1alpha1/envoygateway_helpers.go
@@ -316,3 +316,51 @@ func (kcr *KubernetesClientRateLimit) GetQPSAndBurst() (float32, int) {
 	burst := ptr.Deref(kcr.Burst, DefaultKubernetesClientBurst)
 	return float32(qps), int(burst)
 }
+
+// ShouldIncludeClusters returns true if clusters should be included in the translation hook.
+// When TranslationConfig is nil, defaults to true for backward compatibility.
+// When TranslationConfig is explicitly set, uses the configuration.
+func (tc *TranslationConfig) ShouldIncludeClusters() bool {
+	if tc == nil || tc.Cluster == nil {
+		// Default behavior: include clusters for backward compatibility
+		return true
+	}
+
+	return ptr.Deref(tc.Cluster.IncludeAll, true)
+}
+
+// ShouldIncludeSecrets returns true if secrets should be included in the translation hook.
+// When TranslationConfig is nil, defaults to true for backward compatibility.
+// When TranslationConfig is explicitly set, uses the configuration.
+func (tc *TranslationConfig) ShouldIncludeSecrets() bool {
+	if tc == nil || tc.Secret == nil {
+		// Default behavior: include secrets for backward compatibility
+		return true
+	}
+
+	return ptr.Deref(tc.Secret.IncludeAll, true)
+}
+
+// ShouldIncludeListeners returns true if listeners should be included in the translation hook.
+// When TranslationConfig is nil, defaults to false for backward compatibility.
+// When TranslationConfig is explicitly set, uses the configuration.
+func (tc *TranslationConfig) ShouldIncludeListeners() bool {
+	if tc == nil || tc.Listener == nil {
+		// Default behavior: exclude listeners for backward compatibility
+		return false
+	}
+
+	return ptr.Deref(tc.Listener.IncludeAll, false)
+}
+
+// ShouldIncludeRoutes returns true if routes should be included in the translation hook.
+// When TranslationConfig is nil, defaults to false for backward compatibility.
+// When TranslationConfig is explicitly set, uses the configuration.
+func (tc *TranslationConfig) ShouldIncludeRoutes() bool {
+	if tc == nil || tc.Route == nil {
+		// Default behavior: exclude routes for backward compatibility
+		return false
+	}
+
+	return ptr.Deref(tc.Route.IncludeAll, false)
+}
diff --git a/api/v1alpha1/envoygateway_types.go b/api/v1alpha1/envoygateway_types.go
index 3c75ee3f0..6d6caa68e 100644
--- a/api/v1alpha1/envoygateway_types.go
+++ b/api/v1alpha1/envoygateway_types.go
@@ -582,6 +582,61 @@ type ExtensionHooks struct {
 type XDSTranslatorHooks struct {
 	Pre  []XDSTranslatorHook `json:"pre,omitempty"`
 	Post []XDSTranslatorHook `json:"post,omitempty"`
+
+	// Translation defines the configuration for the translation hook.
+	Translation *TranslationConfig `json:"translation,omitempty"`
+}
+
+// TranslationConfig defines the configuration for the translation hook.
+type TranslationConfig struct {
+	// Listener defines the configuration for the listener translation hook.
+	//
+	// +optional
+	Listener *ListenerTranslationConfig `json:"listener,omitempty"`
+	// Route defines the configuration for the route translation hook.
+	//
+	// +optional
+	Route *RouteTranslationConfig `json:"route,omitempty"`
+	// Cluster defines the configuration for the cluster translation hook.
+	//
+	// +optional
+	Cluster *ClusterTranslationConfig `json:"cluster,omitempty"`
+	// Secret defines the configuration for the secret translation hook.
+	//
+	// +optional
+	Secret *SecretTranslationConfig `json:"secret,omitempty"`
+}
+
+type ListenerTranslationConfig struct {
+	// IncludeAll defines whether all listeners should be included in the translation hook.
+	// Default is false.
+	//
+	// +optional
+	IncludeAll *bool `json:"includeAll,omitempty"`
+}
+
+type RouteTranslationConfig struct {
+	// IncludeAll defines whether all routes should be included in the translation hook.
+	// Default is false.
+	//
+	// +optional
+	IncludeAll *bool `json:"includeAll,omitempty"`
+}
+
+type ClusterTranslationConfig struct {
+	// IncludeAll defines whether all clusters should be included in the translation hook.
+	// Default is true for backward compatibility.
+	//
+	// +optional
+	IncludeAll *bool `json:"includeAll,omitempty"`
+}
+
+type SecretTranslationConfig struct {
+	// IncludeAll defines whether all secrets should be included in the translation hook.
+	// Default is true for backward compatibility.
+	//
+	// +optional
+	IncludeAll *bool `json:"includeAll,omitempty"`
 }
 
 // ExtensionService defines the configuration for connecting to a registered extension service.
diff --git a/api/v1alpha1/envoyproxy_types.go b/api/v1alpha1/envoyproxy_types.go
index 482cf2811..20baa32df 100644
--- a/api/v1alpha1/envoyproxy_types.go
+++ b/api/v1alpha1/envoyproxy_types.go
@@ -158,12 +158,32 @@ type EnvoyProxySpec struct {
 	// +optional
 	PreserveRouteOrder *bool `json:"preserveRouteOrder,omitempty"`
 
-	// DisableLuaValidation disables the Lua script validation for Lua EnvoyExtensionPolicies
-	// +kubebuilder:default=false
+	// LuaValidation determines strictness of the Lua script validation for Lua EnvoyExtensionPolicies
+	// Default: Strict
 	// +optional
-	DisableLuaValidation *bool `json:"disableLuaValidation,omitempty"`
+	LuaValidation *LuaValidation `json:"luaValidation,omitempty"`
 }
 
+// +kubebuilder:validation:Enum=Strict;Disabled
+type LuaValidation string
+
+const (
+	// LuaValidationStrict is the default level and checks for issues during script execution.
+	// Recommended if your scripts only use the standard Envoy Lua stream handle API.
+	// For supported APIs, see: https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter#stream-handle-api
+	LuaValidationStrict LuaValidation = "Strict"
+
+	// LuaValidationSyntax checks for syntax errors in the Lua script.
+	// Note that this is not a full runtime validation and does not check for issues during script execution.
+	// This is recommended if your scripts use external libraries that are not supported by Lua runtime validation.
+	LuaValidationSyntax LuaValidation = "Syntax"
+
+	// LuaValidationDisabled disables all validations of Lua scripts.
+	// Scripts will be accepted and executed without any validation checks.
+	// This is not recommended unless both runtime and syntax validations are failing unexpectedly.
+	LuaValidationDisabled LuaValidation = "Disabled"
+)
+
 // RoutingType defines the type of routing of this Envoy proxy.
 type RoutingType string
 
diff --git a/api/v1alpha1/ext_auth_types.go b/api/v1alpha1/ext_auth_types.go
index 4a1a8a0b9..0ddb3d8e0 100644
--- a/api/v1alpha1/ext_auth_types.go
+++ b/api/v1alpha1/ext_auth_types.go
@@ -43,6 +43,8 @@ type ExtAuth struct {
 	// the system blocks the traffic and returns a HTTP 5xx error, reflecting a fail-closed approach.
 	// This setting determines whether to prioritize accessibility over strict security in case of authorization service failure.
 	//
+	// If set to true, the External Authorization will also be bypassed if its configuration is invalid.
+	//
 	// +optional
 	// +kubebuilder:default=false
 	FailOpen *bool `json:"failOpen,omitempty"`
@@ -60,8 +62,8 @@ type ExtAuth struct {
 // The authorization request message is defined in
 // https://www.envoyproxy.io/docs/envoy/latest/api-v3/service/auth/v3/external_auth.proto
 // +kubebuilder:validation:XValidation:message="backendRef or backendRefs needs to be set",rule="has(self.backendRef) || self.backendRefs.size() > 0"
-// +kubebuilder:validation:XValidation:message="BackendRefs only supports Service and Backend kind.",rule="has(self.backendRefs) ? self.backendRefs.all(f, f.kind == 'Service' || f.kind == 'Backend') : true"
-// +kubebuilder:validation:XValidation:message="BackendRefs only supports Core and gateway.envoyproxy.io group.",rule="has(self.backendRefs) ? (self.backendRefs.all(f, f.group == \"\" || f.group == 'gateway.envoyproxy.io')) : true"
+// +kubebuilder:validation:XValidation:message="BackendRefs only supports Service, ServiceImport, and Backend kind.",rule="has(self.backendRefs) ? self.backendRefs.all(f, f.kind == 'Service' || f.kind == 'ServiceImport' || f.kind == 'Backend') : true"
+// +kubebuilder:validation:XValidation:message="BackendRefs only supports Core, multicluster.x-k8s.io, and gateway.envoyproxy.io groups.",rule="has(self.backendRefs) ? (self.backendRefs.all(f, f.group == \"\" || f.group == 'multicluster.x-k8s.io' || f.group == 'gateway.envoyproxy.io')) : true"
 type GRPCExtAuthService struct {
 	// Only Service kind is supported for now.
 	BackendCluster `json:",inline"`
@@ -70,8 +72,8 @@ type GRPCExtAuthService struct {
 // HTTPExtAuthService defines the HTTP External Authorization service
 //
 // +kubebuilder:validation:XValidation:message="backendRef or backendRefs needs to be set",rule="has(self.backendRef) || self.backendRefs.size() > 0"
-// +kubebuilder:validation:XValidation:message="BackendRefs only supports Service and Backend kind.",rule="has(self.backendRefs) ? self.backendRefs.all(f, f.kind == 'Service' || f.kind == 'Backend') : true"
-// +kubebuilder:validation:XValidation:message="BackendRefs only supports Core and gateway.envoyproxy.io group.",rule="has(self.backendRefs) ? (self.backendRefs.all(f, f.group == \"\" || f.group == 'gateway.envoyproxy.io')) : true"
+// +kubebuilder:validation:XValidation:message="BackendRefs only supports Service, ServiceImport, and Backend kind.",rule="has(self.backendRefs) ? self.backendRefs.all(f, f.kind == 'Service' || f.kind == 'ServiceImport' || f.kind == 'Backend') : true"
+// +kubebuilder:validation:XValidation:message="BackendRefs only supports Core, multicluster.x-k8s.io, and gateway.envoyproxy.io groups.",rule="has(self.backendRefs) ? (self.backendRefs.all(f, f.group == \"\" || f.group == 'multicluster.x-k8s.io' || f.group == 'gateway.envoyproxy.io')) : true"
 type HTTPExtAuthService struct {
 	// Only Service kind is supported for now.
 	BackendCluster `json:",inline"`
diff --git a/api/v1alpha1/ext_proc_types.go b/api/v1alpha1/ext_proc_types.go
index 9e821f68c..41f57e954 100644
--- a/api/v1alpha1/ext_proc_types.go
+++ b/api/v1alpha1/ext_proc_types.go
@@ -66,9 +66,9 @@ type ExtProcProcessingMode struct {
 
 // ExtProc defines the configuration for External Processing filter.
 // +kubebuilder:validation:XValidation:message="BackendRefs must be used, backendRef is not supported.",rule="!has(self.backendRef)"
-// +kubebuilder:validation:XValidation:message="BackendRefs only supports Service and Backend kind.",rule="has(self.backendRefs) ? self.backendRefs.all(f, f.kind == 'Service' || f.kind == 'Backend') : true"
-// +kubebuilder:validation:XValidation:message="BackendRefs only supports Core and gateway.envoyproxy.io group.",rule="has(self.backendRefs) ? (self.backendRefs.all(f, f.group == \"\" || f.group == 'gateway.envoyproxy.io')) : true"
-// +kubebuilder:validation:XValidation:message="If FullDuplexStreamed body processing mode is used, FailOpen must be false.",rule="!(has(self.failOpen) && self.failOpen == true && ((has(self.processingMode.request.body) && self.processingMode.request.body == 'FullDuplexStreamed') || (has(self.processingMode.response.body) && self.processingMode.response.body == 'FullDuplexStreamed')))"
+// +kubebuilder:validation:XValidation:message="BackendRefs only supports Service, ServiceImport, and Backend kind.",rule="has(self.backendRefs) ? self.backendRefs.all(f, f.kind == 'Service' || f.kind == 'ServiceImport' || f.kind == 'Backend') : true"
+// +kubebuilder:validation:XValidation:message="BackendRefs only supports Core, multicluster.x-k8s.io, and gateway.envoyproxy.io groups.",rule="has(self.backendRefs) ? (self.backendRefs.all(f, f.group == \"\" || f.group == 'multicluster.x-k8s.io' || f.group == 'gateway.envoyproxy.io')) : true"
+// +kubebuilder:validation:XValidation:message="If FullDuplexStreamed body processing mode is used, FailOpen must be false.",rule="!(has(self.failOpen) && self.failOpen == true && has(self.processingMode) && ((has(self.processingMode.request) && has(self.processingMode.request.body) && self.processingMode.request.body == 'FullDuplexStreamed') || (has(self.processingMode.response) && has(self.processingMode.response.body) && self.processingMode.response.body == 'FullDuplexStreamed')))"
 type ExtProc struct {
 	BackendCluster `json:",inline"`
 
@@ -78,11 +78,17 @@ type ExtProc struct {
 	// +optional
 	MessageTimeout *gwapiv1.Duration `json:"messageTimeout,omitempty"`
 
-	// FailOpen defines if requests or responses that cannot be processed due to connectivity to the
-	// external processor are terminated or passed-through.
-	// Default: false
+	// FailOpen is a switch used to control the behavior when failing to call the external processor.
+	//
+	// If FailOpen is set to true, the system bypasses the ExtProc extension and
+	// allows the traffic to pass through. If it is set to false or
+	// not set (defaulting to false), the system blocks the traffic and returns
+	// an HTTP 5xx error.
+	//
+	// If set to true, the ExtProc extension will also be bypassed if the configuration is invalid.
 	//
 	// +optional
+	// +kubebuilder:default=false
 	FailOpen *bool `json:"failOpen,omitempty"`
 
 	// ProcessingMode defines how request and response body is processed
diff --git a/api/v1alpha1/oidc_types.go b/api/v1alpha1/oidc_types.go
index e31527735..7c11927d9 100644
--- a/api/v1alpha1/oidc_types.go
+++ b/api/v1alpha1/oidc_types.go
@@ -23,6 +23,17 @@ type OIDC struct {
 	// +kubebuilder:validation:MinLength=1
 	ClientID string `json:"clientID"`
 
+	// TODO zhaohuabing make ClientID optional in the implementation PR
+
+	// The Kubernetes secret which contains the client ID to be used in the
+	// [Authentication Request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest).
+	// Exactly one of clientID or clientIDRef must be set.
+	// This is an Opaque secret. The client ID should be stored in the key "client-id".
+	//
+	// +optional
+	// +notImplementedHide
+	ClientIDRef *gwapiv1.SecretObjectReference `json:"clientIDRef,omitempty"`
+
 	// The Kubernetes secret which contains the OIDC client secret to be used in the
 	// [Authentication Request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest).
 	//
diff --git a/api/v1alpha1/policy_helpers.go b/api/v1alpha1/policy_helpers.go
index 8c4c9762a..7cf6f7939 100644
--- a/api/v1alpha1/policy_helpers.go
+++ b/api/v1alpha1/policy_helpers.go
@@ -11,6 +11,21 @@ import (
 	gwapiv1a2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 )
 
+const (
+	// PolicyConditionAggregated indicates whether the policy has been aggregated
+	// to satisfy CEL constraints in PolicyAncestorStatus (not exceeding 16).
+	//
+	// Possible reasons for this condition to be True are:
+	//
+	// * "Aggregated"
+	//
+	PolicyConditionAggregated gwapiv1a2.PolicyConditionType = "Aggregated"
+
+	// PolicyReasonAggregated is used with the "Aggregated" condition when the policy
+	// is aggregated to satisfy CEL constraints in PolicyAncestorStatus (not exceeding 16).
+	PolicyReasonAggregated gwapiv1a2.PolicyConditionReason = "Aggregated"
+)
+
 type PolicyTargetReferences struct {
 	// TargetRef is the name of the resource this policy is being attached to.
 	// This policy and the TargetRef MUST be in the same namespace for this
diff --git a/api/v1alpha1/retry_types.go b/api/v1alpha1/retry_types.go
index 1bee8ce75..d5f3eb24d 100644
--- a/api/v1alpha1/retry_types.go
+++ b/api/v1alpha1/retry_types.go
@@ -51,7 +51,7 @@ type RetryOn struct {
 }
 
 // TriggerEnum specifies the conditions that trigger retries.
-// +kubebuilder:validation:Enum={"5xx","gateway-error","reset","connect-failure","retriable-4xx","refused-stream","retriable-status-codes","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"}
+// +kubebuilder:validation:Enum={"5xx","gateway-error","reset","reset-before-request","connect-failure","retriable-4xx","refused-stream","retriable-status-codes","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"}
 type TriggerEnum string
 
 const (
@@ -65,6 +65,8 @@ const (
 	GatewayError TriggerEnum = "gateway-error"
 	// The upstream server does not respond at all (disconnect/reset/read timeout.)
 	Reset TriggerEnum = "reset"
+	// Like reset, but only retry if the request headers have not been sent to the upstream server.
+	ResetBeforeRequest TriggerEnum = "reset-before-request"
 	// Connection failure to the upstream server (connect timeout, etc.). (Included in *5xx*)
 	ConnectFailure TriggerEnum = "connect-failure"
 	// The upstream server responds with a retriable 4xx response code.
diff --git a/api/v1alpha1/timeout_types.go b/api/v1alpha1/timeout_types.go
index 008582578..5ac0cf7fb 100644
--- a/api/v1alpha1/timeout_types.go
+++ b/api/v1alpha1/timeout_types.go
@@ -81,4 +81,10 @@ type HTTPClientTimeout struct {
 	//
 	// +optional
 	IdleTimeout *gwapiv1.Duration `json:"idleTimeout,omitempty"`
+
+	//  The stream idle timeout defines the amount of time a stream can exist without any upstream or downstream activity.
+	//  Default: 5 minutes.
+	//
+	// +optional
+	StreamIdleTimeout *gwapiv1.Duration `json:"streamIdleTimeout,omitempty"`
 }
diff --git a/api/v1alpha1/wasm_types.go b/api/v1alpha1/wasm_types.go
index dc5a5012a..976888f56 100644
--- a/api/v1alpha1/wasm_types.go
+++ b/api/v1alpha1/wasm_types.go
@@ -48,11 +48,14 @@ type Wasm struct {
 
 	// FailOpen is a switch used to control the behavior when a fatal error occurs
 	// during the initialization or the execution of the Wasm extension.
+	//
 	// If FailOpen is set to true, the system bypasses the Wasm extension and
-	// allows the traffic to pass through. Otherwise, if it is set to false or
+	// allows the traffic to pass through. If it is set to false or
 	// not set (defaulting to false), the system blocks the traffic and returns
 	// an HTTP 5xx error.
 	//
+	// If set to true, the Wasm extension will also be bypassed if the configuration is invalid.
+	//
 	// +optional
 	// +kubebuilder:default=false
 	FailOpen *bool `json:"failOpen,omitempty"`
diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go
index b0e5185a2..7257d8f0b 100644
--- a/api/v1alpha1/zz_generated.deepcopy.go
+++ b/api/v1alpha1/zz_generated.deepcopy.go
@@ -371,6 +371,11 @@ func (in *BackendConnection) DeepCopy() *BackendConnection {
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *BackendEndpoint) DeepCopyInto(out *BackendEndpoint) {
 	*out = *in
+	if in.Hostname != nil {
+		in, out := &in.Hostname, &out.Hostname
+		*out = new(string)
+		**out = **in
+	}
 	if in.FQDN != nil {
 		in, out := &in.FQDN, &out.FQDN
 		*out = new(FQDNEndpoint)
@@ -1234,6 +1239,26 @@ func (in *ClusterSettings) DeepCopy() *ClusterSettings {
 	return out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ClusterTranslationConfig) DeepCopyInto(out *ClusterTranslationConfig) {
+	*out = *in
+	if in.IncludeAll != nil {
+		in, out := &in.IncludeAll, &out.IncludeAll
+		*out = new(bool)
+		**out = **in
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterTranslationConfig.
+func (in *ClusterTranslationConfig) DeepCopy() *ClusterTranslationConfig {
+	if in == nil {
+		return nil
+	}
+	out := new(ClusterTranslationConfig)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Compression) DeepCopyInto(out *Compression) {
 	*out = *in
@@ -2412,9 +2437,9 @@ func (in *EnvoyProxySpec) DeepCopyInto(out *EnvoyProxySpec) {
 		*out = new(bool)
 		**out = **in
 	}
-	if in.DisableLuaValidation != nil {
-		in, out := &in.DisableLuaValidation, &out.DisableLuaValidation
-		*out = new(bool)
+	if in.LuaValidation != nil {
+		in, out := &in.LuaValidation, &out.LuaValidation
+		*out = new(LuaValidation)
 		**out = **in
 	}
 }
@@ -3173,6 +3198,11 @@ func (in *HTTPClientTimeout) DeepCopyInto(out *HTTPClientTimeout) {
 		*out = new(v1.Duration)
 		**out = **in
 	}
+	if in.StreamIdleTimeout != nil {
+		in, out := &in.StreamIdleTimeout, &out.StreamIdleTimeout
+		*out = new(v1.Duration)
+		**out = **in
+	}
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPClientTimeout.
@@ -4417,6 +4447,26 @@ func (in *LeaderElection) DeepCopy() *LeaderElection {
 	return out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ListenerTranslationConfig) DeepCopyInto(out *ListenerTranslationConfig) {
+	*out = *in
+	if in.IncludeAll != nil {
+		in, out := &in.IncludeAll, &out.IncludeAll
+		*out = new(bool)
+		**out = **in
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ListenerTranslationConfig.
+func (in *ListenerTranslationConfig) DeepCopy() *ListenerTranslationConfig {
+	if in == nil {
+		return nil
+	}
+	out := new(ListenerTranslationConfig)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *LiteralCustomTag) DeepCopyInto(out *LiteralCustomTag) {
 	*out = *in
@@ -4543,6 +4593,11 @@ func (in *Lua) DeepCopy() *Lua {
 func (in *OIDC) DeepCopyInto(out *OIDC) {
 	*out = *in
 	in.Provider.DeepCopyInto(&out.Provider)
+	if in.ClientIDRef != nil {
+		in, out := &in.ClientIDRef, &out.ClientIDRef
+		*out = new(v1.SecretObjectReference)
+		(*in).DeepCopyInto(*out)
+	}
 	in.ClientSecret.DeepCopyInto(&out.ClientSecret)
 	if in.CookieNames != nil {
 		in, out := &in.CookieNames, &out.CookieNames
@@ -5932,6 +5987,46 @@ func (in *RetryOn) DeepCopy() *RetryOn {
 	return out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *RouteTranslationConfig) DeepCopyInto(out *RouteTranslationConfig) {
+	*out = *in
+	if in.IncludeAll != nil {
+		in, out := &in.IncludeAll, &out.IncludeAll
+		*out = new(bool)
+		**out = **in
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouteTranslationConfig.
+func (in *RouteTranslationConfig) DeepCopy() *RouteTranslationConfig {
+	if in == nil {
+		return nil
+	}
+	out := new(RouteTranslationConfig)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *SecretTranslationConfig) DeepCopyInto(out *SecretTranslationConfig) {
+	*out = *in
+	if in.IncludeAll != nil {
+		in, out := &in.IncludeAll, &out.IncludeAll
+		*out = new(bool)
+		**out = **in
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretTranslationConfig.
+func (in *SecretTranslationConfig) DeepCopy() *SecretTranslationConfig {
+	if in == nil {
+		return nil
+	}
+	out := new(SecretTranslationConfig)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *SecurityPolicy) DeepCopyInto(out *SecurityPolicy) {
 	*out = *in
@@ -6569,6 +6664,41 @@ func (in *TracingProvider) DeepCopy() *TracingProvider {
 	return out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TranslationConfig) DeepCopyInto(out *TranslationConfig) {
+	*out = *in
+	if in.Listener != nil {
+		in, out := &in.Listener, &out.Listener
+		*out = new(ListenerTranslationConfig)
+		(*in).DeepCopyInto(*out)
+	}
+	if in.Route != nil {
+		in, out := &in.Route, &out.Route
+		*out = new(RouteTranslationConfig)
+		(*in).DeepCopyInto(*out)
+	}
+	if in.Cluster != nil {
+		in, out := &in.Cluster, &out.Cluster
+		*out = new(ClusterTranslationConfig)
+		(*in).DeepCopyInto(*out)
+	}
+	if in.Secret != nil {
+		in, out := &in.Secret, &out.Secret
+		*out = new(SecretTranslationConfig)
+		(*in).DeepCopyInto(*out)
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TranslationConfig.
+func (in *TranslationConfig) DeepCopy() *TranslationConfig {
+	if in == nil {
+		return nil
+	}
+	out := new(TranslationConfig)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *UnixSocket) DeepCopyInto(out *UnixSocket) {
 	*out = *in
@@ -6704,6 +6834,11 @@ func (in *XDSTranslatorHooks) DeepCopyInto(out *XDSTranslatorHooks) {
 		*out = make([]XDSTranslatorHook, len(*in))
 		copy(*out, *in)
 	}
+	if in.Translation != nil {
+		in, out := &in.Translation, &out.Translation
+		*out = new(TranslationConfig)
+		(*in).DeepCopyInto(*out)
+	}
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new XDSTranslatorHooks.
diff --git a/charts/gateway-addons-helm/README.md b/charts/gateway-addons-helm/README.md
index ad9bd969a..17a510032 100644
--- a/charts/gateway-addons-helm/README.md
+++ b/charts/gateway-addons-helm/README.md
@@ -41,7 +41,7 @@ The Envoy Gateway must be installed before installing this chart.
 Once Helm has been set up correctly, install the chart from dockerhub:
 
 ``` shell
-    helm install eg-addons oci://docker.io/envoyproxy/gateway-addons-helm --version v0.0.0-latest -n monitoring --create-namespace
+helm install eg-addons oci://docker.io/envoyproxy/gateway-addons-helm --version v0.0.0-latest -n monitoring --create-namespace
 ```
 
 You can find all helm chart release in [Dockerhub](https://hub.docker.com/r/envoyproxy/gateway-addons-helm/tags)
@@ -49,7 +49,7 @@ You can find all helm chart release in [Dockerhub](https://hub.docker.com/r/envo
 To uninstall the chart:
 
 ``` shell
-    helm uninstall eg-addons -n monitoring
+helm uninstall eg-addons -n monitoring
 ```
 
 ## Values
@@ -59,6 +59,7 @@ To uninstall the chart:
 | alloy.alloy.configMap.content | string | `"// Write your Alloy config here:\nlogging {\n  level = \"info\"\n  format = \"logfmt\"\n}\nloki.write \"alloy\" {\n  endpoint {\n    url = \"http://loki.monitoring.svc:3100/loki/api/v1/push\"\n  }\n}\n// discovery.kubernetes allows you to find scrape targets from Kubernetes resources.\n// It watches cluster state and ensures targets are continually synced with what is currently running in your cluster.\ndiscovery.kubernetes \"pod\" {\n  role = \"pod\"\n}\n\n// discovery.relabel rewrites the label set of the input targets by applying one or more relabeling rules.\n// If no rules are defined, then the input targets are exported as-is.\ndiscovery.relabel \"pod_logs\" {\n  targets = discovery.kubernetes.pod.targets\n\n  // Label creation - \"namespace\" field from \"__meta_kubernetes_namespace\"\n  rule {\n    source_labels = [\"__meta_kubernetes_namespace\"]\n    action = \"replace\"\n    target_label = \"namespace\"\n  }\n\n  // Label creation - \"pod\" field from \"__meta_kubernetes_pod_name\"\n  rule {\n    source_labels = [\"__meta_kubernetes_pod_name\"]\n    action = \"replace\"\n    target_label = \"pod\"\n  }\n\n  // Label creation - \"container\" field from \"__meta_kubernetes_pod_container_name\"\n  rule {\n    source_labels = [\"__meta_kubernetes_pod_container_name\"]\n    action = \"replace\"\n    target_label = \"container\"\n  }\n\n  // Label creation -  \"app\" field from \"__meta_kubernetes_pod_label_app_kubernetes_io_name\"\n  rule {\n    source_labels = [\"__meta_kubernetes_pod_label_app_kubernetes_io_name\"]\n    action = \"replace\"\n    target_label = \"app\"\n  }\n\n  // Label creation -  \"job\" field from \"__meta_kubernetes_namespace\" and \"__meta_kubernetes_pod_container_name\"\n  // Concatenate values __meta_kubernetes_namespace/__meta_kubernetes_pod_container_name\n  rule {\n    source_labels = [\"__meta_kubernetes_namespace\", \"__meta_kubernetes_pod_container_name\"]\n    action = \"replace\"\n    target_label = \"job\"\n    separator = \"/\"\n    replacement = \"$1\"\n  }\n\n  // Label creation - \"container\" field from \"__meta_kubernetes_pod_uid\" and \"__meta_kubernetes_pod_container_name\"\n  // Concatenate values __meta_kubernetes_pod_uid/__meta_kubernetes_pod_container_name.log\n  rule {\n    source_labels = [\"__meta_kubernetes_pod_uid\", \"__meta_kubernetes_pod_container_name\"]\n    action = \"replace\"\n    target_label = \"__path__\"\n    separator = \"/\"\n    replacement = \"/var/log/pods/*$1/*.log\"\n  }\n\n  // Label creation -  \"container_runtime\" field from \"__meta_kubernetes_pod_container_id\"\n  rule {\n    source_labels = [\"__meta_kubernetes_pod_container_id\"]\n    action = \"replace\"\n    target_label = \"container_runtime\"\n    regex = \"^(\\\\S+):\\\\/\\\\/.+$\"\n    replacement = \"$1\"\n  }\n}\n\n// loki.source.kubernetes tails logs from Kubernetes containers using the Kubernetes API.\nloki.source.kubernetes \"pod_logs\" {\n  targets    = discovery.relabel.pod_logs.output\n  forward_to = [loki.process.pod_logs.receiver]\n}\n// loki.process receives log entries from other Loki components, applies one or more processing stages,\n// and forwards the results to the list of receivers in the component’s arguments.\nloki.process \"pod_logs\" {\n  stage.static_labels {\n      values = {\n        cluster = \"envoy-gateway\",\n      }\n  }\n\n  forward_to = [loki.write.alloy.receiver]\n}"` |  |
 | alloy.enabled | bool | `false` |  |
 | alloy.fullnameOverride | string | `"alloy"` |  |
+| dashboard.annotations | object | `{}` |  |
 | dashboard.labels | object | `{}` |  |
 | fluent-bit.config.filters | string | `"[FILTER]\n    Name kubernetes\n    Match kube.*\n    Merge_Log On\n    Keep_Log Off\n    K8S-Logging.Parser On\n    K8S-Logging.Exclude On\n\n[FILTER]\n    Name grep\n    Match kube.*\n    Regex $kubernetes['container_name'] ^envoy$\n\n[FILTER]\n    Name parser\n    Match kube.*\n    Key_Name log\n    Parser envoy\n    Reserve_Data True\n"` |  |
 | fluent-bit.config.inputs | string | `"[INPUT]\n    Name tail\n    Path /var/log/containers/*.log\n    multiline.parser docker, cri\n    Tag kube.*\n    Mem_Buf_Limit 5MB\n    Skip_Long_Lines On\n"` |  |
diff --git a/charts/gateway-addons-helm/templates/dashboards_config.yaml b/charts/gateway-addons-helm/templates/dashboards_config.yaml
index b88bb3114..3ebd6f2ea 100644
--- a/charts/gateway-addons-helm/templates/dashboards_config.yaml
+++ b/charts/gateway-addons-helm/templates/dashboards_config.yaml
@@ -6,6 +6,9 @@ metadata:
   {{- with .Values.dashboard.labels }}
   labels: {{- . | toYaml | nindent 4 }}
   {{- end }}
+  {{- with .Values.dashboard.annotations }}
+  annotations: {{- . | toYaml | nindent 4 }}
+  {{- end }}
 data:
   {{- $files := .Files }}
   {{- range $path, $_ := $files.Glob "dashboards/*.json" }}
diff --git a/charts/gateway-addons-helm/values.yaml b/charts/gateway-addons-helm/values.yaml
index 309b6ee92..7408737ce 100644
--- a/charts/gateway-addons-helm/values.yaml
+++ b/charts/gateway-addons-helm/values.yaml
@@ -1,5 +1,6 @@
 dashboard:
   labels: {}
+  annotations: {}
 
 # Values for Grafana dependency
 grafana:
diff --git a/charts/gateway-crds-helm/README.md b/charts/gateway-crds-helm/README.md
index 54998fa96..a729d50b2 100644
--- a/charts/gateway-crds-helm/README.md
+++ b/charts/gateway-crds-helm/README.md
@@ -17,15 +17,20 @@ If you do, make sure that you don't install the CRDs again when installing the E
 Once Helm has been set up correctly, install the chart from dockerhub:
 
 ``` shell
-    helm install gateway-crds oci://docker.io/envoyproxy/gateway-crds-helm --version v0.0.0-latest -n envoy-gateway-system --create-namespace
+helm template eg-crds oci://docker.io/envoyproxy/gateway-crds-helm \
+    --version v0.0.0-latest | kubectl apply --server-side -f -
 ```
 
+**Note**: We're using `helm template` piped into `kubectl apply` instead of `helm install` due to a [known Helm limitation](https://github.com/helm/helm/pull/12277)
+related to large CRDs in the `templates/` directory.
+
 You can find all helm chart release in [Dockerhub](https://hub.docker.com/r/envoyproxy/gateway-crds-helm/tags)
 
 To uninstall the chart:
 
 ``` shell
-    helm uninstall gateway-crds -n envoy-gateway-system
+helm template eg-crds oci://docker.io/envoyproxy/gateway-crds-helm \
+    --version v0.0.0-latest | kubectl delete --server-side -f -
 ```
 
 ## Values
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backends.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backends.yaml
index 3688b15c9..f01176af9 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backends.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backends.yaml
@@ -93,6 +93,12 @@ spec:
                       - hostname
                       - port
                       type: object
+                    hostname:
+                      description: Hostname defines a hostname endpoint.
+                      maxLength: 253
+                      minLength: 1
+                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                      type: string
                     ip:
                       description: IP defines an IP endpoint. Supports both IPv4 and
                         IPv6 addresses.
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
index 5059c61db..ba898cd65 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
@@ -1648,6 +1648,7 @@ spec:
                           - 5xx
                           - gateway-error
                           - reset
+                          - reset-before-request
                           - connect-failure
                           - retriable-4xx
                           - refused-stream
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml
index c9257bacc..0f1078b7a 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml
@@ -726,6 +726,12 @@ spec:
                           initiation and stops when either the last byte of the request is sent upstream or when the response begins.
                         pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
                         type: string
+                      streamIdleTimeout:
+                        description: |2-
+                           The stream idle timeout defines the amount of time a stream can exist without any upstream or downstream activity.
+                           Default: 5 minutes.
+                        pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
+                        type: string
                     type: object
                   tcp:
                     description: Timeout settings for TCP.
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
index 6d95b9d11..b1b737330 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
@@ -905,6 +905,7 @@ spec:
                                     - 5xx
                                     - gateway-error
                                     - reset
+                                    - reset-before-request
                                     - connect-failure
                                     - retriable-4xx
                                     - refused-stream
@@ -982,10 +983,16 @@ spec:
                           type: object
                       type: object
                     failOpen:
+                      default: false
                       description: |-
-                        FailOpen defines if requests or responses that cannot be processed due to connectivity to the
-                        external processor are terminated or passed-through.
-                        Default: false
+                        FailOpen is a switch used to control the behavior when failing to call the external processor.
+
+                        If FailOpen is set to true, the system bypasses the ExtProc extension and
+                        allows the traffic to pass through. If it is set to false or
+                        not set (defaulting to false), the system blocks the traffic and returns
+                        an HTTP 5xx error.
+
+                        If set to true, the ExtProc extension will also be bypassed if the configuration is invalid.
                       type: boolean
                     messageTimeout:
                       description: |-
@@ -1083,19 +1090,23 @@ spec:
                   x-kubernetes-validations:
                   - message: BackendRefs must be used, backendRef is not supported.
                     rule: '!has(self.backendRef)'
-                  - message: BackendRefs only supports Service and Backend kind.
+                  - message: BackendRefs only supports Service, ServiceImport, and
+                      Backend kind.
                     rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                      == ''Service'' || f.kind == ''Backend'') : true'
-                  - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                      group.
+                      == ''Service'' || f.kind == ''ServiceImport'' || f.kind == ''Backend'')
+                      : true'
+                  - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                      and gateway.envoyproxy.io groups.
                     rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                      == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                      == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                      ''gateway.envoyproxy.io'')) : true'
                   - message: If FullDuplexStreamed body processing mode is used, FailOpen
                       must be false.
-                    rule: '!(has(self.failOpen) && self.failOpen == true && ((has(self.processingMode.request.body)
+                    rule: '!(has(self.failOpen) && self.failOpen == true && has(self.processingMode)
+                      && ((has(self.processingMode.request) && has(self.processingMode.request.body)
                       && self.processingMode.request.body == ''FullDuplexStreamed'')
-                      || (has(self.processingMode.response.body) && self.processingMode.response.body
-                      == ''FullDuplexStreamed'')))'
+                      || (has(self.processingMode.response) && has(self.processingMode.response.body)
+                      && self.processingMode.response.body == ''FullDuplexStreamed'')))'
                 maxItems: 16
                 type: array
               lua:
@@ -1604,10 +1615,13 @@ spec:
                       description: |-
                         FailOpen is a switch used to control the behavior when a fatal error occurs
                         during the initialization or the execution of the Wasm extension.
+
                         If FailOpen is set to true, the system bypasses the Wasm extension and
-                        allows the traffic to pass through. Otherwise, if it is set to false or
+                        allows the traffic to pass through. If it is set to false or
                         not set (defaulting to false), the system blocks the traffic and returns
                         an HTTP 5xx error.
+
+                        If set to true, the Wasm extension will also be bypassed if the configuration is invalid.
                       type: boolean
                     name:
                       description: |-
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
index c5b6403b5..a075e4f9b 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
@@ -270,11 +270,6 @@ spec:
                   the number of cpuset threads on the platform.
                 format: int32
                 type: integer
-              disableLuaValidation:
-                default: false
-                description: DisableLuaValidation disables the Lua script validation
-                  for Lua EnvoyExtensionPolicies
-                type: boolean
               extraArgs:
                 description: |-
                   ExtraArgs defines additional command line options that are provided to Envoy.
@@ -442,6 +437,14 @@ spec:
                       and the log level is the value. If unspecified, defaults to "default: warn".
                     type: object
                 type: object
+              luaValidation:
+                description: |-
+                  LuaValidation determines strictness of the Lua script validation for Lua EnvoyExtensionPolicies
+                  Default: Strict
+                enum:
+                - Strict
+                - Disabled
+                type: string
               mergeGateways:
                 description: |-
                   MergeGateways defines if Gateway resources should be merged onto the same Envoy Proxy Infrastructure.
@@ -11508,6 +11511,7 @@ spec:
                                                       - 5xx
                                                       - gateway-error
                                                       - reset
+                                                      - reset-before-request
                                                       - connect-failure
                                                       - retriable-4xx
                                                       - refused-stream
@@ -12580,6 +12584,7 @@ spec:
                                                       - 5xx
                                                       - gateway-error
                                                       - reset
+                                                      - reset-before-request
                                                       - connect-failure
                                                       - retriable-4xx
                                                       - refused-stream
@@ -13731,6 +13736,7 @@ spec:
                                                 - 5xx
                                                 - gateway-error
                                                 - reset
+                                                - reset-before-request
                                                 - connect-failure
                                                 - retriable-4xx
                                                 - refused-stream
@@ -14804,6 +14810,7 @@ spec:
                                           - 5xx
                                           - gateway-error
                                           - reset
+                                          - reset-before-request
                                           - connect-failure
                                           - retriable-4xx
                                           - refused-stream
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml
index 86fb0b6fa..edf283227 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml
@@ -541,6 +541,8 @@ spec:
                       Otherwise, if it is set to false or not set (defaulting to false),
                       the system blocks the traffic and returns a HTTP 5xx error, reflecting a fail-closed approach.
                       This setting determines whether to prioritize accessibility over strict security in case of authorization service failure.
+
+                      If set to true, the External Authorization will also be bypassed if its configuration is invalid.
                     type: boolean
                   grpc:
                     description: |-
@@ -1407,6 +1409,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream
@@ -1487,13 +1490,16 @@ spec:
                     x-kubernetes-validations:
                     - message: backendRef or backendRefs needs to be set
                       rule: has(self.backendRef) || self.backendRefs.size() > 0
-                    - message: BackendRefs only supports Service and Backend kind.
+                    - message: BackendRefs only supports Service, ServiceImport, and
+                        Backend kind.
                       rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                        == ''Service'' || f.kind == ''Backend'') : true'
-                    - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                        group.
+                        == ''Service'' || f.kind == ''ServiceImport'' || f.kind ==
+                        ''Backend'') : true'
+                    - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                        and gateway.envoyproxy.io groups.
                       rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                        == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                        == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                        ''gateway.envoyproxy.io'')) : true'
                   headersToExtAuth:
                     description: |-
                       HeadersToExtAuth defines the client request headers that will be included
@@ -2374,6 +2380,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream
@@ -2475,13 +2482,16 @@ spec:
                     x-kubernetes-validations:
                     - message: backendRef or backendRefs needs to be set
                       rule: has(self.backendRef) || self.backendRefs.size() > 0
-                    - message: BackendRefs only supports Service and Backend kind.
+                    - message: BackendRefs only supports Service, ServiceImport, and
+                        Backend kind.
                       rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                        == ''Service'' || f.kind == ''Backend'') : true'
-                    - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                        group.
+                        == ''Service'' || f.kind == ''ServiceImport'' || f.kind ==
+                        ''Backend'') : true'
+                    - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                        and gateway.envoyproxy.io groups.
                       rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                        == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                        == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                        ''gateway.envoyproxy.io'')) : true'
                   recomputeRoute:
                     description: |-
                       RecomputeRoute clears the route cache and recalculates the routing decision.
@@ -3548,6 +3558,7 @@ spec:
                                             - 5xx
                                             - gateway-error
                                             - reset
+                                            - reset-before-request
                                             - connect-failure
                                             - retriable-4xx
                                             - refused-stream
@@ -3672,6 +3683,51 @@ spec:
                       [Authentication Request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest).
                     minLength: 1
                     type: string
+                  clientIDRef:
+                    description: |-
+                      The Kubernetes secret which contains the client ID to be used in the
+                      [Authentication Request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest).
+                      Exactly one of clientID or clientIDRef must be set.
+                      This is an Opaque secret. The client ID should be stored in the key "client-id".
+                    properties:
+                      group:
+                        default: ""
+                        description: |-
+                          Group is the group of the referent. For example, "gateway.networking.k8s.io".
+                          When unspecified or empty string, core API group is inferred.
+                        maxLength: 253
+                        pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                        type: string
+                      kind:
+                        default: Secret
+                        description: Kind is kind of the referent. For example "Secret".
+                        maxLength: 63
+                        minLength: 1
+                        pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
+                        type: string
+                      name:
+                        description: Name is the name of the referent.
+                        maxLength: 253
+                        minLength: 1
+                        type: string
+                      namespace:
+                        description: |-
+                          Namespace is the namespace of the referenced object. When unspecified, the local
+                          namespace is inferred.
+
+                          Note that when a namespace different than the local namespace is specified,
+                          a ReferenceGrant object is required in the referent namespace to allow that
+                          namespace's owner to accept the reference. See the ReferenceGrant
+                          documentation for details.
+
+                          Support: Core
+                        maxLength: 63
+                        minLength: 1
+                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
+                        type: string
+                    required:
+                    - name
+                    type: object
                   clientSecret:
                     description: |-
                       The Kubernetes secret which contains the OIDC client secret to be used in the
@@ -4709,6 +4765,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream
diff --git a/charts/gateway-helm/README.md b/charts/gateway-helm/README.md
index d2c7c8d68..1b296544b 100644
--- a/charts/gateway-helm/README.md
+++ b/charts/gateway-helm/README.md
@@ -27,7 +27,7 @@ Please refer to Helm's [documentation](https://helm.sh/docs) to get started.
 Once Helm has been set up correctly, install the chart from dockerhub:
 
 ``` shell
-    helm install eg oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --create-namespace
+helm install eg oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --create-namespace
 ```
 You can find all helm chart release in [Dockerhub](https://hub.docker.com/r/envoyproxy/gateway-helm/tags)
 
@@ -38,7 +38,7 @@ You can also install the helm chart from the source code:
 To install the eg chart along with Gateway API CRDs and Envoy Gateway CRDs:
 
 ``` shell
-    make kube-deploy TAG=latest
+make kube-deploy TAG=latest
 ```
 
 ### Skip install CRDs
@@ -46,13 +46,13 @@ To install the eg chart along with Gateway API CRDs and Envoy Gateway CRDs:
 You can install the eg chart along without Gateway API CRDs and Envoy Gateway CRDs, make sure CRDs exist in Cluster first if you want to skip to install them, otherwise EG may fail to start:
 
 ``` shell
-    helm install eg --create-namespace oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --skip-crds
+helm install eg --create-namespace oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --skip-crds
 ```
 
 To uninstall the chart:
 
 ``` shell
-    helm uninstall eg -n envoy-gateway-system
+helm uninstall eg -n envoy-gateway-system
 ```
 
 ## Values
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backends.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backends.yaml
index a821ded07..4d530233a 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backends.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backends.yaml
@@ -92,6 +92,12 @@ spec:
                       - hostname
                       - port
                       type: object
+                    hostname:
+                      description: Hostname defines a hostname endpoint.
+                      maxLength: 253
+                      minLength: 1
+                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                      type: string
                     ip:
                       description: IP defines an IP endpoint. Supports both IPv4 and
                         IPv6 addresses.
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
index a1d2400b8..b72477090 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
@@ -1647,6 +1647,7 @@ spec:
                           - 5xx
                           - gateway-error
                           - reset
+                          - reset-before-request
                           - connect-failure
                           - retriable-4xx
                           - refused-stream
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml
index fef902b27..bf1c7e98a 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml
@@ -725,6 +725,12 @@ spec:
                           initiation and stops when either the last byte of the request is sent upstream or when the response begins.
                         pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
                         type: string
+                      streamIdleTimeout:
+                        description: |2-
+                           The stream idle timeout defines the amount of time a stream can exist without any upstream or downstream activity.
+                           Default: 5 minutes.
+                        pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
+                        type: string
                     type: object
                   tcp:
                     description: Timeout settings for TCP.
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
index a1a0d63ef..bea703237 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
@@ -904,6 +904,7 @@ spec:
                                     - 5xx
                                     - gateway-error
                                     - reset
+                                    - reset-before-request
                                     - connect-failure
                                     - retriable-4xx
                                     - refused-stream
@@ -981,10 +982,16 @@ spec:
                           type: object
                       type: object
                     failOpen:
+                      default: false
                       description: |-
-                        FailOpen defines if requests or responses that cannot be processed due to connectivity to the
-                        external processor are terminated or passed-through.
-                        Default: false
+                        FailOpen is a switch used to control the behavior when failing to call the external processor.
+
+                        If FailOpen is set to true, the system bypasses the ExtProc extension and
+                        allows the traffic to pass through. If it is set to false or
+                        not set (defaulting to false), the system blocks the traffic and returns
+                        an HTTP 5xx error.
+
+                        If set to true, the ExtProc extension will also be bypassed if the configuration is invalid.
                       type: boolean
                     messageTimeout:
                       description: |-
@@ -1082,19 +1089,23 @@ spec:
                   x-kubernetes-validations:
                   - message: BackendRefs must be used, backendRef is not supported.
                     rule: '!has(self.backendRef)'
-                  - message: BackendRefs only supports Service and Backend kind.
+                  - message: BackendRefs only supports Service, ServiceImport, and
+                      Backend kind.
                     rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                      == ''Service'' || f.kind == ''Backend'') : true'
-                  - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                      group.
+                      == ''Service'' || f.kind == ''ServiceImport'' || f.kind == ''Backend'')
+                      : true'
+                  - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                      and gateway.envoyproxy.io groups.
                     rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                      == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                      == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                      ''gateway.envoyproxy.io'')) : true'
                   - message: If FullDuplexStreamed body processing mode is used, FailOpen
                       must be false.
-                    rule: '!(has(self.failOpen) && self.failOpen == true && ((has(self.processingMode.request.body)
+                    rule: '!(has(self.failOpen) && self.failOpen == true && has(self.processingMode)
+                      && ((has(self.processingMode.request) && has(self.processingMode.request.body)
                       && self.processingMode.request.body == ''FullDuplexStreamed'')
-                      || (has(self.processingMode.response.body) && self.processingMode.response.body
-                      == ''FullDuplexStreamed'')))'
+                      || (has(self.processingMode.response) && has(self.processingMode.response.body)
+                      && self.processingMode.response.body == ''FullDuplexStreamed'')))'
                 maxItems: 16
                 type: array
               lua:
@@ -1603,10 +1614,13 @@ spec:
                       description: |-
                         FailOpen is a switch used to control the behavior when a fatal error occurs
                         during the initialization or the execution of the Wasm extension.
+
                         If FailOpen is set to true, the system bypasses the Wasm extension and
-                        allows the traffic to pass through. Otherwise, if it is set to false or
+                        allows the traffic to pass through. If it is set to false or
                         not set (defaulting to false), the system blocks the traffic and returns
                         an HTTP 5xx error.
+
+                        If set to true, the Wasm extension will also be bypassed if the configuration is invalid.
                       type: boolean
                     name:
                       description: |-
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
index b8f200c01..334f2e8b1 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
@@ -269,11 +269,6 @@ spec:
                   the number of cpuset threads on the platform.
                 format: int32
                 type: integer
-              disableLuaValidation:
-                default: false
-                description: DisableLuaValidation disables the Lua script validation
-                  for Lua EnvoyExtensionPolicies
-                type: boolean
               extraArgs:
                 description: |-
                   ExtraArgs defines additional command line options that are provided to Envoy.
@@ -441,6 +436,14 @@ spec:
                       and the log level is the value. If unspecified, defaults to "default: warn".
                     type: object
                 type: object
+              luaValidation:
+                description: |-
+                  LuaValidation determines strictness of the Lua script validation for Lua EnvoyExtensionPolicies
+                  Default: Strict
+                enum:
+                - Strict
+                - Disabled
+                type: string
               mergeGateways:
                 description: |-
                   MergeGateways defines if Gateway resources should be merged onto the same Envoy Proxy Infrastructure.
@@ -11507,6 +11510,7 @@ spec:
                                                       - 5xx
                                                       - gateway-error
                                                       - reset
+                                                      - reset-before-request
                                                       - connect-failure
                                                       - retriable-4xx
                                                       - refused-stream
@@ -12579,6 +12583,7 @@ spec:
                                                       - 5xx
                                                       - gateway-error
                                                       - reset
+                                                      - reset-before-request
                                                       - connect-failure
                                                       - retriable-4xx
                                                       - refused-stream
@@ -13730,6 +13735,7 @@ spec:
                                                 - 5xx
                                                 - gateway-error
                                                 - reset
+                                                - reset-before-request
                                                 - connect-failure
                                                 - retriable-4xx
                                                 - refused-stream
@@ -14803,6 +14809,7 @@ spec:
                                           - 5xx
                                           - gateway-error
                                           - reset
+                                          - reset-before-request
                                           - connect-failure
                                           - retriable-4xx
                                           - refused-stream
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml
index e418841cc..27ed90d7c 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml
@@ -540,6 +540,8 @@ spec:
                       Otherwise, if it is set to false or not set (defaulting to false),
                       the system blocks the traffic and returns a HTTP 5xx error, reflecting a fail-closed approach.
                       This setting determines whether to prioritize accessibility over strict security in case of authorization service failure.
+
+                      If set to true, the External Authorization will also be bypassed if its configuration is invalid.
                     type: boolean
                   grpc:
                     description: |-
@@ -1406,6 +1408,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream
@@ -1486,13 +1489,16 @@ spec:
                     x-kubernetes-validations:
                     - message: backendRef or backendRefs needs to be set
                       rule: has(self.backendRef) || self.backendRefs.size() > 0
-                    - message: BackendRefs only supports Service and Backend kind.
+                    - message: BackendRefs only supports Service, ServiceImport, and
+                        Backend kind.
                       rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                        == ''Service'' || f.kind == ''Backend'') : true'
-                    - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                        group.
+                        == ''Service'' || f.kind == ''ServiceImport'' || f.kind ==
+                        ''Backend'') : true'
+                    - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                        and gateway.envoyproxy.io groups.
                       rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                        == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                        == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                        ''gateway.envoyproxy.io'')) : true'
                   headersToExtAuth:
                     description: |-
                       HeadersToExtAuth defines the client request headers that will be included
@@ -2373,6 +2379,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream
@@ -2474,13 +2481,16 @@ spec:
                     x-kubernetes-validations:
                     - message: backendRef or backendRefs needs to be set
                       rule: has(self.backendRef) || self.backendRefs.size() > 0
-                    - message: BackendRefs only supports Service and Backend kind.
+                    - message: BackendRefs only supports Service, ServiceImport, and
+                        Backend kind.
                       rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                        == ''Service'' || f.kind == ''Backend'') : true'
-                    - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                        group.
+                        == ''Service'' || f.kind == ''ServiceImport'' || f.kind ==
+                        ''Backend'') : true'
+                    - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                        and gateway.envoyproxy.io groups.
                       rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                        == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                        == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                        ''gateway.envoyproxy.io'')) : true'
                   recomputeRoute:
                     description: |-
                       RecomputeRoute clears the route cache and recalculates the routing decision.
@@ -3547,6 +3557,7 @@ spec:
                                             - 5xx
                                             - gateway-error
                                             - reset
+                                            - reset-before-request
                                             - connect-failure
                                             - retriable-4xx
                                             - refused-stream
@@ -3671,6 +3682,51 @@ spec:
                       [Authentication Request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest).
                     minLength: 1
                     type: string
+                  clientIDRef:
+                    description: |-
+                      The Kubernetes secret which contains the client ID to be used in the
+                      [Authentication Request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest).
+                      Exactly one of clientID or clientIDRef must be set.
+                      This is an Opaque secret. The client ID should be stored in the key "client-id".
+                    properties:
+                      group:
+                        default: ""
+                        description: |-
+                          Group is the group of the referent. For example, "gateway.networking.k8s.io".
+                          When unspecified or empty string, core API group is inferred.
+                        maxLength: 253
+                        pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                        type: string
+                      kind:
+                        default: Secret
+                        description: Kind is kind of the referent. For example "Secret".
+                        maxLength: 63
+                        minLength: 1
+                        pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
+                        type: string
+                      name:
+                        description: Name is the name of the referent.
+                        maxLength: 253
+                        minLength: 1
+                        type: string
+                      namespace:
+                        description: |-
+                          Namespace is the namespace of the referenced object. When unspecified, the local
+                          namespace is inferred.
+
+                          Note that when a namespace different than the local namespace is specified,
+                          a ReferenceGrant object is required in the referent namespace to allow that
+                          namespace's owner to accept the reference. See the ReferenceGrant
+                          documentation for details.
+
+                          Support: Core
+                        maxLength: 63
+                        minLength: 1
+                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
+                        type: string
+                    required:
+                    - name
+                    type: object
                   clientSecret:
                     description: |-
                       The Kubernetes secret which contains the OIDC client secret to be used in the
@@ -4708,6 +4764,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream
diff --git a/examples/envoy-ext-auth/go.mod b/examples/envoy-ext-auth/go.mod
index c1c921c48..75e847f63 100644
--- a/examples/envoy-ext-auth/go.mod
+++ b/examples/envoy-ext-auth/go.mod
@@ -13,8 +13,8 @@ require (
 	github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f // indirect
 	github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect
 	github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
-	golang.org/x/net v0.41.0 // indirect
-	golang.org/x/sys v0.33.0 // indirect
-	golang.org/x/text v0.26.0 // indirect
+	golang.org/x/net v0.42.0 // indirect
+	golang.org/x/sys v0.34.0 // indirect
+	golang.org/x/text v0.27.0 // indirect
 	google.golang.org/protobuf v1.36.6 // indirect
 )
diff --git a/examples/envoy-ext-auth/go.sum b/examples/envoy-ext-auth/go.sum
index 0cda245a5..52f4a90ca 100644
--- a/examples/envoy-ext-auth/go.sum
+++ b/examples/envoy-ext-auth/go.sum
@@ -28,12 +28,12 @@ go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5J
 go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
 go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
 go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
-golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
-golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
-golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
-golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
-golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
+golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
+golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
+golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
+golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
+golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 h1:e0AIkUUhxyBKh6ssZNrAMeqhA7RKUj42346d1y02i2g=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
 google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
diff --git a/examples/extension-server/config/extension-manager-with-listeners-routes.yaml b/examples/extension-server/config/extension-manager-with-listeners-routes.yaml
new file mode 100644
index 000000000..28438d94b
--- /dev/null
+++ b/examples/extension-server/config/extension-manager-with-listeners-routes.yaml
@@ -0,0 +1,41 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: envoy-gateway-config
+  namespace: envoy-gateway-system
+data:
+  envoy-gateway.yaml: |
+    apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: EnvoyGateway
+    provider:
+      type: Kubernetes
+    gateway:
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    extensionManager:
+      # Envoy Gateway will watch these resource kinds and use them as extension policies
+      # which can be attached to Gateway resources.
+      policyResources:
+      - group: example.extensions.io
+        version: v1alpha1
+        kind: ListenerContextExample
+      hooks:
+        # The type of hooks that should be invoked
+        xdsTranslator:
+          post:
+          - HTTPListener
+          - Translation
+          # Enable listeners and routes in PostTranslateModifyHook
+          # This allows the extension server to receive and modify all four resource types:
+          # clusters, secrets, listeners, and routes
+          # Default: false for listeners and routes (for backward compatibility)
+          # Default: true for clusters and secrets (for backward compatibility)
+          translation:
+            listener:
+              includeAll: true
+            route:
+              includeAll: true
+      service:
+        # The service that is hosting the extension server
+        fqdn:
+          hostname: extension-server.envoy-gateway-system.svc.cluster.local
+          port: 5005
diff --git a/examples/extension-server/go.mod b/examples/extension-server/go.mod
index d185e44e2..9b72dae0a 100644
--- a/examples/extension-server/go.mod
+++ b/examples/extension-server/go.mod
@@ -34,22 +34,22 @@ require (
 	github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
 	github.com/spf13/cobra v1.9.1 // indirect
-	github.com/spf13/pflag v1.0.6 // indirect
+	github.com/spf13/pflag v1.0.7 // indirect
 	github.com/x448/float16 v0.8.4 // indirect
 	github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
 	golang.org/x/mod v0.25.0 // indirect
-	golang.org/x/net v0.41.0 // indirect
-	golang.org/x/sync v0.15.0 // indirect
-	golang.org/x/sys v0.33.0 // indirect
-	golang.org/x/text v0.26.0 // indirect
+	golang.org/x/net v0.42.0 // indirect
+	golang.org/x/sync v0.16.0 // indirect
+	golang.org/x/sys v0.34.0 // indirect
+	golang.org/x/text v0.27.0 // indirect
 	golang.org/x/tools v0.34.0 // indirect
 	google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
-	k8s.io/api v0.33.1 // indirect
-	k8s.io/apiextensions-apiserver v0.33.1 // indirect
+	k8s.io/api v0.33.2 // indirect
+	k8s.io/apiextensions-apiserver v0.33.2 // indirect
 	k8s.io/klog/v2 v2.130.1 // indirect
 	k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect
 	sigs.k8s.io/controller-tools v0.17.3 // indirect
diff --git a/examples/extension-server/go.sum b/examples/extension-server/go.sum
index f64d09576..8deddcd82 100644
--- a/examples/extension-server/go.sum
+++ b/examples/extension-server/go.sum
@@ -79,8 +79,9 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
 github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
-github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
 github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
+github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@@ -123,23 +124,23 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
-golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
+golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
+golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
-golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
+golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
+golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
-golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
+golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
-golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
+golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
+golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
@@ -170,10 +171,10 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.33.1 h1:tA6Cf3bHnLIrUK4IqEgb2v++/GYUtqiu9sRVk3iBXyw=
-k8s.io/api v0.33.1/go.mod h1:87esjTn9DRSRTD4fWMXamiXxJhpOIREjWOSjsW1kEHw=
-k8s.io/apiextensions-apiserver v0.33.1 h1:N7ccbSlRN6I2QBcXevB73PixX2dQNIW0ZRuguEE91zI=
-k8s.io/apiextensions-apiserver v0.33.1/go.mod h1:uNQ52z1A1Gu75QSa+pFK5bcXc4hq7lpOXbweZgi4dqA=
+k8s.io/api v0.33.2 h1:YgwIS5jKfA+BZg//OQhkJNIfie/kmRsO0BmNaVSimvY=
+k8s.io/api v0.33.2/go.mod h1:fhrbphQJSM2cXzCWgqU29xLDuks4mu7ti9vveEnpSXs=
+k8s.io/apiextensions-apiserver v0.33.2 h1:6gnkIbngnaUflR3XwE1mCefN3YS8yTD631JXQhsU6M8=
+k8s.io/apiextensions-apiserver v0.33.2/go.mod h1:IvVanieYsEHJImTKXGP6XCOjTwv2LUMos0YWc9O+QP8=
 k8s.io/apimachinery v0.34.0-alpha.0 h1:arymqm+uCpPEAVWBCvNF+yq01AJzsoUeUd2DYpoHuzc=
 k8s.io/apimachinery v0.34.0-alpha.0/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM=
 k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
diff --git a/examples/grpc-ext-proc/go.mod b/examples/grpc-ext-proc/go.mod
index 101c80e76..c2c1cedac 100644
--- a/examples/grpc-ext-proc/go.mod
+++ b/examples/grpc-ext-proc/go.mod
@@ -12,8 +12,8 @@ require (
 	github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f // indirect
 	github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect
 	github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
-	golang.org/x/net v0.41.0 // indirect
-	golang.org/x/sys v0.33.0 // indirect
-	golang.org/x/text v0.26.0 // indirect
+	golang.org/x/net v0.42.0 // indirect
+	golang.org/x/sys v0.34.0 // indirect
+	golang.org/x/text v0.27.0 // indirect
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 // indirect
 )
diff --git a/examples/grpc-ext-proc/go.sum b/examples/grpc-ext-proc/go.sum
index 0cda245a5..52f4a90ca 100644
--- a/examples/grpc-ext-proc/go.sum
+++ b/examples/grpc-ext-proc/go.sum
@@ -28,12 +28,12 @@ go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5J
 go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
 go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
 go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
-golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
-golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
-golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
-golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
-golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
+golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
+golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
+golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
+golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
+golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 h1:e0AIkUUhxyBKh6ssZNrAMeqhA7RKUj42346d1y02i2g=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
 google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
diff --git a/examples/preserve-case-backend/go.mod b/examples/preserve-case-backend/go.mod
index 5092104a7..2e6b968d8 100644
--- a/examples/preserve-case-backend/go.mod
+++ b/examples/preserve-case-backend/go.mod
@@ -2,10 +2,10 @@ module github.com/envoyproxy/gateway-preserve-case-backend
 
 go 1.24.4
 
-require github.com/valyala/fasthttp v1.62.0
+require github.com/valyala/fasthttp v1.64.0
 
 require (
-	github.com/andybalholm/brotli v1.1.1 // indirect
+	github.com/andybalholm/brotli v1.2.0 // indirect
 	github.com/klauspost/compress v1.18.0 // indirect
 	github.com/valyala/bytebufferpool v1.0.0 // indirect
 )
diff --git a/examples/preserve-case-backend/go.sum b/examples/preserve-case-backend/go.sum
index a4f5738ca..3d992599b 100644
--- a/examples/preserve-case-backend/go.sum
+++ b/examples/preserve-case-backend/go.sum
@@ -1,10 +1,10 @@
-github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA=
-github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA=
+github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ=
+github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
 github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
 github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
 github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
 github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
-github.com/valyala/fasthttp v1.62.0 h1:8dKRBX/y2rCzyc6903Zu1+3qN0H/d2MsxPPmVNamiH0=
-github.com/valyala/fasthttp v1.62.0/go.mod h1:FCINgr4GKdKqV8Q0xv8b+UxPV+H/O5nNFo3D+r54Htg=
+github.com/valyala/fasthttp v1.64.0 h1:QBygLLQmiAyiXuRhthf0tuRkqAFcrC42dckN2S+N3og=
+github.com/valyala/fasthttp v1.64.0/go.mod h1:dGmFxwkWXSK0NbOSJuF7AMVzU+lkHz0wQVvVITv2UQA=
 github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
 github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
diff --git a/examples/simple-extension-server/go.mod b/examples/simple-extension-server/go.mod
index cc3db79cc..716a1c188 100644
--- a/examples/simple-extension-server/go.mod
+++ b/examples/simple-extension-server/go.mod
@@ -3,7 +3,7 @@ module github.com/envoyproxy/gateway-simple-extension-server
 go 1.24.4
 
 require (
-	github.com/envoyproxy/gateway v1.4.1
+	github.com/envoyproxy/gateway v1.4.2
 	github.com/urfave/cli/v2 v2.27.7
 	google.golang.org/grpc v1.73.0
 )
@@ -17,9 +17,9 @@ require (
 	github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
 	github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
-	golang.org/x/net v0.41.0 // indirect
-	golang.org/x/sys v0.33.0 // indirect
-	golang.org/x/text v0.26.0 // indirect
+	golang.org/x/net v0.42.0 // indirect
+	golang.org/x/sys v0.34.0 // indirect
+	golang.org/x/text v0.27.0 // indirect
 	google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 // indirect
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 // indirect
 	google.golang.org/protobuf v1.36.6 // indirect
diff --git a/examples/simple-extension-server/go.sum b/examples/simple-extension-server/go.sum
index 46c070c91..1ef6d8c11 100644
--- a/examples/simple-extension-server/go.sum
+++ b/examples/simple-extension-server/go.sum
@@ -4,8 +4,8 @@ github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f h1:C5bqEmzEPLsHm9Mv73l
 github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
 github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
-github.com/envoyproxy/gateway v1.4.1 h1:taIKWv2Euso4gFQQA8BgFuu2JordhOjLm9bjTyKv6xA=
-github.com/envoyproxy/gateway v1.4.1/go.mod h1:U8s2bB4VWRd7J9moxcFT95Wmq0d2YoiRFTu/PI/62Mw=
+github.com/envoyproxy/gateway v1.4.2 h1:h90mCQIsBLcoASCjHteiU7A0FTuIedS8JiRvEYpfHVE=
+github.com/envoyproxy/gateway v1.4.2/go.mod h1:KgJjhh7fC//LZAdKnXhFUQEko7jQ7NLL82JRZPbXc6s=
 github.com/envoyproxy/go-control-plane/envoy v1.32.5-0.20250408134212-157c26b62099 h1:LFmrrIXbGktG4DrXsvFFyvZLe+HnimGn6Ed+xuiP6TU=
 github.com/envoyproxy/go-control-plane/envoy v1.32.5-0.20250408134212-157c26b62099/go.mod h1:pY0vLp032ToSdejxKtzWZs/TzoAtdK0+50ELjTkXiYA=
 github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8=
@@ -40,12 +40,12 @@ go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5J
 go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
 go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
 go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
-golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
-golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
-golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
-golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
-golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
+golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
+golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
+golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
+golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
+golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
 google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 h1:hE3bRWtU6uceqlh4fhrSnUyjKHMKB9KrTLLG+bc0ddM=
 google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463/go.mod h1:U90ffi8eUL9MwPcrJylN5+Mk2v3vuPDptd5yyNUiRR8=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 h1:e0AIkUUhxyBKh6ssZNrAMeqhA7RKUj42346d1y02i2g=
diff --git a/go.mod b/go.mod
index fc5626eb6..922760859 100644
--- a/go.mod
+++ b/go.mod
@@ -10,10 +10,10 @@ require (
 	github.com/avast/retry-go v3.0.0+incompatible
 	github.com/cenkalti/backoff/v4 v4.3.0
 	github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f
-	github.com/containers/image/v5 v5.35.0
+	github.com/containers/image/v5 v5.36.0
 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
-	github.com/docker/cli v28.3.0+incompatible
-	github.com/docker/docker v28.2.2+incompatible
+	github.com/docker/cli v28.3.2+incompatible
+	github.com/docker/docker v28.3.2+incompatible
 	github.com/dominikbraun/graph v0.23.0
 	github.com/envoyproxy/go-control-plane v0.13.5-0.20250622153809-434b6986176d
 	github.com/envoyproxy/go-control-plane/contrib v1.32.5-0.20250430092421-68a532e11403
@@ -34,19 +34,19 @@ require (
 	github.com/google/cel-go v0.25.0
 	github.com/google/go-cmp v0.7.0
 	github.com/google/go-containerregistry v0.20.6
-	github.com/miekg/dns v1.1.66
+	github.com/miekg/dns v1.1.67
 	github.com/ohler55/ojg v1.26.8
 	github.com/pkg/errors v0.9.1
 	github.com/prometheus/client_golang v1.22.0
 	github.com/prometheus/client_model v0.6.2
 	github.com/prometheus/common v0.65.0
-	github.com/replicatedhq/troubleshoot v0.119.1
+	github.com/replicatedhq/troubleshoot v0.120.3
 	github.com/shopspring/decimal v1.4.0
 	github.com/spf13/cobra v1.9.1
-	github.com/spf13/pflag v1.0.6
+	github.com/spf13/pflag v1.0.7
 	github.com/stretchr/testify v1.10.0
 	github.com/telepresenceio/watchable v0.0.0-20220726211108-9bb86f92afa7
-	github.com/tetratelabs/func-e v1.1.5-0.20250618051429-6a0f4e478076
+	github.com/tetratelabs/func-e v1.1.5
 	github.com/tsaarni/certyaml v0.10.0
 	github.com/yuin/gopher-lua v1.1.1
 	go.opentelemetry.io/otel v1.37.0
@@ -60,23 +60,23 @@ require (
 	go.opentelemetry.io/proto/otlp v1.7.0
 	go.uber.org/zap v1.27.0
 	golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476
-	golang.org/x/net v0.41.0
+	golang.org/x/net v0.42.0
 	gomodules.xyz/jsonpatch/v2 v2.5.0
 	google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822
 	google.golang.org/grpc v1.73.0
 	google.golang.org/grpc/security/advancedtls v1.0.0
 	google.golang.org/protobuf v1.36.6
 	gopkg.in/yaml.v3 v3.0.1
-	helm.sh/helm/v3 v3.18.3
-	k8s.io/api v0.33.1
-	k8s.io/apiextensions-apiserver v0.33.1
+	helm.sh/helm/v3 v3.18.4
+	k8s.io/api v0.33.2
+	k8s.io/apiextensions-apiserver v0.33.2
 	k8s.io/apimachinery v0.34.0-alpha.0
-	k8s.io/apiserver v0.33.1
-	k8s.io/cli-runtime v0.33.1
-	k8s.io/client-go v0.33.1
+	k8s.io/apiserver v0.33.2
+	k8s.io/cli-runtime v0.33.2
+	k8s.io/client-go v0.33.2
 	k8s.io/klog/v2 v2.130.1
 	k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff
-	k8s.io/kubectl v0.33.1
+	k8s.io/kubectl v0.33.2
 	k8s.io/utils v0.0.0-20241210054802-24370beab758
 	sigs.k8s.io/controller-runtime v0.21.0
 	sigs.k8s.io/gateway-api v1.3.1-0.20250527223622-54df0a899c1c
@@ -104,7 +104,7 @@ require (
 	cel.dev/expr v0.24.0 // indirect
 	connectrpc.com/connect v1.18.1 // indirect
 	connectrpc.com/otelconnect v0.7.2 // indirect
-	dario.cat/mergo v1.0.1 // indirect
+	dario.cat/mergo v1.0.2 // indirect
 	filippo.io/edwards25519 v1.1.0 // indirect
 	fortio.org/cli v1.10.0 // indirect
 	fortio.org/dflag v1.8.1 // indirect
@@ -130,7 +130,7 @@ require (
 	github.com/Masterminds/sprig/v3 v3.3.0 // indirect
 	github.com/Masterminds/squirrel v1.5.4 // indirect
 	github.com/Microsoft/go-winio v0.6.2 // indirect
-	github.com/Microsoft/hcsshim v0.12.9 // indirect
+	github.com/Microsoft/hcsshim v0.13.0 // indirect
 	github.com/NYTimes/gziphandler v1.1.1 // indirect
 	github.com/OpenPeeDeeP/depguard/v2 v2.2.1 // indirect
 	github.com/alecthomas/go-check-sumtype v0.3.1 // indirect
@@ -183,7 +183,7 @@ require (
 	github.com/containerd/typeurl/v2 v2.2.3 // indirect
 	github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 // indirect
 	github.com/containers/ocicrypt v1.2.1 // indirect
-	github.com/containers/storage v1.58.0 // indirect
+	github.com/containers/storage v1.59.0 // indirect
 	github.com/coreos/go-semver v0.3.1 // indirect
 	github.com/coreos/go-systemd/v22 v22.5.0 // indirect
 	github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
@@ -367,7 +367,6 @@ require (
 	github.com/opencontainers/image-spec v1.1.1 // indirect
 	github.com/opencontainers/runtime-spec v1.2.1 // indirect
 	github.com/opencontainers/selinux v1.12.0 // indirect
-	github.com/ostreedev/ostree-go v0.0.0-20210805093236-719684c64e4f // indirect
 	github.com/pelletier/go-toml v1.9.5 // indirect
 	github.com/pelletier/go-toml/v2 v2.2.3 // indirect
 	github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
@@ -394,7 +393,7 @@ require (
 	github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect
 	github.com/sagikazarmark/locafero v0.7.0 // indirect
 	github.com/sanposhiho/wastedassign/v2 v2.1.0 // indirect
-	github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 // indirect
+	github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect
 	github.com/sashamelentyev/interfacebloat v1.1.0 // indirect
 	github.com/sashamelentyev/usestdlibvars v1.28.0 // indirect
 	github.com/securego/gosec/v2 v2.22.2 // indirect
@@ -419,7 +418,7 @@ require (
 	github.com/stretchr/objx v0.5.2 // indirect
 	github.com/subosito/gotenv v1.6.0 // indirect
 	github.com/sylabs/sif/v2 v2.21.1 // indirect
-	github.com/tchap/go-patricia/v2 v2.3.2 // indirect
+	github.com/tchap/go-patricia/v2 v2.3.3 // indirect
 	github.com/tdakkota/asciicheck v0.4.1 // indirect
 	github.com/tetafro/godot v1.5.0 // indirect
 	github.com/tetratelabs/wazero v1.9.0 // indirect
@@ -473,16 +472,16 @@ require (
 	go.uber.org/automaxprocs v1.6.0 // indirect
 	go.uber.org/mock v0.5.2 // indirect
 	go.uber.org/multierr v1.11.0 // indirect
-	golang.org/x/crypto v0.39.0 // indirect
+	golang.org/x/crypto v0.40.0 // indirect
 	golang.org/x/crypto/x509roots/fallback v0.0.0-20250406160420-959f8f3db0fb // indirect
 	golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac // indirect
 	golang.org/x/mod v0.25.0 // indirect
 	golang.org/x/oauth2 v0.30.0 // indirect
-	golang.org/x/sync v0.15.0 // indirect
-	golang.org/x/sys v0.33.0 // indirect
-	golang.org/x/term v0.32.0 // indirect
-	golang.org/x/text v0.26.0 // indirect
-	golang.org/x/time v0.10.0 // indirect
+	golang.org/x/sync v0.16.0 // indirect
+	golang.org/x/sys v0.34.0 // indirect
+	golang.org/x/term v0.33.0 // indirect
+	golang.org/x/text v0.27.0 // indirect
+	golang.org/x/time v0.11.0 // indirect
 	golang.org/x/tools v0.34.0 // indirect
 	golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
@@ -492,8 +491,8 @@ require (
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	honnef.co/go/tools v0.6.1 // indirect
-	k8s.io/component-base v0.33.1 // indirect
-	k8s.io/metrics v0.33.1 // indirect
+	k8s.io/component-base v0.33.2 // indirect
+	k8s.io/metrics v0.33.2 // indirect
 	mvdan.cc/gofumpt v0.7.0 // indirect
 	mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4 // indirect
 	oras.land/oras-go/v2 v2.6.0 // indirect
diff --git a/go.sum b/go.sum
index 48e54642f..9e54f0493 100644
--- a/go.sum
+++ b/go.sum
@@ -37,8 +37,8 @@ connectrpc.com/connect v1.18.1 h1:PAg7CjSAGvscaf6YZKUefjoih5Z/qYkyaTrBW8xvYPw=
 connectrpc.com/connect v1.18.1/go.mod h1:0292hj1rnx8oFrStN7cB4jjVBeqs+Yx5yDIC2prWDO8=
 connectrpc.com/otelconnect v0.7.2 h1:WlnwFzaW64dN06JXU+hREPUGeEzpz3Acz2ACOmN8cMI=
 connectrpc.com/otelconnect v0.7.2/go.mod h1:JS7XUKfuJs2adhCnXhNHPHLz6oAaZniCJdSF00OZSew=
-dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
-dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8=
+dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA=
 filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
 filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
 fortio.org/assert v1.2.1 h1:48I39urpeDj65RP1KguF7akCjILNeu6vICiYMEysR7Q=
@@ -61,8 +61,6 @@ fortio.org/struct2env v0.4.2 h1:Xh7HlS9vf2ZdRvRfmoGIasNDO8t6z36M713utVODRCo=
 fortio.org/struct2env v0.4.2/go.mod h1:lENUe70UwA1zDUCX+8AsO663QCFqYaprk5lnPhjD410=
 fortio.org/version v1.0.4 h1:FWUMpJ+hVTNc4RhvvOJzb0xesrlRmG/a+D6bjbQ4+5U=
 fortio.org/version v1.0.4/go.mod h1:2JQp9Ax+tm6QKiGuzR5nJY63kFeANcgrZ0osoQFDVm0=
-github.com/14rcole/gopopulate v0.0.0-20180821133914-b175b219e774 h1:SCbEWT58NSt7d2mcFdvxC9uyrdcTfvBbPLThhkDmXzg=
-github.com/14rcole/gopopulate v0.0.0-20180821133914-b175b219e774/go.mod h1:6/0dYRLLXyJjbkIPeeGyoJ/eKOSI0eU6eTlCBYibgd0=
 github.com/4meepo/tagalign v1.4.2 h1:0hcLHPGMjDyM1gHG58cS73aQF8J4TdVR96TZViorO9E=
 github.com/4meepo/tagalign v1.4.2/go.mod h1:+p4aMyFM+ra7nb41CnFG6aSDXqRxU/w1VQqScKqDARI=
 github.com/Abirdcfly/dupword v0.1.3 h1:9Pa1NuAsZvpFPi9Pqkd93I7LIYRURj+A//dFd5tgBeE=
@@ -124,8 +122,8 @@ github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8
 github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10=
 github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
 github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
-github.com/Microsoft/hcsshim v0.12.9 h1:2zJy5KA+l0loz1HzEGqyNnjd3fyZA31ZBCGKacp6lLg=
-github.com/Microsoft/hcsshim v0.12.9/go.mod h1:fJ0gkFAna6ukt0bLdKB8djt4XIJhF/vEPuoIWYVvZ8Y=
+github.com/Microsoft/hcsshim v0.13.0 h1:/BcXOiS6Qi7N9XqUcv27vkIuVOkBEcWstd2pMlWSeaA=
+github.com/Microsoft/hcsshim v0.13.0/go.mod h1:9KWJ/8DgU+QzYGupX4tzMhRQE8h6w90lH6HAaclpEok=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
 github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
@@ -266,14 +264,14 @@ github.com/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRcc
 github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU=
 github.com/containerd/typeurl/v2 v2.2.3 h1:yNA/94zxWdvYACdYO8zofhrTVuQY73fFU1y++dYSw40=
 github.com/containerd/typeurl/v2 v2.2.3/go.mod h1:95ljDnPfD3bAbDJRugOiShd/DlAAsxGtUBhJxIn7SCk=
-github.com/containers/image/v5 v5.35.0 h1:T1OeyWp3GjObt47bchwD9cqiaAm/u4O4R9hIWdrdrP8=
-github.com/containers/image/v5 v5.35.0/go.mod h1:8vTsgb+1gKcBL7cnjyNOInhJQfTUQjJoO2WWkKDoebM=
+github.com/containers/image/v5 v5.36.0 h1:Zh+xFcLjRmicnOT5AFPHH/xj+e3s9ojDN/9X2Kx1+Jo=
+github.com/containers/image/v5 v5.36.0/go.mod h1:VZ6cyDHbxZoOt4dklUJ+WNEH9FrgSgfH3qUBYKFlcT0=
 github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 h1:Qzk5C6cYglewc+UyGf6lc8Mj2UaPTHy/iF2De0/77CA=
 github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01/go.mod h1:9rfv8iPl1ZP7aqh9YA68wnZv2NUDbXdcdPHVz0pFbPY=
 github.com/containers/ocicrypt v1.2.1 h1:0qIOTT9DoYwcKmxSt8QJt+VzMY18onl9jUXsxpVhSmM=
 github.com/containers/ocicrypt v1.2.1/go.mod h1:aD0AAqfMp0MtwqWgHM1bUwe1anx0VazI108CRrSKINQ=
-github.com/containers/storage v1.58.0 h1:Q7SyyCCjqgT3wYNgRNIL8o/wUS92heIj2/cc8Sewvcc=
-github.com/containers/storage v1.58.0/go.mod h1:w7Jl6oG+OpeLGLzlLyOZPkmUso40kjpzgrHUk5tyBlo=
+github.com/containers/storage v1.59.0 h1:r2pYSTzQpJTROZbjJQ54Z0GT+rUC6+wHzlSY8yPjsXk=
+github.com/containers/storage v1.59.0/go.mod h1:KoAYHnAjP3/cTsRS+mmWZGkufSY2GACiKQ4V3ZLQnR0=
 github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
@@ -325,13 +323,13 @@ github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5Qvfr
 github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
 github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
 github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
-github.com/docker/cli v28.3.0+incompatible h1:s+ttruVLhB5ayeuf2BciwDVxYdKi+RoUlxmwNHV3Vfo=
-github.com/docker/cli v28.3.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
+github.com/docker/cli v28.3.2+incompatible h1:mOt9fcLE7zaACbxW1GeS65RI67wIJrTnqS3hP2huFsY=
+github.com/docker/cli v28.3.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
 github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
 github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
 github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/docker v28.2.2+incompatible h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5JxwYeqtMOEe0LDw=
-github.com/docker/docker v28.2.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v28.3.2+incompatible h1:wn66NJ6pWB1vBZIilP8G3qQPqHy5XymfYn5vsqeA5oA=
+github.com/docker/docker v28.3.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8=
 github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo=
 github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
@@ -877,8 +875,8 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m
 github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
 github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
 github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
-github.com/mattn/go-sqlite3 v1.14.27 h1:drZCnuvf37yPfs95E5jd9s3XhdVWLal+6BOK6qrv6IU=
-github.com/mattn/go-sqlite3 v1.14.27/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
+github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A=
+github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g=
 github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw=
@@ -888,8 +886,8 @@ github.com/mgechev/revive v1.7.0 h1:JyeQ4yO5K8aZhIKf5rec56u0376h8AlKNQEmjfkjKlY=
 github.com/mgechev/revive v1.7.0/go.mod h1:qZnwcNhoguE58dfi96IJeSTPeZQejNeoMQLUZGi4SW4=
 github.com/microsoft/go-mssqldb v1.8.0 h1:7cyZ/AT7ycDsEoWPIXibd+aVKFtteUNhDGf3aobP+tw=
 github.com/microsoft/go-mssqldb v1.8.0/go.mod h1:6znkekS3T2vp0waiMhen4GPU1BiAsrP+iXHcE7a7rFo=
-github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE=
-github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE=
+github.com/miekg/dns v1.1.67 h1:kg0EHj0G4bfT5/oOys6HhZw4vmMlnoZ+gDu8tJ/AlI0=
+github.com/miekg/dns v1.1.67/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
 github.com/mistifyio/go-zfs/v3 v3.0.1 h1:YaoXgBePoMA12+S1u/ddkv+QqxcfiZK4prI6HPnkFiU=
 github.com/mistifyio/go-zfs/v3 v3.0.1/go.mod h1:CzVgeB0RvF2EGzQnytKVvVSDwmKJXxkOTUGbNrTja/k=
 github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
@@ -993,8 +991,6 @@ github.com/opencontainers/runtime-spec v1.2.1 h1:S4k4ryNgEpxW1dzyqffOmhI1BHYcjzU
 github.com/opencontainers/runtime-spec v1.2.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
 github.com/opencontainers/selinux v1.12.0 h1:6n5JV4Cf+4y0KNXW48TLj5DwfXpvWlxXplUkdTrmPb8=
 github.com/opencontainers/selinux v1.12.0/go.mod h1:BTPX+bjVbWGXw7ZZWUbdENt8w0htPSrlgOOysQaU62U=
-github.com/ostreedev/ostree-go v0.0.0-20210805093236-719684c64e4f h1:/UDgs8FGMqwnHagNDPGOlts35QkhAZ8by3DR7nMih7M=
-github.com/ostreedev/ostree-go v0.0.0-20210805093236-719684c64e4f/go.mod h1:J6OG6YJVEWopen4avK3VNQSnALmmjvniMmni/YFYAwc=
 github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw=
 github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU=
 github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w=
@@ -1078,8 +1074,8 @@ github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 h1:EfpWLLCyXw8PSM2/XNJLjI3Pb
 github.com/redis/go-redis/extra/redisotel/v9 v9.0.5/go.mod h1:WZjPDy7VNzn77AAfnAfVjZNvfJTYfPetfZk5yoSTLaQ=
 github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM=
 github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA=
-github.com/replicatedhq/troubleshoot v0.119.1 h1:AroLbVdtkPMv32va4z2lNdOcShFbT357oPZeECP2aOA=
-github.com/replicatedhq/troubleshoot v0.119.1/go.mod h1:50okSHbWEqlbNQY1kCilXKphjGPBQ6JewezFOu47l8c=
+github.com/replicatedhq/troubleshoot v0.120.3 h1:uM3hAnasUC5maNzbxVsE5PGHD53h0/8EbFIpEBEbkho=
+github.com/replicatedhq/troubleshoot v0.120.3/go.mod h1:K4jkTOFp/HETIKUA9TgHydQbNZvZrb4brtmL33DncnY=
 github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
 github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
@@ -1102,8 +1098,8 @@ github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsF
 github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k=
 github.com/sanposhiho/wastedassign/v2 v2.1.0 h1:crurBF7fJKIORrV85u9UUpePDYGWnwvv3+A96WvwXT0=
 github.com/sanposhiho/wastedassign/v2 v2.1.0/go.mod h1:+oSmSC+9bQ+VUAxA66nBb0Z7N8CK7mscKTDYC6aIek4=
-github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 h1:PKK9DyHxif4LZo+uQSgXNqs0jj5+xZwwfKHgph2lxBw=
-github.com/santhosh-tekuri/jsonschema/v6 v6.0.1/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU=
+github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ=
+github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU=
 github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw=
 github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ=
 github.com/sashamelentyev/usestdlibvars v1.28.0 h1:jZnudE2zKCtYlGzLVreNp5pmCdOxXUzwsMDBkR21cyQ=
@@ -1168,8 +1164,9 @@ github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzu
 github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
 github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
+github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
 github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
 github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4=
@@ -1205,8 +1202,8 @@ github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8
 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
 github.com/sylabs/sif/v2 v2.21.1 h1:GZ0b5//AFAqJEChd8wHV/uSKx/l1iuGYwjR8nx+4wPI=
 github.com/sylabs/sif/v2 v2.21.1/go.mod h1:YoqEGQnb5x/ItV653bawXHZJOXQaEWpGwHsSD3YePJI=
-github.com/tchap/go-patricia/v2 v2.3.2 h1:xTHFutuitO2zqKAQ5rCROYgUb7Or/+IC3fts9/Yc7nM=
-github.com/tchap/go-patricia/v2 v2.3.2/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k=
+github.com/tchap/go-patricia/v2 v2.3.3 h1:xfNEsODumaEcCcY3gI0hYPZ/PcpVv5ju6RMAhgwZDDc=
+github.com/tchap/go-patricia/v2 v2.3.3/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k=
 github.com/tdakkota/asciicheck v0.4.1 h1:bm0tbcmi0jezRA2b5kg4ozmMuGAFotKI3RZfrhfovg8=
 github.com/tdakkota/asciicheck v0.4.1/go.mod h1:0k7M3rCfRXb0Z6bwgvkEIMleKH3kXNz9UqJ9Xuqopr8=
 github.com/telepresenceio/telepresence/rpc/v2 v2.6.8 h1:q5V85LBT9bA/c4YPa/kMvJGyKZDgBPJTftlAMqJx7j4=
@@ -1219,8 +1216,8 @@ github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpR
 github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY=
 github.com/tetafro/godot v1.5.0 h1:aNwfVI4I3+gdxjMgYPus9eHmoBeJIbnajOyqZYStzuw=
 github.com/tetafro/godot v1.5.0/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio=
-github.com/tetratelabs/func-e v1.1.5-0.20250618051429-6a0f4e478076 h1:WhWdSJ8QinLKWKgr3aE4veeR+Mg0Qu+3LfD9oTyA9CM=
-github.com/tetratelabs/func-e v1.1.5-0.20250618051429-6a0f4e478076/go.mod h1:FDAoUIMZc6Jkc0oEsbd2aTWRQhWDVrKhKy+yAdMfZbg=
+github.com/tetratelabs/func-e v1.1.5 h1:hE9Y3NsOCxSdJMXwtJriQC2+UP0X0ccxwePy6/Hgwd4=
+github.com/tetratelabs/func-e v1.1.5/go.mod h1:FDAoUIMZc6Jkc0oEsbd2aTWRQhWDVrKhKy+yAdMfZbg=
 github.com/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I=
 github.com/tetratelabs/wazero v1.9.0/go.mod h1:TSbcXCfFP0L2FGkRPxHphadXPjo1T6W+CseNNY7EkjM=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
@@ -1319,8 +1316,8 @@ go-simpler.org/sloglint v0.9.0 h1:/40NQtjRx9txvsB/RN022KsUJU+zaaSb/9q9BSefSrE=
 go-simpler.org/sloglint v0.9.0/go.mod h1:G/OrAF6uxj48sHahCzrbarVMptL2kjWTaUeC8+fOGww=
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.etcd.io/bbolt v1.4.0 h1:TU77id3TnN/zKr7CO/uk+fBCwF2jGcMuw2B/FMAzYIk=
-go.etcd.io/bbolt v1.4.0/go.mod h1:AsD+OCi/qPN1giOX1aiLAha3o1U8rAz65bvN4j0sRuk=
+go.etcd.io/bbolt v1.4.2 h1:IrUHp260R8c+zYx/Tm8QZr04CX+qWS5PGfPdevhdm1I=
+go.etcd.io/bbolt v1.4.2/go.mod h1:Is8rSHO/b4f3XigBC0lL0+4FwAQv3HXEEIgFMuKHceM=
 go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0=
 go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
 go.etcd.io/etcd/api/v3 v3.5.21 h1:A6O2/JDb3tvHhiIz3xf9nJ7REHvtEFJJ3veW3FbCnS8=
@@ -1377,8 +1374,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 h1:dNzwXjZKpMpE2JhmO+9
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0/go.mod h1:90PoxvaEB5n6AOdZvi+yWJQoE95U8Dhhw2bSyRqnTD0=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0 h1:5pojmb1U1AogINhN3SurB+zm/nIcusopeBNp42f45QM=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0/go.mod h1:57gTHJSE5S1tqg+EKsLPlTWhpHMsWlVmer+LA926XiA=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 h1:xJ2qHD0C1BeYVTLLR9sX12+Qb95kfeD/byKj6Ky1pXg=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0/go.mod h1:u5BF1xyjstDowA1R5QAO9JHzqK+ublenEW/dyqTjBVk=
 go.opentelemetry.io/otel/exporters/prometheus v0.59.0 h1:HHf+wKS6o5++XZhS98wvILrLVgHxjA/AMjqHKes+uzo=
 go.opentelemetry.io/otel/exporters/prometheus v0.59.0/go.mod h1:R8GpRXTZrqvXHDEGVH5bF6+JqAZcK8PjJcZ5nGhEWiE=
 go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0 h1:CHXNXwfKWfzS65yrlB2PVds1IBZcdsX8Vepy9of0iRU=
@@ -1428,8 +1425,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
 golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
-golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
-golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
+golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
+golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
 golang.org/x/crypto/x509roots/fallback v0.0.0-20250406160420-959f8f3db0fb h1:Iu0p/klM0SM7atONioa/bPhLS7cjhnip99x1OIGibwg=
 golang.org/x/crypto/x509roots/fallback v0.0.0-20250406160420-959f8f3db0fb/go.mod h1:lxN5T34bK4Z/i6cMaU7frUU57VkDXFD4Kamfl/cp9oU=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -1490,8 +1487,8 @@ golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
 golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
 golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
 golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
-golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
-golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
+golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
+golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1510,8 +1507,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
 golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
-golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
+golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
+golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1561,8 +1558,8 @@ golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
-golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
+golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
@@ -1571,8 +1568,8 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
 golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
 golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
 golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
-golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
-golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
+golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg=
+golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0=
 golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1585,13 +1582,13 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
-golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
+golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
+golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
 golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4=
-golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=
+golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -1715,8 +1712,8 @@ gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
 gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
 gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
 gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
-helm.sh/helm/v3 v3.18.3 h1:+cvyGKgs7Jt7BN3Klmb4SsG4IkVpA7GAZVGvMz6VO4I=
-helm.sh/helm/v3 v3.18.3/go.mod h1:wUc4n3txYBocM7S9RjTeZBN9T/b5MjffpcSsWEjSIpw=
+helm.sh/helm/v3 v3.18.4 h1:pNhnHM3nAmDrxz6/UC+hfjDY4yeDATQCka2/87hkZXQ=
+helm.sh/helm/v3 v3.18.4/go.mod h1:WVnwKARAw01iEdjpEkP7Ii1tT1pTPYfM1HsakFKM3LI=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1724,32 +1721,32 @@ honnef.co/go/tools v0.6.1 h1:R094WgE8K4JirYjBaOpz/AvTyUu/3wbmAoskKN/pxTI=
 honnef.co/go/tools v0.6.1/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4=
 k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78=
 k8s.io/api v0.18.4/go.mod h1:lOIQAKYgai1+vz9J7YcDZwC26Z0zQewYOGWdyIPUUQ4=
-k8s.io/api v0.33.1 h1:tA6Cf3bHnLIrUK4IqEgb2v++/GYUtqiu9sRVk3iBXyw=
-k8s.io/api v0.33.1/go.mod h1:87esjTn9DRSRTD4fWMXamiXxJhpOIREjWOSjsW1kEHw=
+k8s.io/api v0.33.2 h1:YgwIS5jKfA+BZg//OQhkJNIfie/kmRsO0BmNaVSimvY=
+k8s.io/api v0.33.2/go.mod h1:fhrbphQJSM2cXzCWgqU29xLDuks4mu7ti9vveEnpSXs=
 k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY=
 k8s.io/apiextensions-apiserver v0.18.4/go.mod h1:NYeyeYq4SIpFlPxSAB6jHPIdvu3hL0pc36wuRChybio=
-k8s.io/apiextensions-apiserver v0.33.1 h1:N7ccbSlRN6I2QBcXevB73PixX2dQNIW0ZRuguEE91zI=
-k8s.io/apiextensions-apiserver v0.33.1/go.mod h1:uNQ52z1A1Gu75QSa+pFK5bcXc4hq7lpOXbweZgi4dqA=
+k8s.io/apiextensions-apiserver v0.33.2 h1:6gnkIbngnaUflR3XwE1mCefN3YS8yTD631JXQhsU6M8=
+k8s.io/apiextensions-apiserver v0.33.2/go.mod h1:IvVanieYsEHJImTKXGP6XCOjTwv2LUMos0YWc9O+QP8=
 k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA=
 k8s.io/apimachinery v0.18.4/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko=
 k8s.io/apimachinery v0.34.0-alpha.0 h1:arymqm+uCpPEAVWBCvNF+yq01AJzsoUeUd2DYpoHuzc=
 k8s.io/apimachinery v0.34.0-alpha.0/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM=
 k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw=
 k8s.io/apiserver v0.18.4/go.mod h1:q+zoFct5ABNnYkGIaGQ3bcbUNdmPyOCoEBcg51LChY8=
-k8s.io/apiserver v0.33.1 h1:yLgLUPDVC6tHbNcw5uE9mo1T6ELhJj7B0geifra3Qdo=
-k8s.io/apiserver v0.33.1/go.mod h1:VMbE4ArWYLO01omz+k8hFjAdYfc3GVAYPrhP2tTKccs=
-k8s.io/cli-runtime v0.33.1 h1:TvpjEtF71ViFmPeYMj1baZMJR4iWUEplklsUQ7D3quA=
-k8s.io/cli-runtime v0.33.1/go.mod h1:9dz5Q4Uh8io4OWCLiEf/217DXwqNgiTS/IOuza99VZE=
+k8s.io/apiserver v0.33.2 h1:KGTRbxn2wJagJowo29kKBp4TchpO1DRO3g+dB/KOJN4=
+k8s.io/apiserver v0.33.2/go.mod h1:9qday04wEAMLPWWo9AwqCZSiIn3OYSZacDyu/AcoM/M=
+k8s.io/cli-runtime v0.33.2 h1:koNYQKSDdq5AExa/RDudXMhhtFasEg48KLS2KSAU74Y=
+k8s.io/cli-runtime v0.33.2/go.mod h1:gnhsAWpovqf1Zj5YRRBBU7PFsRc6NkEkwYNQE+mXL88=
 k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU=
 k8s.io/client-go v0.18.4/go.mod h1:f5sXwL4yAZRkAtzOxRWUhA/N8XzGCb+nPZI8PfobZ9g=
-k8s.io/client-go v0.33.1 h1:ZZV/Ks2g92cyxWkRRnfUDsnhNn28eFpt26aGc8KbXF4=
-k8s.io/client-go v0.33.1/go.mod h1:JAsUrl1ArO7uRVFWfcj6kOomSlCv+JpvIsp6usAGefA=
+k8s.io/client-go v0.33.2 h1:z8CIcc0P581x/J1ZYf4CNzRKxRvQAwoAolYPbtQes+E=
+k8s.io/client-go v0.33.2/go.mod h1:9mCgT4wROvL948w6f6ArJNb7yQd7QsvqavDeZHvNmHo=
 k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
 k8s.io/code-generator v0.18.4/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c=
 k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM=
 k8s.io/component-base v0.18.4/go.mod h1:7jr/Ef5PGmKwQhyAz/pjByxJbC58mhKAhiaDu0vXfPk=
-k8s.io/component-base v0.33.1 h1:EoJ0xA+wr77T+G8p6T3l4efT2oNwbqBVKR71E0tBIaI=
-k8s.io/component-base v0.33.1/go.mod h1:guT/w/6piyPfTgq7gfvgetyXMIh10zuXA6cRRm3rDuY=
+k8s.io/component-base v0.33.2 h1:sCCsn9s/dG3ZrQTX/Us0/Sx2R0G5kwa0wbZFYoVp/+0=
+k8s.io/component-base v0.33.2/go.mod h1:/41uw9wKzuelhN+u+/C59ixxf4tYQKW7p32ddkYNe2k=
 k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
@@ -1758,16 +1755,16 @@ k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
 k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
 k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
 k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kms v0.33.1 h1:jJKrFhsbVofpyLF+G8k+drwOAF9CMQpxilHa5Uilb8Q=
-k8s.io/kms v0.33.1/go.mod h1:C1I8mjFFBNzfUZXYt9FZVJ8MJl7ynFbGgZFbBzkBJ3E=
+k8s.io/kms v0.33.2 h1:GFwNXX4CZGQCg9DPOaJi1/+iKidCtB9/OIAGdzRo8FI=
+k8s.io/kms v0.33.2/go.mod h1:C1I8mjFFBNzfUZXYt9FZVJ8MJl7ynFbGgZFbBzkBJ3E=
 k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
 k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
 k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4=
 k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
-k8s.io/kubectl v0.33.1 h1:OJUXa6FV5bap6iRy345ezEjU9dTLxqv1zFTVqmeHb6A=
-k8s.io/kubectl v0.33.1/go.mod h1:Z07pGqXoP4NgITlPRrnmiM3qnoo1QrK1zjw85Aiz8J0=
-k8s.io/metrics v0.33.1 h1:Ypd5ITCf+fM+LDNFk7hESXTc3vh02CQYGiwRoVRaGsM=
-k8s.io/metrics v0.33.1/go.mod h1:wK8cFTK5ykBdhL0Wy4RZwLH28XM7j/Klc+NQrMRWVxg=
+k8s.io/kubectl v0.33.2 h1:7XKZ6DYCklu5MZQzJe+CkCjoGZwD1wWl7t/FxzhMz7Y=
+k8s.io/kubectl v0.33.2/go.mod h1:8rC67FB8tVTYraovAGNi/idWIK90z2CHFNMmGJZJ3KI=
+k8s.io/metrics v0.33.2 h1:gNCBmtnUMDMCRg9Ly5ehxP3OdKISMsOnh1vzk01iCgE=
+k8s.io/metrics v0.33.2/go.mod h1:yxoAosKGRsZisv3BGekC5W6T1J8XSV+PoUEevACRv7c=
 k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
 k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0=
diff --git a/internal/admin/server.go b/internal/admin/server.go
index f71619a22..3bb301acc 100644
--- a/internal/admin/server.go
+++ b/internal/admin/server.go
@@ -6,6 +6,7 @@
 package admin
 
 import (
+	"context"
 	"net/http"
 	"net/http/pprof"
 	"time"
@@ -15,22 +16,46 @@ import (
 	"github.com/envoyproxy/gateway/internal/envoygateway/config"
 )
 
-func Init(cfg *config.Server) error {
-	if cfg.EnvoyGateway.GetEnvoyGatewayAdmin().EnableDumpConfig {
+type Runner struct {
+	cfg    *config.Server
+	server *http.Server
+}
+
+func New(cfg *config.Server) *Runner {
+	return &Runner{
+		cfg: cfg,
+	}
+}
+
+func (r *Runner) Start(ctx context.Context) error {
+	if r.cfg.EnvoyGateway.GetEnvoyGatewayAdmin().EnableDumpConfig {
 		spewConfig := spew.NewDefaultConfig()
 		spewConfig.DisableMethods = true
-		spewConfig.Dump(cfg)
+		spewConfig.Dump(r.cfg)
 	}
 
-	return start(cfg)
+	return r.start()
+}
+
+func (r *Runner) Name() string {
+	return "admin"
+}
+
+func (r *Runner) Close() error {
+	if r.server != nil {
+		ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+		defer cancel()
+		return r.server.Shutdown(ctx)
+	}
+	return nil
 }
 
-func start(cfg *config.Server) error {
+func (r *Runner) start() error {
 	handlers := http.NewServeMux()
-	address := cfg.EnvoyGateway.GetEnvoyGatewayAdminAddress()
-	enablePprof := cfg.EnvoyGateway.GetEnvoyGatewayAdmin().EnablePprof
+	address := r.cfg.EnvoyGateway.GetEnvoyGatewayAdminAddress()
+	enablePprof := r.cfg.EnvoyGateway.GetEnvoyGatewayAdmin().EnablePprof
 
-	adminLogger := cfg.Logger.WithName("admin")
+	adminLogger := r.cfg.Logger.WithName("admin")
 	adminLogger.Info("starting admin server", "address", address, "enablePprof", enablePprof)
 
 	if enablePprof {
@@ -42,7 +67,7 @@ func start(cfg *config.Server) error {
 		handlers.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
 	}
 
-	adminServer := &http.Server{
+	r.server = &http.Server{
 		Handler:           handlers,
 		Addr:              address,
 		ReadTimeout:       5 * time.Second,
@@ -53,7 +78,7 @@ func start(cfg *config.Server) error {
 
 	// Listen And Serve Admin Server.
 	go func() {
-		if err := adminServer.ListenAndServe(); err != nil {
+		if err := r.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
 			adminLogger.Error(err, "start admin server failed")
 		}
 	}()
diff --git a/internal/cmd/server.go b/internal/cmd/server.go
index 7f6a37e2f..618b221ff 100644
--- a/internal/cmd/server.go
+++ b/internal/cmd/server.go
@@ -77,15 +77,6 @@ func server(ctx context.Context, logOut io.Writer) error {
 		return err
 	}
 
-	// Init eg admin servers.
-	if err := admin.Init(cfg); err != nil {
-		return err
-	}
-	// Init eg metrics servers.
-	if err := metrics.Init(cfg); err != nil {
-		return err
-	}
-
 	// Wait for the context to be done, which usually happens the process receives a SIGTERM or SIGINT.
 	<-ctx.Done()
 
@@ -221,6 +212,16 @@ func startRunners(ctx context.Context, cfg *config.Server) (err error) {
 				Xds:    channels.xds,
 			}),
 		},
+		{
+			// Start the Admin Server
+			// It provides admin endpoints including pprof for debugging.
+			runner: admin.New(cfg),
+		},
+		{
+			// Start the Metrics Server
+			// It provides metrics endpoints for monitoring.
+			runner: metrics.New(cfg),
+		},
 	}
 
 	// Start all runners
diff --git a/internal/extension/registry/extension_manager.go b/internal/extension/registry/extension_manager.go
index f0c8c059b..73ab0c05d 100644
--- a/internal/extension/registry/extension_manager.go
+++ b/internal/extension/registry/extension_manager.go
@@ -135,6 +135,16 @@ func (m *Manager) FailOpen() bool {
 	return m.extension.FailOpen
 }
 
+// GetTranslationHookConfig returns the translation hook configuration.
+func (m *Manager) GetTranslationHookConfig() *egv1a1.TranslationConfig {
+	if m.extension.Hooks == nil ||
+		m.extension.Hooks.XDSTranslator == nil ||
+		m.extension.Hooks.XDSTranslator.Translation == nil {
+		return nil
+	}
+	return m.extension.Hooks.XDSTranslator.Translation
+}
+
 // HasExtension checks to see whether a given Group and Kind has an
 // associated extension registered for it.
 func (m *Manager) HasExtension(g gwapiv1.Group, k gwapiv1.Kind) bool {
diff --git a/internal/extension/registry/xds_hook.go b/internal/extension/registry/xds_hook.go
index 77abcaa3a..27ffa5c3b 100644
--- a/internal/extension/registry/xds_hook.go
+++ b/internal/extension/registry/xds_hook.go
@@ -129,7 +129,7 @@ func (h *XDSHook) PostHTTPListenerModifyHook(l *listener.Listener, extensionReso
 	return resp.Listener, nil
 }
 
-func (h *XDSHook) PostTranslateModifyHook(clusters []*cluster.Cluster, secrets []*tls.Secret, extensionPolicies []*ir.UnstructuredRef) ([]*cluster.Cluster, []*tls.Secret, error) {
+func (h *XDSHook) PostTranslateModifyHook(clusters []*cluster.Cluster, secrets []*tls.Secret, listeners []*listener.Listener, routes []*route.RouteConfiguration, extensionPolicies []*ir.UnstructuredRef) ([]*cluster.Cluster, []*tls.Secret, []*listener.Listener, []*route.RouteConfiguration, error) {
 	// Make the request to the extension server
 	// Take all of the unstructured resources for the extension and package them into bytes
 	unstructuredPolicies := make([]*unstructured.Unstructured, len(extensionPolicies))
@@ -139,7 +139,7 @@ func (h *XDSHook) PostTranslateModifyHook(clusters []*cluster.Cluster, secrets [
 	// Convert the unstructured policies to bytes
 	extensionPoliciesBytes, err := translateUnstructuredToUnstructuredBytes(unstructuredPolicies)
 	if err != nil {
-		return nil, nil, err
+		return nil, nil, nil, nil, err
 	}
 
 	ctx := context.Background()
@@ -148,12 +148,14 @@ func (h *XDSHook) PostTranslateModifyHook(clusters []*cluster.Cluster, secrets [
 			PostTranslateContext: &extension.PostTranslateExtensionContext{
 				ExtensionResources: extensionPoliciesBytes,
 			},
-			Clusters: clusters,
-			Secrets:  secrets,
+			Clusters:  clusters,
+			Secrets:   secrets,
+			Listeners: listeners,
+			Routes:    routes,
 		})
 	if err != nil {
-		return nil, nil, err
+		return nil, nil, nil, nil, err
 	}
 
-	return resp.Clusters, resp.Secrets, nil
+	return resp.Clusters, resp.Secrets, resp.Listeners, resp.Routes, nil
 }
diff --git a/internal/extension/types/hooks.go b/internal/extension/types/hooks.go
index eb2903824..7c29597d0 100644
--- a/internal/extension/types/hooks.go
+++ b/internal/extension/types/hooks.go
@@ -47,11 +47,12 @@ type XDSHookClient interface {
 	// in order to not make any changes to it.
 	PostHTTPListenerModifyHook(listener *listener.Listener, extensionResources []*unstructured.Unstructured) (*listener.Listener, error)
 
-	// PostTranslateModifyHook allows an extension to modify the clusters and secrets in the xDS config.
-	// This allows for inserting clusters that may change along with extension specific configuration to be dynamically created rather than
-	// using custom bootstrap config which would be sufficient for clusters that are static and not prone to have their configurations changed.
-	// An example of how this may be used is to inject a cluster that will be used by an ext_authz http filter created by the extension.
-	// The list of clusters and secrets returned by the extension are used as the final list of all clusters and secrets
+	// PostTranslateModifyHook allows an extension to modify the clusters, secrets, listeners, and routes in the xDS config.
+	// This allows for inserting clusters, listeners, and routes that may change along with extension specific configuration to be dynamically created rather than
+	// using custom bootstrap config which would be sufficient for resources that are static and not prone to have their configurations changed.
+	// An example of how this may be used is to inject a cluster that will be used by an ext_authz http filter created by the extension,
+	// or to modify listeners to add custom filters, or to modify routes for advanced routing logic.
+	// The list of clusters, secrets, listeners, and routes returned by the extension are used as the final list of all these resources
 	// PostTranslateModifyHook is always executed when an extension is loaded
-	PostTranslateModifyHook([]*cluster.Cluster, []*tls.Secret, []*ir.UnstructuredRef) ([]*cluster.Cluster, []*tls.Secret, error)
+	PostTranslateModifyHook([]*cluster.Cluster, []*tls.Secret, []*listener.Listener, []*route.RouteConfiguration, []*ir.UnstructuredRef) ([]*cluster.Cluster, []*tls.Secret, []*listener.Listener, []*route.RouteConfiguration, error)
 }
diff --git a/internal/extension/types/manager.go b/internal/extension/types/manager.go
index 287a6bba7..d14e2e35a 100644
--- a/internal/extension/types/manager.go
+++ b/internal/extension/types/manager.go
@@ -35,4 +35,7 @@ type Manager interface {
 
 	// FailOpen returns true if the extension manager is configured to fail open, and false otherwise.
 	FailOpen() bool
+
+	// GetTranslationHookConfig returns the translation hook configuration.
+	GetTranslationHookConfig() *egv1a1.TranslationConfig
 }
diff --git a/internal/gatewayapi/backend.go b/internal/gatewayapi/backend.go
index 59a3cf5d0..22bc6d13d 100644
--- a/internal/gatewayapi/backend.go
+++ b/internal/gatewayapi/backend.go
@@ -76,27 +76,16 @@ func validateBackend(backend *egv1a1.Backend) status.Error {
 	}
 
 	for _, ep := range backend.Spec.Endpoints {
-		if ep.FQDN != nil {
-			hostname := ep.FQDN.Hostname
-			// must be a valid hostname
-			if errs := validation.IsDNS1123Subdomain(hostname); errs != nil {
-				return status.NewRouteStatusError(
-					fmt.Errorf("hostname %s is not a valid FQDN", hostname),
-					status.RouteReasonInvalidAddress,
-				)
-			}
-			if len(strings.Split(hostname, ".")) < 2 {
-				return status.NewRouteStatusError(
-					fmt.Errorf("hostname %s should be a domain with at least two segments separated by dots", hostname),
-					status.RouteReasonInvalidAddress,
-				)
+		if ep.Hostname != nil {
+			routeErr := validateHostname(*ep.Hostname, "hostname")
+			if routeErr != nil {
+				return routeErr
 			}
-			// IP addresses are not allowed so parsing the hostname as an address needs to fail
-			if _, err := netip.ParseAddr(hostname); err == nil {
-				return status.NewRouteStatusError(
-					fmt.Errorf("hostname %s is an IP address", hostname),
-					status.RouteReasonInvalidAddress,
-				)
+		}
+		if ep.FQDN != nil {
+			routeErr := validateHostname(ep.FQDN.Hostname, "FQDN")
+			if routeErr != nil {
+				return routeErr
 			}
 		} else if ep.IP != nil {
 			ip, err := netip.ParseAddr(ep.IP.Address)
@@ -115,3 +104,28 @@ func validateBackend(backend *egv1a1.Backend) status.Error {
 	}
 	return nil
 }
+
+func validateHostname(hostname, typeName string) *status.RouteStatusError {
+	// must be a valid hostname
+	if errs := validation.IsDNS1123Subdomain(hostname); errs != nil {
+		return status.NewRouteStatusError(
+			fmt.Errorf("hostname %s is not a valid %s", hostname, typeName),
+			status.RouteReasonInvalidAddress,
+		)
+	}
+	if len(strings.Split(hostname, ".")) < 2 {
+		return status.NewRouteStatusError(
+			fmt.Errorf("hostname %s should be a domain with at least two segments separated by dots", hostname),
+			status.RouteReasonInvalidAddress,
+		)
+	}
+	// IP addresses are not allowed, so parsing the hostname as an address needs to fail
+	if _, err := netip.ParseAddr(hostname); err == nil {
+		return status.NewRouteStatusError(
+			fmt.Errorf("hostname %s is an IP address", hostname),
+			status.RouteReasonInvalidAddress,
+		)
+	}
+
+	return nil
+}
diff --git a/internal/gatewayapi/backendtlspolicy.go b/internal/gatewayapi/backendtlspolicy.go
index 95cd795ed..b2dfed887 100644
--- a/internal/gatewayapi/backendtlspolicy.go
+++ b/internal/gatewayapi/backendtlspolicy.go
@@ -21,6 +21,17 @@ import (
 	"github.com/envoyproxy/gateway/internal/ir"
 )
 
+// ProcessBackendTLSPolicyStatus is called to post-process Backend TLS Policy status
+// after they were applied in all relevant translations.
+func (t *Translator) ProcessBackendTLSPolicyStatus(btlsp []*gwapiv1a3.BackendTLSPolicy) {
+	for _, policy := range btlsp {
+		// Truncate Ancestor list of longer than 16
+		if len(policy.Status.Ancestors) > 16 {
+			status.TruncatePolicyAncestors(&policy.Status, t.GatewayControllerName, policy.Generation)
+		}
+	}
+}
+
 func (t *Translator) applyBackendTLSSetting(
 	backendRef gwapiv1.BackendObjectReference,
 	backendNamespace string,
diff --git a/internal/gatewayapi/backendtrafficpolicy.go b/internal/gatewayapi/backendtrafficpolicy.go
index 9d7dd3361..fe11122a3 100644
--- a/internal/gatewayapi/backendtrafficpolicy.go
+++ b/internal/gatewayapi/backendtrafficpolicy.go
@@ -328,6 +328,12 @@ func (t *Translator) ProcessBackendTrafficPolicies(resources *resource.Resources
 		}
 	}
 
+	for _, policy := range res {
+		// Truncate Ancestor list of longer than 16
+		if len(policy.Status.Ancestors) > 16 {
+			status.TruncatePolicyAncestors(&policy.Status, t.GatewayControllerName, policy.Generation)
+		}
+	}
 	return res
 }
 
diff --git a/internal/gatewayapi/clienttrafficpolicy.go b/internal/gatewayapi/clienttrafficpolicy.go
index 46c41c026..a24c34d6a 100644
--- a/internal/gatewayapi/clienttrafficpolicy.go
+++ b/internal/gatewayapi/clienttrafficpolicy.go
@@ -282,6 +282,12 @@ func (t *Translator) ProcessClientTrafficPolicies(
 		}
 	}
 
+	for _, policy := range res {
+		// Truncate Ancestor list of longer than 16
+		if len(policy.Status.Ancestors) > 16 {
+			status.TruncatePolicyAncestors(&policy.Status, t.GatewayControllerName, policy.Generation)
+		}
+	}
 	return res
 }
 
@@ -603,6 +609,16 @@ func buildClientTimeout(clientTimeout *egv1a1.ClientTimeout) (*ir.ClientTimeout,
 				Duration: d,
 			}
 		}
+
+		if clientTimeout.HTTP.StreamIdleTimeout != nil {
+			d, err := time.ParseDuration(string(*clientTimeout.HTTP.StreamIdleTimeout))
+			if err != nil {
+				return nil, fmt.Errorf("invalid HTTP StreamIdleTimeout value %s", *clientTimeout.HTTP.StreamIdleTimeout)
+			}
+			irHTTPTimeout.StreamIdleTimeout = &metav1.Duration{
+				Duration: d,
+			}
+		}
 		irClientTimeout.HTTP = irHTTPTimeout
 	}
 
diff --git a/internal/gatewayapi/envoyextensionpolicy.go b/internal/gatewayapi/envoyextensionpolicy.go
index de83c0d69..8133be277 100644
--- a/internal/gatewayapi/envoyextensionpolicy.go
+++ b/internal/gatewayapi/envoyextensionpolicy.go
@@ -221,6 +221,12 @@ func (t *Translator) ProcessEnvoyExtensionPolicies(envoyExtensionPolicies []*egv
 		}
 	}
 
+	for _, policy := range res {
+		// Truncate Ancestor list of longer than 16
+		if len(policy.Status.Ancestors) > 16 {
+			status.TruncatePolicyAncestors(&policy.Status, t.GatewayControllerName, policy.Generation)
+		}
+	}
 	return res
 }
 
@@ -294,14 +300,16 @@ func (t *Translator) translateEnvoyExtensionPolicyForRoute(
 	resources *resource.Resources,
 ) error {
 	var (
-		wasms     []ir.Wasm
-		luas      []ir.Lua
-		err, errs error
+		wasms                             []ir.Wasm
+		luas                              []ir.Lua
+		wasmFailOpen, extProcFailOpen     bool
+		wasmError, luaError, extProcError error
+		errs                              error
 	)
 
-	if wasms, err = t.buildWasms(policy, resources); err != nil {
-		err = perr.WithMessage(err, "Wasm")
-		errs = errors.Join(errs, err)
+	if wasms, wasmError, wasmFailOpen = t.buildWasms(policy, resources); wasmError != nil {
+		wasmError = perr.WithMessage(wasmError, "Wasm")
+		errs = errors.Join(errs, wasmError)
 	}
 
 	// Apply IR to all relevant routes
@@ -314,26 +322,35 @@ func (t *Translator) translateEnvoyExtensionPolicyForRoute(
 			continue
 		}
 
-		if luas, err = t.buildLuas(policy, resources, gtwCtx.envoyProxy); err != nil {
-			err = perr.WithMessage(err, "Lua")
-			errs = errors.Join(errs, err)
+		if luas, luaError = t.buildLuas(policy, resources, gtwCtx.envoyProxy); luaError != nil {
+			luaError = perr.WithMessage(luaError, "Lua")
+			errs = errors.Join(errs, luaError)
 		}
 
 		var extProcs []ir.ExtProc
-		if extProcs, err = t.buildExtProcs(policy, resources, gtwCtx.envoyProxy); err != nil {
-			err = perr.WithMessage(err, "ExtProc")
-			errs = errors.Join(errs, err)
+		if extProcs, extProcError, extProcFailOpen = t.buildExtProcs(policy, resources, gtwCtx.envoyProxy); extProcError != nil {
+			extProcError = perr.WithMessage(extProcError, "ExtProc")
+			errs = errors.Join(errs, extProcError)
 		}
+
 		irKey := t.getIRKey(gtwCtx.Gateway)
 		for _, listener := range parentRefCtx.listeners {
 			irListener := xdsIR[irKey].GetHTTPListener(irListenerName(listener))
 			if irListener != nil {
 				for _, r := range irListener.Routes {
 					if strings.HasPrefix(r.Name, prefix) {
-						// return 500 and do not configure EnvoyExtensions in this case
-						if errs != nil {
-							r.DirectResponse = &ir.CustomResponse{
-								StatusCode: ptr.To(uint32(500)),
+						if wasmError != nil || luaError != nil || extProcError != nil {
+							switch {
+							case (extProcError != nil && extProcFailOpen) && (luaError == nil && wasmError == nil):
+								// skip the extProc application where the extProc is failing open and no other errors
+							case (wasmError != nil && wasmFailOpen) && (luaError == nil && extProcError == nil):
+								// skip the wasm application where the wasm is failing open and no other errors
+							case (extProcError != nil && extProcFailOpen) && (wasmError != nil && wasmFailOpen) && luaError == nil:
+								// skip the wasm and extProc application where both are failing open and no lua errors
+							default:
+								r.DirectResponse = &ir.CustomResponse{
+									StatusCode: ptr.To(uint32(500)),
+								}
 							}
 							continue
 						}
@@ -359,23 +376,25 @@ func (t *Translator) translateEnvoyExtensionPolicyForGateway(
 	resources *resource.Resources,
 ) error {
 	var (
-		extProcs  []ir.ExtProc
-		wasms     []ir.Wasm
-		luas      []ir.Lua
-		err, errs error
+		extProcs                          []ir.ExtProc
+		wasms                             []ir.Wasm
+		luas                              []ir.Lua
+		wasmFailOpen, extProcFailOpen     bool
+		wasmError, luaError, extProcError error
+		errs                              error
 	)
 
-	if extProcs, err = t.buildExtProcs(policy, resources, gateway.envoyProxy); err != nil {
-		err = perr.WithMessage(err, "ExtProc")
-		errs = errors.Join(errs, err)
+	if extProcs, extProcError, extProcFailOpen = t.buildExtProcs(policy, resources, gateway.envoyProxy); extProcError != nil {
+		extProcError = perr.WithMessage(extProcError, "ExtProc")
+		errs = errors.Join(errs, extProcError)
 	}
-	if wasms, err = t.buildWasms(policy, resources); err != nil {
-		err = perr.WithMessage(err, "Wasm")
-		errs = errors.Join(errs, err)
+	if wasms, wasmError, wasmFailOpen = t.buildWasms(policy, resources); wasmError != nil {
+		wasmError = perr.WithMessage(wasmError, "Wasm")
+		errs = errors.Join(errs, wasmError)
 	}
-	if luas, err = t.buildLuas(policy, resources, gateway.envoyProxy); err != nil {
-		err = perr.WithMessage(err, "Lua")
-		errs = errors.Join(errs, err)
+	if luas, luaError = t.buildLuas(policy, resources, gateway.envoyProxy); luaError != nil {
+		luaError = perr.WithMessage(luaError, "Lua")
+		errs = errors.Join(errs, luaError)
 	}
 
 	irKey := t.getIRKey(gateway.Gateway)
@@ -398,10 +417,18 @@ func (t *Translator) translateEnvoyExtensionPolicyForGateway(
 				continue
 			}
 
-			// return 500 and do not configure EnvoyExtensions in this case
 			if errs != nil {
-				r.DirectResponse = &ir.CustomResponse{
-					StatusCode: ptr.To(uint32(500)),
+				switch {
+				case (extProcError != nil && extProcFailOpen) && (luaError == nil && wasmError == nil):
+					// skip the extProc application where the extProc is failing open and no other errors
+				case (wasmError != nil && wasmFailOpen) && (luaError == nil && extProcError == nil):
+					// skip the wasm application where the wasm is failing open and no other errors
+				case (extProcError != nil && extProcFailOpen) && (wasmError != nil && wasmFailOpen) && luaError == nil:
+					// skip the wasm and extProc application where both are failing open and no lua errors
+				default:
+					r.DirectResponse = &ir.CustomResponse{
+						StatusCode: ptr.To(uint32(500)),
+					}
 				}
 				continue
 			}
@@ -443,6 +470,7 @@ func (t *Translator) buildLua(
 	envoyProxy *egv1a1.EnvoyProxy,
 ) (*ir.Lua, error) {
 	var luaCode *string
+	var luaValidation egv1a1.LuaValidation
 	var err error
 	if lua.Type == egv1a1.LuaValueTypeValueRef {
 		luaCode, err = getLuaBodyFromLocalObjectReference(lua.ValueRef, resources, policy.Namespace)
@@ -452,13 +480,12 @@ func (t *Translator) buildLua(
 	if err != nil {
 		return nil, err
 	}
-	if envoyProxy != nil && envoyProxy.Spec.DisableLuaValidation != nil && *envoyProxy.Spec.DisableLuaValidation {
-		return &ir.Lua{
-			Name: name,
-			Code: luaCode,
-		}, nil
+	if envoyProxy != nil && envoyProxy.Spec.LuaValidation != nil {
+		luaValidation = *envoyProxy.Spec.LuaValidation
+	} else {
+		luaValidation = egv1a1.LuaValidationStrict
 	}
-	if err = luavalidator.NewLuaValidator(*luaCode).Validate(); err != nil {
+	if err = luavalidator.NewLuaValidator(*luaCode, luaValidation).Validate(); err != nil {
 		return nil, fmt.Errorf("validation failed for lua body in policy with name %v: %w", name, err)
 	}
 	return &ir.Lua{
@@ -490,22 +517,36 @@ func getLuaBodyFromLocalObjectReference(valueRef *gwapiv1.LocalObjectReference,
 	}
 }
 
-func (t *Translator) buildExtProcs(policy *egv1a1.EnvoyExtensionPolicy, resources *resource.Resources, envoyProxy *egv1a1.EnvoyProxy) ([]ir.ExtProc, error) {
-	var extProcIRList []ir.ExtProc
+func (t *Translator) buildExtProcs(policy *egv1a1.EnvoyExtensionPolicy, resources *resource.Resources, envoyProxy *egv1a1.EnvoyProxy) ([]ir.ExtProc, error, bool) {
+	var (
+		extProcIRList []ir.ExtProc
+		failOpen      bool
+		errs          error
+	)
 
 	if policy == nil {
-		return nil, nil
+		return nil, nil, failOpen
 	}
 
+	hasFailClose := false
 	for idx, ep := range policy.Spec.ExtProc {
 		name := irConfigNameForExtProc(policy, idx)
 		extProcIR, err := t.buildExtProc(name, policy, ep, idx, resources, envoyProxy)
 		if err != nil {
-			return nil, err
+			errs = errors.Join(errs, err)
+			if ep.FailOpen == nil || !*ep.FailOpen {
+				hasFailClose = true
+			}
+			continue
 		}
 		extProcIRList = append(extProcIRList, *extProcIR)
 	}
-	return extProcIRList, nil
+
+	// If any failed ExtProcs are not fail open, the whole policy is not fail open.
+	if errs != nil && !hasFailClose {
+		failOpen = true
+	}
+	return extProcIRList, errs, failOpen
 }
 
 func (t *Translator) buildExtProc(
@@ -620,30 +661,45 @@ func irConfigNameForLua(policy *egv1a1.EnvoyExtensionPolicy, index int) string {
 func (t *Translator) buildWasms(
 	policy *egv1a1.EnvoyExtensionPolicy,
 	resources *resource.Resources,
-) ([]ir.Wasm, error) {
-	var wasmIRList []ir.Wasm
+) ([]ir.Wasm, error, bool) {
+	var (
+		wasmIRList []ir.Wasm
+		failOpen   bool
+		errs       error
+	)
 
 	if len(policy.Spec.Wasm) == 0 {
-		return wasmIRList, nil
+		return wasmIRList, nil, failOpen
 	}
 
 	if t.WasmCache == nil {
-		return nil, fmt.Errorf("wasm cache is not initialized")
+		return nil, fmt.Errorf("wasm cache is not initialized"), failOpen
 	}
 
 	if policy == nil {
-		return nil, nil
+		return nil, nil, failOpen
 	}
 
+	hasFailClose := false
 	for idx, wasm := range policy.Spec.Wasm {
 		name := irConfigNameForWasm(policy, idx)
 		wasmIR, err := t.buildWasm(name, wasm, policy, idx, resources)
 		if err != nil {
-			return nil, err
+			errs = errors.Join(errs, err)
+			if wasm.FailOpen == nil || !*wasm.FailOpen {
+				hasFailClose = true
+			}
+			continue
 		}
 		wasmIRList = append(wasmIRList, *wasmIR)
 	}
-	return wasmIRList, nil
+
+	// If any failed ExtProcs are not fail open, the whole policy is not fail open.
+	if errs != nil && !hasFailClose {
+		failOpen = true
+	}
+
+	return wasmIRList, errs, failOpen
 }
 
 func (t *Translator) buildWasm(
diff --git a/internal/gatewayapi/ext_service.go b/internal/gatewayapi/ext_service.go
index 32ee19c2e..20db56afd 100644
--- a/internal/gatewayapi/ext_service.go
+++ b/internal/gatewayapi/ext_service.go
@@ -104,6 +104,8 @@ func (t *Translator) processExtServiceDestination(
 	switch KindDerefOr(backendRef.Kind, resource.KindService) {
 	case resource.KindService:
 		ds = t.processServiceDestinationSetting(settingName, backendRef.BackendObjectReference, backendNamespace, protocol, resources, envoyProxy)
+	case resource.KindServiceImport:
+		ds = t.processServiceImportDestinationSetting(settingName, backendRef.BackendObjectReference, backendNamespace, protocol, resources, envoyProxy)
 	case egv1a1.KindBackend:
 		if !t.BackendEnabled {
 			return nil, fmt.Errorf("resource %s of type Backend cannot be used since Backend is disabled in Envoy Gateway configuration", string(backendRef.Name))
diff --git a/internal/gatewayapi/filters.go b/internal/gatewayapi/filters.go
index c2e52bb98..631de3247 100644
--- a/internal/gatewayapi/filters.go
+++ b/internal/gatewayapi/filters.go
@@ -212,20 +212,28 @@ func (t *Translator) processURLRewriteFilter(
 		return
 	}
 
-	newURLRewrite := &ir.URLRewrite{}
-
 	if rewrite.Hostname != nil {
 		if err := t.validateHostname(string(*rewrite.Hostname)); err != nil {
 			updateRouteStatusForFilter(filterContext, err.Error())
 			return
 		}
 		redirectHost := string(*rewrite.Hostname)
-		newURLRewrite.Host = &ir.HTTPHostModifier{
-			Name: &redirectHost,
+		if filterContext.URLRewrite == nil {
+			filterContext.URLRewrite = &ir.URLRewrite{
+				Host: &ir.HTTPHostModifier{
+					Name: &redirectHost,
+				},
+			}
+		} else if filterContext.URLRewrite.Host == nil {
+			filterContext.URLRewrite.Host = &ir.HTTPHostModifier{
+				Name: &redirectHost,
+			}
 		}
 	}
 
 	if rewrite.Path != nil {
+		var pathModifier *ir.ExtendedHTTPPathModifier
+
 		switch rewrite.Path.Type {
 		case gwapiv1.FullPathHTTPPathModifier:
 			if rewrite.Path.ReplacePrefixMatch != nil {
@@ -241,7 +249,7 @@ func (t *Translator) processURLRewriteFilter(
 				return
 			}
 			if rewrite.Path.ReplaceFullPath != nil {
-				newURLRewrite.Path = &ir.ExtendedHTTPPathModifier{
+				pathModifier = &ir.ExtendedHTTPPathModifier{
 					HTTPPathModifier: ir.HTTPPathModifier{
 						FullReplace: rewrite.Path.ReplaceFullPath,
 					},
@@ -261,7 +269,7 @@ func (t *Translator) processURLRewriteFilter(
 				return
 			}
 			if rewrite.Path.ReplacePrefixMatch != nil {
-				newURLRewrite.Path = &ir.ExtendedHTTPPathModifier{
+				pathModifier = &ir.ExtendedHTTPPathModifier{
 					HTTPPathModifier: ir.HTTPPathModifier{
 						PrefixMatchReplace: rewrite.Path.ReplacePrefixMatch,
 					},
@@ -275,9 +283,14 @@ func (t *Translator) processURLRewriteFilter(
 					rewrite.Path.Type))
 			return
 		}
+		if filterContext.URLRewrite == nil {
+			filterContext.URLRewrite = &ir.URLRewrite{
+				Path: pathModifier,
+			}
+		} else if filterContext.URLRewrite.Path == nil {
+			filterContext.URLRewrite.Path = pathModifier
+		}
 	}
-
-	filterContext.URLRewrite = newURLRewrite
 }
 
 func (t *Translator) processRedirectFilter(
diff --git a/internal/gatewayapi/listener.go b/internal/gatewayapi/listener.go
index 3ede5ae98..6b087d7e8 100644
--- a/internal/gatewayapi/listener.go
+++ b/internal/gatewayapi/listener.go
@@ -619,6 +619,10 @@ func (t *Translator) processAccessLog(envoyproxy *egv1a1.EnvoyProxy, resources *
 				if err != nil {
 					return nil, err
 				}
+				// ALS should always use GRPC protocol. Setting this adds http2 by default to the cluster.
+				for _, setting := range ds {
+					setting.Protocol = ir.GRPC
+				}
 
 				al := &ir.ALSAccessLog{
 					LogName: logName,
@@ -848,7 +852,7 @@ func destinationSettingFromHostAndPort(name, host string, port uint32) []*ir.Des
 			Weight:      ptr.To[uint32](1),
 			Protocol:    ir.GRPC,
 			AddressType: ptr.To(addressType),
-			Endpoints:   []*ir.DestinationEndpoint{ir.NewDestEndpoint(host, port, false, nil)},
+			Endpoints:   []*ir.DestinationEndpoint{ir.NewDestEndpoint(nil, host, port, false, nil)},
 		},
 	}
 }
diff --git a/internal/gatewayapi/luavalidator/lua_validator.go b/internal/gatewayapi/luavalidator/lua_validator.go
index b2977de99..d3628f51b 100644
--- a/internal/gatewayapi/luavalidator/lua_validator.go
+++ b/internal/gatewayapi/luavalidator/lua_validator.go
@@ -11,6 +11,13 @@ import (
 	"strings"
 
 	lua "github.com/yuin/gopher-lua"
+
+	egv1a1 "github.com/envoyproxy/gateway/api/v1alpha1"
+)
+
+const (
+	envoyOnRequestFunctionName  = "envoy_on_request"
+	envoyOnResponseFunctionName = "envoy_on_response"
 )
 
 // mockData contains mocks of Envoy supported APIs for Lua filters.
@@ -20,35 +27,50 @@ import (
 var mockData []byte
 
 // LuaValidator validates user provided Lua for compatibility with Envoy supported Lua HTTP filter
+// Validation strictness is controlled by the validation field
 type LuaValidator struct {
-	code string
+	code       string
+	validation egv1a1.LuaValidation
 }
 
 // NewLuaValidator returns a LuaValidator for user provided Lua code
-func NewLuaValidator(code string) *LuaValidator {
+func NewLuaValidator(code string, validation egv1a1.LuaValidation) *LuaValidator {
 	return &LuaValidator{
-		code: code,
+		code:       code,
+		validation: validation,
 	}
 }
 
 // Validate runs all validations for the LuaValidator
 func (l *LuaValidator) Validate() error {
-	if !strings.Contains(l.code, "envoy_on_request") && !strings.Contains(l.code, "envoy_on_response") {
-		return fmt.Errorf("expected one of envoy_on_request() or envoy_on_response() to be defined")
+	if !strings.Contains(l.code, envoyOnRequestFunctionName) && !strings.Contains(l.code, envoyOnResponseFunctionName) {
+		return fmt.Errorf("expected one of %s() or %s() to be defined", envoyOnRequestFunctionName, envoyOnResponseFunctionName)
 	}
-	if strings.Contains(l.code, "envoy_on_request") {
-		if err := l.runLua(string(mockData) + "\n" + l.code + "\nenvoy_on_request(StreamHandle)"); err != nil {
-			return fmt.Errorf("failed to mock run envoy_on_request: %w", err)
+	if strings.Contains(l.code, envoyOnRequestFunctionName) {
+		if err := l.validate(string(mockData) + "\n" + l.code + "\n" + envoyOnRequestFunctionName + "(StreamHandle)"); err != nil {
+			return fmt.Errorf("failed to validate with %s: %w", envoyOnRequestFunctionName, err)
 		}
 	}
-	if strings.Contains(l.code, "envoy_on_response") {
-		if err := l.runLua(string(mockData) + "\n" + l.code + "\nenvoy_on_response(StreamHandle)"); err != nil {
-			return fmt.Errorf("failed to mock run envoy_on_response: %w", err)
+	if strings.Contains(l.code, envoyOnResponseFunctionName) {
+		if err := l.validate(string(mockData) + "\n" + l.code + "\n" + envoyOnResponseFunctionName + "(StreamHandle)"); err != nil {
+			return fmt.Errorf("failed to validate with %s: %w", envoyOnResponseFunctionName, err)
 		}
 	}
 	return nil
 }
 
+// validate runs the validation on given code
+func (l *LuaValidator) validate(code string) error {
+	switch l.validation {
+	case egv1a1.LuaValidationSyntax:
+		return l.loadLua(code)
+	case egv1a1.LuaValidationDisabled:
+		return nil
+	default:
+		return l.runLua(code)
+	}
+}
+
 // runLua interprets and runs the provided Lua code in runtime using gopher-lua
 // Refer: https://github.com/yuin/gopher-lua?tab=readme-ov-file#differences-between-lua-and-gopherlua
 func (l *LuaValidator) runLua(code string) error {
@@ -59,3 +81,14 @@ func (l *LuaValidator) runLua(code string) error {
 	}
 	return nil
 }
+
+// loadLua loads the Lua code into the Lua state, does not run it
+// This is used to check for syntax errors in the Lua code
+func (l *LuaValidator) loadLua(code string) error {
+	L := lua.NewState()
+	defer L.Close()
+	if _, err := L.LoadString(code); err != nil {
+		return err
+	}
+	return nil
+}
diff --git a/internal/gatewayapi/luavalidator/mocks.lua b/internal/gatewayapi/luavalidator/mocks.lua
index 4cb136322..96d9f004b 100644
--- a/internal/gatewayapi/luavalidator/mocks.lua
+++ b/internal/gatewayapi/luavalidator/mocks.lua
@@ -544,18 +544,16 @@ function StreamHandle:headers()
 end
 
 function StreamHandle:body(always_wrap_body)
-  return "body"
+  return Buffer
 end
 
 function StreamHandle:bodyChunks()
   local index = 0
-  local chunks = self.data or {}
 
   return function()
     index = index + 1
-    local chunk = chunks[index]
-    if chunk then
-      return chunk
+    if index <= 3 then
+      return Buffer
     end
   end
 end
diff --git a/internal/gatewayapi/route.go b/internal/gatewayapi/route.go
index 974f2cebc..cfc2272a6 100644
--- a/internal/gatewayapi/route.go
+++ b/internal/gatewayapi/route.go
@@ -55,9 +55,17 @@ type RoutesTranslator interface {
 func (t *Translator) ProcessHTTPRoutes(httpRoutes []*gwapiv1.HTTPRoute, gateways []*GatewayContext, resources *resource.Resources, xdsIR resource.XdsIRMap) []*HTTPRouteContext {
 	var relevantHTTPRoutes []*HTTPRouteContext
 
-	// always sort initially by creation time stamp. Later on, additional sorting based on matcher type and
-	// match length may occur.
+	// Initially, httpRoutes sort by creation timestamp
+	// or sort alphabetically by “{namespace}/{name}” if multiple routes share same timestamp.
+	// Later on, additional sorting based on matcher type and match length may occur.
 	sort.Slice(httpRoutes, func(i, j int) bool {
+		if httpRoutes[i].CreationTimestamp.Equal(&(httpRoutes[j].CreationTimestamp)) {
+			routeKeyI := fmt.Sprintf("%s/%s", httpRoutes[i].Namespace, httpRoutes[i].Name)
+			routeKeyJ := fmt.Sprintf("%s/%s", httpRoutes[j].Namespace, httpRoutes[j].Name)
+			return routeKeyI < routeKeyJ
+		}
+		// Not identical CreationTimestamps
+
 		return httpRoutes[i].CreationTimestamp.Before(&(httpRoutes[j].CreationTimestamp))
 	})
 
@@ -1539,7 +1547,7 @@ func (t *Translator) processServiceImportDestinationSetting(
 		// Fall back to Service ClusterIP routing
 		backendIps := resources.GetServiceImport(backendNamespace, string(backendRef.Name)).Spec.IPs
 		for _, ip := range backendIps {
-			ep := ir.NewDestEndpoint(ip, uint32(*backendRef.Port), false, nil)
+			ep := ir.NewDestEndpoint(nil, ip, uint32(*backendRef.Port), false, nil)
 			endpoints = append(endpoints, ep)
 		}
 	}
@@ -1586,7 +1594,7 @@ func (t *Translator) processServiceDestinationSetting(
 		endpoints, addrType = getIREndpointsFromEndpointSlices(endpointSlices, servicePort.Name, servicePort.Protocol)
 	} else {
 		// Fall back to Service ClusterIP routing
-		ep := ir.NewDestEndpoint(service.Spec.ClusterIP, uint32(*backendRef.Port), false, nil)
+		ep := ir.NewDestEndpoint(nil, service.Spec.ClusterIP, uint32(*backendRef.Port), false, nil)
 		endpoints = append(endpoints, ep)
 	}
 
@@ -1840,12 +1848,12 @@ func getIREndpointsFromEndpointSlice(endpointSlice *discoveryv1.EndpointSlice, p
 				// Drain the endpoint if it is being terminated
 				draining := *conditions.Terminating
 				for _, address := range endpoint.Addresses {
-					ep := ir.NewDestEndpoint(address, uint32(*endpointPort.Port), draining, endpoint.Zone)
+					ep := ir.NewDestEndpoint(nil, address, uint32(*endpointPort.Port), draining, endpoint.Zone)
 					endpoints = append(endpoints, ep)
 				}
 			} else if conditions.Ready == nil || *conditions.Ready {
 				for _, address := range endpoint.Addresses {
-					ep := ir.NewDestEndpoint(address, uint32(*endpointPort.Port), false, endpoint.Zone)
+					ep := ir.NewDestEndpoint(nil, address, uint32(*endpointPort.Port), false, endpoint.Zone)
 					endpoints = append(endpoints, ep)
 				}
 			}
@@ -1980,11 +1988,11 @@ func (t *Translator) processBackendDestinationSetting(
 			ip := net.ParseIP(bep.IP.Address)
 			if ip != nil {
 				addrTypeMap[ir.IP]++
-				irde = ir.NewDestEndpoint(bep.IP.Address, uint32(bep.IP.Port), false, bep.Zone)
+				irde = ir.NewDestEndpoint(bep.Hostname, bep.IP.Address, uint32(bep.IP.Port), false, bep.Zone)
 			}
 		case bep.FQDN != nil:
 			addrTypeMap[ir.FQDN]++
-			irde = ir.NewDestEndpoint(bep.FQDN.Hostname, uint32(bep.FQDN.Port), false, bep.Zone)
+			irde = ir.NewDestEndpoint(bep.Hostname, bep.FQDN.Hostname, uint32(bep.FQDN.Port), false, bep.Zone)
 		case bep.Unix != nil:
 			addrTypeMap[ir.IP]++
 			irde = &ir.DestinationEndpoint{
diff --git a/internal/gatewayapi/runner/runner.go b/internal/gatewayapi/runner/runner.go
index e253e64cc..8b31fb3f1 100644
--- a/internal/gatewayapi/runner/runner.go
+++ b/internal/gatewayapi/runner/runner.go
@@ -124,7 +124,7 @@ func (r *Runner) startWasmCache(ctx context.Context) {
 }
 
 func (r *Runner) subscribeAndTranslate(sub <-chan watchable.Snapshot[string, *resource.ControllerResources]) {
-	message.HandleSubscription(message.Metadata{Runner: string(egv1a1.LogComponentGatewayAPIRunner), Message: "provider-resources"}, sub,
+	message.HandleSubscription(message.Metadata{Runner: r.Name(), Message: message.ProviderResourcesMessageName}, sub,
 		func(update message.Update[string, *resource.ControllerResources], errChan chan error) {
 			r.Logger.Info("received an update")
 			val := update.Value
@@ -187,55 +187,87 @@ func (r *Runner) subscribeAndTranslate(sub <-chan watchable.Snapshot[string, *re
 				// Publish the IRs.
 				// Also validate the ir before sending it.
 				for key, val := range result.InfraIR {
-					r.Logger.V(1).WithValues("infra-ir", key).Info(val.JSONString())
+					r.Logger.V(1).WithValues(string(message.InfraIRMessageName), key).Info(val.JSONString())
 					if err := val.Validate(); err != nil {
 						r.Logger.Error(err, "unable to validate infra ir, skipped sending it")
 						errChan <- err
 					} else {
-						r.InfraIR.Store(key, val)
+						message.HandleStore(message.Metadata{
+							Runner:  r.Name(),
+							Message: message.InfraIRMessageName,
+						},
+							key, val, &r.InfraIR.Map)
 						newIRKeys = append(newIRKeys, key)
 					}
 				}
 
 				for key, val := range result.XdsIR {
-					r.Logger.V(1).WithValues("xds-ir", key).Info(val.JSONString())
+					r.Logger.V(1).WithValues(string(message.XDSIRMessageName), key).Info(val.JSONString())
 					if err := val.Validate(); err != nil {
 						r.Logger.Error(err, "unable to validate xds ir, skipped sending it")
 						errChan <- err
 					} else {
-						r.XdsIR.Store(key, val)
+						message.HandleStore(message.Metadata{
+							Runner:  r.Name(),
+							Message: message.XDSIRMessageName,
+						},
+							key, val, &r.XdsIR.Map)
 					}
 				}
 
 				// Update Status
 				for _, gateway := range result.Gateways {
 					key := utils.NamespacedName(gateway)
-					r.ProviderResources.GatewayStatuses.Store(key, &gateway.Status)
+					message.HandleStore(message.Metadata{
+						Runner:  r.Name(),
+						Message: message.GatewayStatusMessageName,
+					},
+						key, &gateway.Status, &r.ProviderResources.GatewayStatuses)
 					delete(statusesToDelete.GatewayStatusKeys, key)
 				}
 				for _, httpRoute := range result.HTTPRoutes {
 					key := utils.NamespacedName(httpRoute)
-					r.ProviderResources.HTTPRouteStatuses.Store(key, &httpRoute.Status)
+					message.HandleStore(message.Metadata{
+						Runner:  r.Name(),
+						Message: message.HTTPRouteStatusMessageName,
+					},
+						key, &httpRoute.Status, &r.ProviderResources.HTTPRouteStatuses)
 					delete(statusesToDelete.HTTPRouteStatusKeys, key)
 				}
 				for _, grpcRoute := range result.GRPCRoutes {
 					key := utils.NamespacedName(grpcRoute)
-					r.ProviderResources.GRPCRouteStatuses.Store(key, &grpcRoute.Status)
+					message.HandleStore(message.Metadata{
+						Runner:  r.Name(),
+						Message: message.GRPCRouteStatusMessageName,
+					},
+						key, &grpcRoute.Status, &r.ProviderResources.GRPCRouteStatuses)
 					delete(statusesToDelete.GRPCRouteStatusKeys, key)
 				}
 				for _, tlsRoute := range result.TLSRoutes {
 					key := utils.NamespacedName(tlsRoute)
-					r.ProviderResources.TLSRouteStatuses.Store(key, &tlsRoute.Status)
+					message.HandleStore(message.Metadata{
+						Runner:  r.Name(),
+						Message: message.TLSRouteStatusMessageName,
+					},
+						key, &tlsRoute.Status, &r.ProviderResources.TLSRouteStatuses)
 					delete(statusesToDelete.TLSRouteStatusKeys, key)
 				}
 				for _, tcpRoute := range result.TCPRoutes {
 					key := utils.NamespacedName(tcpRoute)
-					r.ProviderResources.TCPRouteStatuses.Store(key, &tcpRoute.Status)
+					message.HandleStore(message.Metadata{
+						Runner:  r.Name(),
+						Message: message.TCPRouteStatusMessageName,
+					},
+						key, &tcpRoute.Status, &r.ProviderResources.TCPRouteStatuses)
 					delete(statusesToDelete.TCPRouteStatusKeys, key)
 				}
 				for _, udpRoute := range result.UDPRoutes {
 					key := utils.NamespacedName(udpRoute)
-					r.ProviderResources.UDPRouteStatuses.Store(key, &udpRoute.Status)
+					message.HandleStore(message.Metadata{
+						Runner:  r.Name(),
+						Message: message.UDPRouteStatusMessageName,
+					},
+						key, &udpRoute.Status, &r.ProviderResources.UDPRouteStatuses)
 					delete(statusesToDelete.UDPRouteStatusKeys, key)
 				}
 
@@ -246,7 +278,11 @@ func (r *Runner) subscribeAndTranslate(sub <-chan watchable.Snapshot[string, *re
 				for _, backendTLSPolicy := range result.BackendTLSPolicies {
 					key := utils.NamespacedName(backendTLSPolicy)
 					if !(reflect.ValueOf(backendTLSPolicy.Status).IsZero()) {
-						r.ProviderResources.BackendTLSPolicyStatuses.Store(key, &backendTLSPolicy.Status)
+						message.HandleStore(message.Metadata{
+							Runner:  r.Name(),
+							Message: message.BackendTLSPolicyStatusMessageName,
+						},
+							key, &backendTLSPolicy.Status, &r.ProviderResources.BackendTLSPolicyStatuses)
 					}
 					delete(statusesToDelete.BackendTLSPolicyStatusKeys, key)
 				}
@@ -254,35 +290,55 @@ func (r *Runner) subscribeAndTranslate(sub <-chan watchable.Snapshot[string, *re
 				for _, clientTrafficPolicy := range result.ClientTrafficPolicies {
 					key := utils.NamespacedName(clientTrafficPolicy)
 					if !(reflect.ValueOf(clientTrafficPolicy.Status).IsZero()) {
-						r.ProviderResources.ClientTrafficPolicyStatuses.Store(key, &clientTrafficPolicy.Status)
+						message.HandleStore(message.Metadata{
+							Runner:  r.Name(),
+							Message: message.ClientTrafficPolicyStatusMessageName,
+						},
+							key, &clientTrafficPolicy.Status, &r.ProviderResources.ClientTrafficPolicyStatuses)
 					}
 					delete(statusesToDelete.ClientTrafficPolicyStatusKeys, key)
 				}
 				for _, backendTrafficPolicy := range result.BackendTrafficPolicies {
 					key := utils.NamespacedName(backendTrafficPolicy)
 					if !(reflect.ValueOf(backendTrafficPolicy.Status).IsZero()) {
-						r.ProviderResources.BackendTrafficPolicyStatuses.Store(key, &backendTrafficPolicy.Status)
+						message.HandleStore(message.Metadata{
+							Runner:  r.Name(),
+							Message: message.BackendTrafficPolicyStatusMessageName,
+						},
+							key, &backendTrafficPolicy.Status, &r.ProviderResources.BackendTrafficPolicyStatuses)
 					}
 					delete(statusesToDelete.BackendTrafficPolicyStatusKeys, key)
 				}
 				for _, securityPolicy := range result.SecurityPolicies {
 					key := utils.NamespacedName(securityPolicy)
 					if !(reflect.ValueOf(securityPolicy.Status).IsZero()) {
-						r.ProviderResources.SecurityPolicyStatuses.Store(key, &securityPolicy.Status)
+						message.HandleStore(message.Metadata{
+							Runner:  r.Name(),
+							Message: message.SecurityPolicyStatusMessageName,
+						},
+							key, &securityPolicy.Status, &r.ProviderResources.SecurityPolicyStatuses)
 					}
 					delete(statusesToDelete.SecurityPolicyStatusKeys, key)
 				}
 				for _, envoyExtensionPolicy := range result.EnvoyExtensionPolicies {
 					key := utils.NamespacedName(envoyExtensionPolicy)
 					if !(reflect.ValueOf(envoyExtensionPolicy.Status).IsZero()) {
-						r.ProviderResources.EnvoyExtensionPolicyStatuses.Store(key, &envoyExtensionPolicy.Status)
+						message.HandleStore(message.Metadata{
+							Runner:  r.Name(),
+							Message: message.EnvoyExtensionPolicyStatusMessageName,
+						},
+							key, &envoyExtensionPolicy.Status, &r.ProviderResources.EnvoyExtensionPolicyStatuses)
 					}
 					delete(statusesToDelete.EnvoyExtensionPolicyStatusKeys, key)
 				}
 				for _, backend := range result.Backends {
 					key := utils.NamespacedName(backend)
 					if !(reflect.ValueOf(backend.Status).IsZero()) {
-						r.ProviderResources.BackendStatuses.Store(key, &backend.Status)
+						message.HandleStore(message.Metadata{
+							Runner:  r.Name(),
+							Message: message.BackendStatusMessageName,
+						},
+							key, &backend.Status, &r.ProviderResources.BackendStatuses)
 					}
 					delete(statusesToDelete.BackendStatusKeys, key)
 				}
@@ -293,7 +349,11 @@ func (r *Runner) subscribeAndTranslate(sub <-chan watchable.Snapshot[string, *re
 					}
 					if !(reflect.ValueOf(extServerPolicy.Object["status"]).IsZero()) {
 						policyStatus := unstructuredToPolicyStatus(extServerPolicy.Object["status"].(map[string]any))
-						r.ProviderResources.ExtensionPolicyStatuses.Store(key, &policyStatus)
+						message.HandleStore(message.Metadata{
+							Runner:  r.Name(),
+							Message: message.ExtensionServerPoliciesStatusMessageName,
+						},
+							key, &policyStatus, &r.ProviderResources.ExtensionPolicyStatuses)
 					}
 					delete(statusesToDelete.ExtensionServerPolicyStatusKeys, key)
 				}
diff --git a/internal/gatewayapi/securitypolicy.go b/internal/gatewayapi/securitypolicy.go
index a07f13128..5067e3df8 100644
--- a/internal/gatewayapi/securitypolicy.go
+++ b/internal/gatewayapi/securitypolicy.go
@@ -226,6 +226,12 @@ func (t *Translator) ProcessSecurityPolicies(securityPolicies []*egv1a1.Security
 		}
 	}
 
+	for _, policy := range res {
+		// Truncate Ancestor list of longer than 16
+		if len(policy.Status.Ancestors) > 16 {
+			status.TruncatePolicyAncestors(&policy.Status, t.GatewayControllerName, policy.Generation)
+		}
+	}
 	return res
 }
 
@@ -501,11 +507,12 @@ func (t *Translator) translateSecurityPolicyForRoute(
 ) error {
 	// Build IR
 	var (
-		cors          *ir.CORS
-		apiKeyAuth    *ir.APIKeyAuth
-		basicAuth     *ir.BasicAuth
-		authorization *ir.Authorization
-		err, errs     error
+		cors               *ir.CORS
+		apiKeyAuth         *ir.APIKeyAuth
+		basicAuth          *ir.BasicAuth
+		authorization      *ir.Authorization
+		err, errs          error
+		hasNonExtAuthError bool
 	)
 
 	if policy.Spec.CORS != nil {
@@ -532,10 +539,13 @@ func (t *Translator) translateSecurityPolicyForRoute(
 
 	if policy.Spec.Authorization != nil {
 		if authorization, err = t.buildAuthorization(policy); err != nil {
+			err = perr.WithMessage(err, "Authorization")
 			errs = errors.Join(errs, err)
 		}
 	}
 
+	hasNonExtAuthError = errs != nil
+
 	// Apply IR to all relevant routes
 	prefix := irRoutePrefix(route)
 	parentRefs := GetParentReferences(route)
@@ -547,13 +557,14 @@ func (t *Translator) translateSecurityPolicyForRoute(
 		}
 
 		var extAuth *ir.ExtAuth
+		var extAuthErr error
 		if policy.Spec.ExtAuth != nil {
-			if extAuth, err = t.buildExtAuth(
+			if extAuth, extAuthErr = t.buildExtAuth(
 				policy,
 				resources,
-				gtwCtx.envoyProxy); err != nil {
-				err = perr.WithMessage(err, "ExtAuth")
-				errs = errors.Join(errs, err)
+				gtwCtx.envoyProxy); extAuthErr != nil {
+				extAuthErr = perr.WithMessage(extAuthErr, "ExtAuth")
+				errs = errors.Join(errs, extAuthErr)
 			}
 		}
 
@@ -565,6 +576,7 @@ func (t *Translator) translateSecurityPolicyForRoute(
 				gtwCtx.envoyProxy); err != nil {
 				err = perr.WithMessage(err, "OIDC")
 				errs = errors.Join(errs, err)
+				hasNonExtAuthError = true
 			}
 		}
 
@@ -576,6 +588,7 @@ func (t *Translator) translateSecurityPolicyForRoute(
 				gtwCtx.envoyProxy); err != nil {
 				err = perr.WithMessage(err, "JWT")
 				errs = errors.Join(errs, err)
+				hasNonExtAuthError = true
 			}
 		}
 
@@ -595,9 +608,15 @@ func (t *Translator) translateSecurityPolicyForRoute(
 							Authorization: authorization,
 						}
 						if errs != nil {
-							// Return a 500 direct response to avoid unauthorized access
-							r.DirectResponse = &ir.CustomResponse{
-								StatusCode: ptr.To(uint32(500)),
+							// If there is only error for ext auth and ext auth is set to fail open, then skip the ext auth
+							// and allow the request to go through.
+							// Otherwise, return a 500 direct response to avoid unauthorized access.
+							shouldFailOpen := extAuthErr != nil && !hasNonExtAuthError && ptr.Deref(policy.Spec.ExtAuth.FailOpen, false)
+							if !shouldFailOpen {
+								// Return a 500 direct response to avoid unauthorized access
+								r.DirectResponse = &ir.CustomResponse{
+									StatusCode: ptr.To(uint32(500)),
+								}
 							}
 						}
 					}
@@ -617,14 +636,15 @@ func (t *Translator) translateSecurityPolicyForGateway(
 ) error {
 	// Build IR
 	var (
-		cors          *ir.CORS
-		jwt           *ir.JWT
-		oidc          *ir.OIDC
-		apiKeyAuth    *ir.APIKeyAuth
-		basicAuth     *ir.BasicAuth
-		extAuth       *ir.ExtAuth
-		authorization *ir.Authorization
-		err, errs     error
+		cors                  *ir.CORS
+		jwt                   *ir.JWT
+		oidc                  *ir.OIDC
+		apiKeyAuth            *ir.APIKeyAuth
+		basicAuth             *ir.BasicAuth
+		extAuth               *ir.ExtAuth
+		authorization         *ir.Authorization
+		extAuthErr, err, errs error
+		hasNonExtAuthError    bool
 	)
 
 	if policy.Spec.CORS != nil {
@@ -669,21 +689,24 @@ func (t *Translator) translateSecurityPolicyForGateway(
 		}
 	}
 
-	if policy.Spec.ExtAuth != nil {
-		if extAuth, err = t.buildExtAuth(
-			policy,
-			resources,
-			gateway.envoyProxy); err != nil {
-			err = perr.WithMessage(err, "ExtAuth")
+	if policy.Spec.Authorization != nil {
+		if authorization, err = t.buildAuthorization(policy); err != nil {
 			errs = errors.Join(errs, err)
 		}
 	}
 
-	if policy.Spec.Authorization != nil {
-		if authorization, err = t.buildAuthorization(policy); err != nil {
-			errs = errors.Join(errs, err)
+	hasNonExtAuthError = errs != nil
+
+	if policy.Spec.ExtAuth != nil {
+		if extAuth, extAuthErr = t.buildExtAuth(
+			policy,
+			resources,
+			gateway.envoyProxy); extAuthErr != nil {
+			extAuthErr = perr.WithMessage(extAuthErr, "ExtAuth")
+			errs = errors.Join(errs, extAuthErr)
 		}
 	}
+
 	// Apply IR to all the routes within the specific Gateway that originated
 	// from the gateway to which this security policy was attached.
 	// If the feature is already set, then skip it, since it must have be
@@ -725,9 +748,14 @@ func (t *Translator) translateSecurityPolicyForGateway(
 				Authorization: authorization,
 			}
 			if errs != nil {
-				// Return a 500 direct response to avoid unauthorized access
-				r.DirectResponse = &ir.CustomResponse{
-					StatusCode: ptr.To(uint32(500)),
+				// If there is only error for ext auth and ext auth is set to fail open, then skip the ext auth
+				// and allow the request to go through.
+				// Otherwise, return a 500 direct response to avoid unauthorized access.
+				shouldFailOpen := extAuthErr != nil && !hasNonExtAuthError && ptr.Deref(policy.Spec.ExtAuth.FailOpen, false)
+				if !shouldFailOpen {
+					r.DirectResponse = &ir.CustomResponse{
+						StatusCode: ptr.To(uint32(500)),
+					}
 				}
 			}
 		}
@@ -1509,7 +1537,7 @@ func backendRefAuthority(resources *resource.Resources, backendRef *gwapiv1.Back
 	}
 
 	// Port is mandatory for Kubernetes services
-	if backendKind == resource.KindService {
+	if backendKind == resource.KindService || backendKind == resource.KindServiceImport {
 		return net.JoinHostPort(
 			fmt.Sprintf("%s.%s", backendRef.Name, backendNamespace),
 			strconv.Itoa(int(*backendRef.Port)),
diff --git a/internal/gatewayapi/sort.go b/internal/gatewayapi/sort.go
index bd859d6c0..922013b4b 100644
--- a/internal/gatewayapi/sort.go
+++ b/internal/gatewayapi/sort.go
@@ -107,7 +107,7 @@ func sortXdsIRMap(xdsIR resource.XdsIRMap) {
 		for _, http := range irItem.HTTP {
 			if !http.PreserveRouteOrder {
 				// descending order
-				sort.Sort(sort.Reverse(XdsIRRoutes(http.Routes)))
+				sort.Stable(sort.Reverse(XdsIRRoutes(http.Routes)))
 			}
 		}
 	}
diff --git a/internal/gatewayapi/status/gateway.go b/internal/gatewayapi/status/gateway.go
index af45012b6..fd4785b33 100644
--- a/internal/gatewayapi/status/gateway.go
+++ b/internal/gatewayapi/status/gateway.go
@@ -7,6 +7,7 @@ package status
 
 import (
 	"fmt"
+	"slices"
 	"time"
 
 	appsv1 "k8s.io/api/apps/v1"
@@ -43,10 +44,15 @@ func GatewayAccepted(gw *gwapiv1.Gateway) bool {
 	return !GatewayNotAccepted(gw)
 }
 
+type NodeAddresses struct {
+	IPv4 []string
+	IPv6 []string
+}
+
 // UpdateGatewayStatusProgrammedCondition updates the status addresses for the provided gateway
 // based on the status IP/Hostname of svc and updates the Programmed condition based on the
 // service and deployment or daemonset state.
-func UpdateGatewayStatusProgrammedCondition(gw *gwapiv1.Gateway, svc *corev1.Service, envoyObj client.Object, nodeAddresses ...string) {
+func UpdateGatewayStatusProgrammedCondition(gw *gwapiv1.Gateway, svc *corev1.Service, envoyObj client.Object, nodeAddresses NodeAddresses) {
 	var addresses, hostnames []string
 	// Update the status addresses field.
 	if svc != nil {
@@ -92,7 +98,14 @@ func UpdateGatewayStatusProgrammedCondition(gw *gwapiv1.Gateway, svc *corev1.Ser
 			}
 
 			if svc.Spec.Type == corev1.ServiceTypeNodePort {
-				addresses = nodeAddresses
+				var relevantAddresses []string
+				if slices.Contains(svc.Spec.IPFamilies, corev1.IPv4Protocol) {
+					relevantAddresses = append(relevantAddresses, nodeAddresses.IPv4...)
+				}
+				if slices.Contains(svc.Spec.IPFamilies, corev1.IPv6Protocol) {
+					relevantAddresses = append(relevantAddresses, nodeAddresses.IPv6...)
+				}
+				addresses = relevantAddresses
 			}
 		}
 
diff --git a/internal/gatewayapi/status/policy.go b/internal/gatewayapi/status/policy.go
index 70e319e68..5009fd246 100644
--- a/internal/gatewayapi/status/policy.go
+++ b/internal/gatewayapi/status/policy.go
@@ -6,11 +6,22 @@
 package status
 
 import (
+	"cmp"
+	"fmt"
+	"slices"
+	"strings"
 	"time"
 
-	"github.com/google/go-cmp/cmp"
+	gocmp "github.com/google/go-cmp/cmp"
+	"k8s.io/apimachinery/pkg/api/meta"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	gwapiv1a2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+
+	egv1a1 "github.com/envoyproxy/gateway/api/v1alpha1"
+)
+
+const (
+	conditionMessageMaxLength = 32768
 )
 
 type PolicyResolveError struct {
@@ -44,7 +55,7 @@ func SetAcceptedForPolicyAncestors(policyStatus *gwapiv1a2.PolicyStatus, ancesto
 func setAcceptedForPolicyAncestor(policyStatus *gwapiv1a2.PolicyStatus, ancestorRef gwapiv1a2.ParentReference, controllerName string, generation int64) {
 	// Return early if Accepted condition is already set for specific ancestor.
 	for _, ancestor := range policyStatus.Ancestors {
-		if string(ancestor.ControllerName) == controllerName && cmp.Equal(ancestor.AncestorRef, ancestorRef) {
+		if string(ancestor.ControllerName) == controllerName && gocmp.Equal(ancestor.AncestorRef, ancestorRef) {
 			for _, c := range ancestor.Conditions {
 				if c.Type == string(gwapiv1a2.PolicyConditionAccepted) {
 					return
@@ -77,7 +88,7 @@ func SetConditionForPolicyAncestor(policyStatus *gwapiv1a2.PolicyStatus, ancesto
 
 	// Add condition for exist PolicyAncestorStatus.
 	for i, ancestor := range policyStatus.Ancestors {
-		if string(ancestor.ControllerName) == controllerName && cmp.Equal(ancestor.AncestorRef, ancestorRef) {
+		if string(ancestor.ControllerName) == controllerName && gocmp.Equal(ancestor.AncestorRef, ancestorRef) {
 			policyStatus.Ancestors[i].Conditions = MergeConditions(policyStatus.Ancestors[i].Conditions, cond)
 			return
 		}
@@ -90,3 +101,60 @@ func SetConditionForPolicyAncestor(policyStatus *gwapiv1a2.PolicyStatus, ancesto
 		Conditions:     []metav1.Condition{cond},
 	})
 }
+
+// TruncatePolicyAncestors trims PolicyStatus.Ancestors down to at most 16 entries.
+// The first 15 ancestors are shown as is.
+// The last 16th ancestor is shown as is and add Aggregated condition.
+func TruncatePolicyAncestors(policyStatus *gwapiv1a2.PolicyStatus, controllerName string, generation int64) {
+	if len(policyStatus.Ancestors) <= 16 {
+		return
+	}
+
+	// we need to truncate policy ancestor status due to the item limit (max 16).
+	// so we are choosing to preserve the 16 most important ancestors.
+	// negative polarity (Conflicted, Overridden...) should be clearly indicated to the user.
+	slices.SortStableFunc(policyStatus.Ancestors, func(a, b gwapiv1a2.PolicyAncestorStatus) int {
+		if r := cmp.Compare(sortRankForPolicyAncestor(a), sortRankForPolicyAncestor(b)); r != 0 {
+			return r
+		}
+		return strings.Compare(string(a.AncestorRef.Name), string(b.AncestorRef.Name))
+	})
+
+	aggregated := make([]string, len(policyStatus.Ancestors)-16)
+	for i, ancestor := range policyStatus.Ancestors[16:] {
+		aggregated[i] = string(ancestor.AncestorRef.Name)
+	}
+	aggregatedMessage := fmt.Sprintf("Ancestors have been aggregated because the number of policy ancestors exceeds 16. "+
+		"The aggregated ancestors: %s", strings.Join(aggregated, ", "))
+	if len(aggregatedMessage) > conditionMessageMaxLength {
+		aggregatedMessage = aggregatedMessage[:conditionMessageMaxLength]
+	}
+
+	policyStatus.Ancestors = policyStatus.Ancestors[:16]
+	SetConditionForPolicyAncestor(policyStatus,
+		policyStatus.Ancestors[15].AncestorRef,
+		controllerName,
+		egv1a1.PolicyConditionAggregated,
+		metav1.ConditionTrue,
+		egv1a1.PolicyReasonAggregated,
+		aggregatedMessage,
+		generation,
+	)
+}
+
+// sortRankForPolicyAncestor returns an integer sort key.
+// ranking rules (smaller value -> higher priority):
+//
+//	– The ancestor is not accepted (Accepted == false).
+//	– The ancestor is accepted and overridden (Override == true).
+//	– All other cases.
+func sortRankForPolicyAncestor(ancestor gwapiv1a2.PolicyAncestorStatus) int {
+	switch {
+	case meta.IsStatusConditionFalse(ancestor.Conditions, string(gwapiv1a2.PolicyConditionAccepted)):
+		return 0
+	case meta.IsStatusConditionTrue(ancestor.Conditions, string(egv1a1.PolicyReasonOverridden)):
+		return 1
+	default:
+		return 2
+	}
+}
diff --git a/internal/gatewayapi/translator.go b/internal/gatewayapi/translator.go
index d7096d4ed..22890f267 100644
--- a/internal/gatewayapi/translator.go
+++ b/internal/gatewayapi/translator.go
@@ -247,6 +247,9 @@ func (t *Translator) Translate(resources *resource.Resources) (*TranslateResult,
 		errs = errors.Join(errs, err)
 	}
 
+	// Update status of Backend TLS Policies after translating all resources
+	t.ProcessBackendTLSPolicyStatus(resources.BackendTLSPolicies)
+
 	// Sort xdsIR based on the Gateway API spec
 	sortXdsIRMap(xdsIR)
 
diff --git a/internal/gatewayapi/validate.go b/internal/gatewayapi/validate.go
index d2b72b4bf..45bc23053 100644
--- a/internal/gatewayapi/validate.go
+++ b/internal/gatewayapi/validate.go
@@ -960,15 +960,12 @@ func (t *Translator) validateExtServiceBackendReference(
 ) error {
 	// These are sanity checks, they should never happen because the API server
 	// should have caught them
-	if backendRef.Group != nil && *backendRef.Group != "" && *backendRef.Group != egv1a1.GroupName {
-		return errors.New(
-			"group is invalid, only the core API group (specified by omitting" +
-				" the group field or setting it to an empty string) and the" +
-				" gateway.envoyproxy.io API group are supported")
+	if backendRef.Group != nil && *backendRef.Group != "" && *backendRef.Group != GroupMultiClusterService && *backendRef.Group != egv1a1.GroupName {
+		return fmt.Errorf("group is invalid, only the core API group (specified by omitting the group field or setting it to an empty string), the %s API group, and the %s API group are supported", GroupMultiClusterService, egv1a1.GroupName)
 	}
-	if backendRef.Kind != nil && *backendRef.Kind != resource.KindService && *backendRef.Kind != egv1a1.KindBackend {
+	if backendRef.Kind != nil && *backendRef.Kind != resource.KindService && *backendRef.Kind != resource.KindServiceImport && *backendRef.Kind != egv1a1.KindBackend {
 		return errors.New("kind is invalid, only Service (specified by omitting " +
-			"the kind field or setting it to 'Service') and Backend are supported")
+			"the kind field or setting it to 'Service'), ServiceImport, and Backend are supported")
 	}
 	if backendRef.Port == nil && (backendRef.Kind == nil || *backendRef.Kind != egv1a1.KindBackend) {
 		return errors.New("a valid port number corresponding to a port on the Service must be specified")
@@ -1002,6 +999,32 @@ func (t *Translator) validateExtServiceBackendReference(
 				*backendRef.Port, serviceNamespace, string(backendRef.Name),
 			)
 		}
+	case resource.KindServiceImport:
+		// check if the service import is valid
+		serviceImportNamespace := NamespaceDerefOr(backendRef.Namespace, ownerNamespace)
+		serviceImport := resources.GetServiceImport(serviceImportNamespace, string(backendRef.Name))
+		if serviceImport == nil {
+			return fmt.Errorf("serviceimport %s/%s not found", serviceImportNamespace, backendRef.Name)
+		}
+		var portFound bool
+		for _, port := range serviceImport.Spec.Ports {
+			portProtocol := port.Protocol
+			if port.Protocol == "" { // Default protocol is TCP
+				portProtocol = corev1.ProtocolTCP
+			}
+			// currently only HTTP and GRPC are supported, both of which are TCP
+			if port.Port == int32(*backendRef.Port) && portProtocol == corev1.ProtocolTCP {
+				portFound = true
+				break
+			}
+		}
+
+		if !portFound {
+			return fmt.Errorf(
+				"TCP Port %d not found on service %s/%s",
+				*backendRef.Port, serviceImportNamespace, string(backendRef.Name),
+			)
+		}
 	case egv1a1.KindBackend:
 		backendNamespace := NamespaceDerefOr(backendRef.Namespace, ownerNamespace)
 		backend := resources.GetBackend(backendNamespace, string(backendRef.Name))
diff --git a/internal/globalratelimit/runner/runner.go b/internal/globalratelimit/runner/runner.go
index f71c7784c..1f9211347 100644
--- a/internal/globalratelimit/runner/runner.go
+++ b/internal/globalratelimit/runner/runner.go
@@ -137,7 +137,8 @@ func (r *Runner) subscribeAndTranslate(ctx context.Context) {
 	rateLimitConfigsCache := map[string][]cachetype.Resource{}
 
 	// Subscribe to resources.
-	message.HandleSubscription(message.Metadata{Runner: string(egv1a1.LogComponentGlobalRateLimitRunner), Message: "xds-ir"}, r.XdsIR.Subscribe(ctx),
+
+	message.HandleSubscription(message.Metadata{Runner: r.Name(), Message: message.XDSIRMessageName}, r.XdsIR.Subscribe(ctx),
 		func(update message.Update[string, *ir.Xds], errChan chan error) {
 			r.Logger.Info("received a notification")
 
diff --git a/internal/infrastructure/kubernetes/proxy/resource_provider.go b/internal/infrastructure/kubernetes/proxy/resource_provider.go
index 87b7a3a4e..61adadaff 100644
--- a/internal/infrastructure/kubernetes/proxy/resource_provider.go
+++ b/internal/infrastructure/kubernetes/proxy/resource_provider.go
@@ -662,14 +662,13 @@ func (r *ResourceRender) getPodSpec(
 
 func (r *ResourceRender) getPodAnnotations(resourceAnnotation map[string]string, pod *egv1a1.KubernetesPodSpec) map[string]string {
 	podAnnotations := map[string]string{}
-	maps.Copy(podAnnotations, resourceAnnotation)
-	maps.Copy(podAnnotations, pod.Annotations)
-
 	if enablePrometheus(r.infra) {
 		podAnnotations["prometheus.io/path"] = "/stats/prometheus" // TODO: make this configurable
 		podAnnotations["prometheus.io/scrape"] = "true"
 		podAnnotations["prometheus.io/port"] = strconv.Itoa(bootstrap.EnvoyStatsPort)
 	}
+	maps.Copy(podAnnotations, resourceAnnotation)
+	maps.Copy(podAnnotations, pod.Annotations)
 
 	if len(podAnnotations) == 0 {
 		podAnnotations = nil
diff --git a/internal/infrastructure/runner/runner.go b/internal/infrastructure/runner/runner.go
index 86c9f2d4f..270ad7c70 100644
--- a/internal/infrastructure/runner/runner.go
+++ b/internal/infrastructure/runner/runner.go
@@ -95,7 +95,7 @@ func (r *Runner) Start(ctx context.Context) (err error) {
 
 func (r *Runner) subscribeToProxyInfraIR(ctx context.Context, sub <-chan watchable.Snapshot[string, *ir.Infra]) {
 	// Subscribe to resources
-	message.HandleSubscription(message.Metadata{Runner: string(egv1a1.LogComponentInfrastructureRunner), Message: "infra-ir"}, sub,
+	message.HandleSubscription(message.Metadata{Runner: r.Name(), Message: message.InfraIRMessageName}, sub,
 		func(update message.Update[string, *ir.Infra], errChan chan error) {
 			r.Logger.Info("received an update")
 			val := update.Value
diff --git a/internal/ir/xds.go b/internal/ir/xds.go
index c1e609909..d9b17ce8e 100644
--- a/internal/ir/xds.go
+++ b/internal/ir/xds.go
@@ -740,6 +740,12 @@ type HTTPClientTimeout struct {
 	RequestReceivedTimeout *metav1.Duration `json:"requestReceivedTimeout,omitempty" yaml:"requestReceivedTimeout,omitempty"`
 	// IdleTimeout for an HTTP connection. Idle time is defined as a period in which there are no active requests in the connection.
 	IdleTimeout *metav1.Duration `json:"idleTimeout,omitempty" yaml:"idleTimeout,omitempty"`
+	// The stream idle timeout for connections managed by the connection manager.
+	// If not specified, this defaults to 5 minutes. The default value was selected
+	// so as not to interfere with any smaller configured timeouts that may have
+	// existed in configurations prior to the introduction of this feature, while
+	// introducing robustness to TCP connections that terminate without a FIN.
+	StreamIdleTimeout *metav1.Duration `json:"streamIdleTimeout,omitempty" yaml:"streamIdleTimeout,omitempty"`
 }
 
 // HTTPRoute holds the route information associated with the HTTP Route
@@ -1677,6 +1683,8 @@ const (
 // DestinationEndpoint holds the endpoint details associated with the destination
 // +kubebuilder:object:generate=true
 type DestinationEndpoint struct {
+	// Hostname refers to the endpoint's hostname
+	Hostname *string `json:"hostname,omitempty" yaml:"hostname,omitempty"`
 	// Host refers to the FQDN or IP address of the backend service.
 	Host string `json:"host" yaml:"host"`
 	// Port on the service to forward the request to.
@@ -1718,8 +1726,9 @@ func (d DestinationEndpoint) Validate() error {
 }
 
 // NewDestEndpoint creates a new DestinationEndpoint.
-func NewDestEndpoint(host string, port uint32, draining bool, zone *string) *DestinationEndpoint {
+func NewDestEndpoint(hostname *string, host string, port uint32, draining bool, zone *string) *DestinationEndpoint {
 	return &DestinationEndpoint{
+		Hostname: hostname,
 		Host:     host,
 		Port:     port,
 		Draining: draining,
@@ -2892,6 +2901,7 @@ const (
 	Error5XX             = TriggerEnum(egv1a1.Error5XX)
 	GatewayError         = TriggerEnum(egv1a1.GatewayError)
 	Reset                = TriggerEnum(egv1a1.Reset)
+	ResetBeforeRequest   = TriggerEnum(egv1a1.ResetBeforeRequest)
 	ConnectFailure       = TriggerEnum(egv1a1.ConnectFailure)
 	Retriable4XX         = TriggerEnum(egv1a1.Retriable4XX)
 	RefusedStream        = TriggerEnum(egv1a1.RefusedStream)
diff --git a/internal/ir/zz_generated.deepcopy.go b/internal/ir/zz_generated.deepcopy.go
index ab27afd5a..b7a3a4486 100644
--- a/internal/ir/zz_generated.deepcopy.go
+++ b/internal/ir/zz_generated.deepcopy.go
@@ -829,6 +829,11 @@ func (in *DNS) DeepCopy() *DNS {
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *DestinationEndpoint) DeepCopyInto(out *DestinationEndpoint) {
 	*out = *in
+	if in.Hostname != nil {
+		in, out := &in.Hostname, &out.Hostname
+		*out = new(string)
+		**out = **in
+	}
 	if in.Path != nil {
 		in, out := &in.Path, &out.Path
 		*out = new(string)
@@ -1456,6 +1461,11 @@ func (in *HTTPClientTimeout) DeepCopyInto(out *HTTPClientTimeout) {
 		*out = new(v1.Duration)
 		**out = **in
 	}
+	if in.StreamIdleTimeout != nil {
+		in, out := &in.StreamIdleTimeout, &out.StreamIdleTimeout
+		*out = new(v1.Duration)
+		**out = **in
+	}
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPClientTimeout.
diff --git a/internal/message/metrics.go b/internal/message/metrics.go
index de744f47a..c4127e7bf 100644
--- a/internal/message/metrics.go
+++ b/internal/message/metrics.go
@@ -29,6 +29,11 @@ var (
 		"Total number of subscribed watchable queue.",
 	)
 
+	watchablePublishTotal = metrics.NewCounter(
+		"watchable_publish_total",
+		"Total number of published updates to watchable queue.",
+	)
+
 	runnerLabel  = metrics.NewLabel("runner")
 	messageLabel = metrics.NewLabel("message")
 )
diff --git a/internal/message/types.go b/internal/message/types.go
index 2eee7f903..5ef6acf21 100644
--- a/internal/message/types.go
+++ b/internal/message/types.go
@@ -137,3 +137,46 @@ type InfraIR struct {
 type Xds struct {
 	watchable.Map[string, *xdstypes.ResourceVersionTable]
 }
+
+type MessageName string
+
+const (
+	// XDSMessageName is a message containing xds translated from xds-ir
+	XDSMessageName MessageName = "xds"
+	// XDSIRMessageName is a message containing xds-ir translated from provider-resources
+	XDSIRMessageName MessageName = "xds-ir"
+	// InfraIRMessageName is a message containing infra-ir translated from provider-resources
+	InfraIRMessageName MessageName = "infra-ir"
+	// ProviderResourcesMessageName is a message containing gw-api and envoy gateway resources from the provider
+	ProviderResourcesMessageName MessageName = "provider-resources"
+	// BackendStatusMessageName is a message containing updates to Backend status
+	BackendStatusMessageName MessageName = "backend-status"
+	// ExtensionServerPoliciesStatusMessageName is a message containing updates to ExtensionServerPolicy status
+	ExtensionServerPoliciesStatusMessageName MessageName = "extensionserverpolicies-status"
+	// EnvoyExtensionPolicyStatusMessageName is a message containing updates to EnvoyExtensionPolicy status
+	EnvoyExtensionPolicyStatusMessageName MessageName = "envoyextensionpolicy-status"
+	// EnvoyPatchPolicyStatusMessageName is a message containing updates to EnvoyPatchPolicy status
+	EnvoyPatchPolicyStatusMessageName MessageName = "envoypatchpolicy-status"
+	// SecurityPolicyStatusMessageName is a message containing updates to SecurityPolicy status
+	SecurityPolicyStatusMessageName MessageName = "securitypolicy-status"
+	// BackendTrafficPolicyStatusMessageName is a message containing updates to BackendTrafficPolicy status
+	BackendTrafficPolicyStatusMessageName MessageName = "backendtrafficpolicy-status"
+	// ClientTrafficPolicyStatusMessageName is a message containing updates to ClientTrafficPolicy status
+	ClientTrafficPolicyStatusMessageName MessageName = "clienttrafficpolicy-status"
+	// BackendTLSPolicyStatusMessageName is a message containing updates to BackendTLSPolicy status
+	BackendTLSPolicyStatusMessageName MessageName = "backendtlspolicy-status"
+	// UDPRouteStatusMessageName is a message containing updates to UDPRoute status
+	UDPRouteStatusMessageName MessageName = "udproute-status"
+	// TCPRouteStatusMessageName is a message containing updates to TCPRoute status
+	TCPRouteStatusMessageName MessageName = "tcproute-status"
+	// TLSRouteStatusMessageName is a message containing updates to TLSRoute status
+	TLSRouteStatusMessageName MessageName = "tlsroute-status"
+	// GRPCRouteStatusMessageName is a message containing updates to GRPCRoute status
+	GRPCRouteStatusMessageName MessageName = "grpcroute-status"
+	// HTTPRouteStatusMessageName is a message containing updates to HTTPRoute status
+	HTTPRouteStatusMessageName MessageName = "httproute-status"
+	// GatewayStatusMessageName is a message containing updates to Gateway status
+	GatewayStatusMessageName MessageName = "gateway-status"
+	// GatewayClassStatusMessageName is a message containing updates to GatewayClass status
+	GatewayClassStatusMessageName MessageName = "gatewayclass-status"
+)
diff --git a/internal/message/watchutil.go b/internal/message/watchutil.go
index fc0f65dcc..32a9f61d3 100644
--- a/internal/message/watchutil.go
+++ b/internal/message/watchutil.go
@@ -25,7 +25,7 @@ var logger = logging.DefaultLogger(os.Stdout, egv1a1.LogLevelInfo).WithName("wat
 
 type Metadata struct {
 	Runner  string
-	Message string
+	Message MessageName
 }
 
 func (m Metadata) LabelValues() []metrics.LabelValue {
@@ -34,7 +34,7 @@ func (m Metadata) LabelValues() []metrics.LabelValue {
 		labels = append(labels, runnerLabel.Value(m.Runner))
 	}
 	if m.Message != "" {
-		labels = append(labels, messageLabel.Value(m.Message))
+		labels = append(labels, messageLabel.Value(string(m.Message)))
 	}
 
 	return labels
@@ -100,3 +100,8 @@ func HandleSubscription[K comparable, V any](
 		}
 	}
 }
+
+func HandleStore[K comparable, V any](meta Metadata, key K, value V, publish *watchable.Map[K, V]) {
+	publish.Store(key, value)
+	watchablePublishTotal.WithSuccess(meta.LabelValues()...).Increment()
+}
diff --git a/internal/metrics/otel_metric_sink.go b/internal/metrics/otel_metric_sink.go
index 442f0c0d3..978cd31aa 100644
--- a/internal/metrics/otel_metric_sink.go
+++ b/internal/metrics/otel_metric_sink.go
@@ -11,8 +11,12 @@ import (
 
 	"go.opentelemetry.io/otel/attribute"
 	api "go.opentelemetry.io/otel/metric"
+
+	log "github.com/envoyproxy/gateway/internal/logging"
 )
 
+var metricsLogger log.Logger
+
 // NewCounter creates a new Counter Metric (the values will be cumulative).
 // That means that data collected by the new Metric will be summed before export.
 func NewCounter(name, description string, opts ...MetricOption) *Counter {
diff --git a/internal/metrics/register.go b/internal/metrics/register.go
index ebbc6ee21..51c3f9761 100644
--- a/internal/metrics/register.go
+++ b/internal/metrics/register.go
@@ -23,7 +23,6 @@ import (
 
 	egv1a1 "github.com/envoyproxy/gateway/api/v1alpha1"
 	"github.com/envoyproxy/gateway/internal/envoygateway/config"
-	log "github.com/envoyproxy/gateway/internal/logging"
 	"github.com/envoyproxy/gateway/internal/metrics/restclient"
 	"github.com/envoyproxy/gateway/internal/metrics/workqueue"
 )
@@ -32,39 +31,61 @@ const (
 	defaultEndpoint = "/metrics"
 )
 
-var metricsLogger log.Logger
+type Runner struct {
+	cfg    *config.Server
+	server *http.Server
+}
 
-// Init initializes and registers the global metrics server.
-func Init(cfg *config.Server) error {
-	metricsLogger = cfg.Logger.WithName("metrics")
+func New(cfg *config.Server) *Runner {
+	return &Runner{
+		cfg: cfg,
+	}
+}
+
+func (r *Runner) Start(ctx context.Context) error {
+	metricsLogger := r.cfg.Logger.WithName("metrics")
 	otel.SetLogger(metricsLogger.Logger)
 
-	options, err := newOptions(cfg)
+	options, err := r.newOptions()
 	if err != nil {
 		return err
 	}
 
-	handler, err := registerForHandler(options)
+	handler, err := r.registerForHandler(options)
 	if err != nil {
 		return err
 	}
 
 	if !options.pullOptions.disable {
-		return start(options.address, handler)
+		return r.start(options.address, handler)
 	}
 
 	return nil
 }
 
-func start(address string, handler http.Handler) error {
+func (r *Runner) Name() string {
+	return "metrics"
+}
+
+func (r *Runner) Close() error {
+	if r.server != nil {
+		ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+		defer cancel()
+		return r.server.Shutdown(ctx)
+	}
+	return nil
+}
+
+func (r *Runner) start(address string, handler http.Handler) error {
 	handlers := http.NewServeMux()
 
+	metricsLogger := r.cfg.Logger.WithName("metrics")
 	metricsLogger.Info("starting metrics server", "address", address)
 	if handler != nil {
 		handlers.Handle(defaultEndpoint, handler)
 	}
 
-	metricsServer := &http.Server{
+	r.server = &http.Server{
 		Handler:           handlers,
 		Addr:              address,
 		ReadTimeout:       5 * time.Second,
@@ -75,7 +96,7 @@ func start(address string, handler http.Handler) error {
 
 	// Listen And Serve Metrics Server.
 	go func() {
-		if err := metricsServer.ListenAndServe(); err != nil {
+		if err := r.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
 			metricsLogger.Error(err, "start metrics server failed")
 		}
 	}()
@@ -83,11 +104,11 @@ func start(address string, handler http.Handler) error {
 	return nil
 }
 
-func newOptions(svr *config.Server) (registerOptions, error) {
+func (r *Runner) newOptions() (registerOptions, error) {
 	newOpts := registerOptions{}
 	newOpts.address = net.JoinHostPort(egv1a1.GatewayMetricsHost, fmt.Sprint(egv1a1.GatewayMetricsPort))
 
-	if svr.EnvoyGateway.DisablePrometheus() {
+	if r.cfg.EnvoyGateway.DisablePrometheus() {
 		newOpts.pullOptions.disable = true
 	} else {
 		newOpts.pullOptions.disable = false
@@ -101,7 +122,7 @@ func newOptions(svr *config.Server) (registerOptions, error) {
 		}
 	}
 
-	for _, config := range svr.EnvoyGateway.GetEnvoyGatewayTelemetry().Metrics.Sinks {
+	for _, config := range r.cfg.EnvoyGateway.GetEnvoyGatewayTelemetry().Metrics.Sinks {
 		sink := metricsSink{
 			host:     config.OpenTelemetry.Host,
 			port:     config.OpenTelemetry.Port,
@@ -113,6 +134,7 @@ func newOptions(svr *config.Server) (registerOptions, error) {
 		if config.OpenTelemetry.ExportInterval != nil && len(*config.OpenTelemetry.ExportInterval) != 0 {
 			interval, err := time.ParseDuration(string(*config.OpenTelemetry.ExportInterval))
 			if err != nil {
+				metricsLogger := r.cfg.Logger.WithName("metrics")
 				metricsLogger.Error(err, "failed to parse exporter interval time format")
 				return newOpts, err
 			}
@@ -122,6 +144,7 @@ func newOptions(svr *config.Server) (registerOptions, error) {
 		if config.OpenTelemetry.ExportTimeout != nil && len(*config.OpenTelemetry.ExportTimeout) != 0 {
 			timeout, err := time.ParseDuration(string(*config.OpenTelemetry.ExportTimeout))
 			if err != nil {
+				metricsLogger := r.cfg.Logger.WithName("metrics")
 				metricsLogger.Error(err, "failed to parse exporter timeout time format")
 				return newOpts, err
 			}
@@ -137,16 +160,16 @@ func newOptions(svr *config.Server) (registerOptions, error) {
 
 // registerForHandler sets the global metrics registry to the provided Prometheus registerer.
 // if enables prometheus, it will return a prom http handler.
-func registerForHandler(opts registerOptions) (http.Handler, error) {
+func (r *Runner) registerForHandler(opts registerOptions) (http.Handler, error) {
 	otelOpts := []metric.Option{}
 
-	if err := registerOTELPromExporter(&otelOpts, opts); err != nil {
+	if err := r.registerOTELPromExporter(&otelOpts, opts); err != nil {
 		return nil, err
 	}
-	if err := registerOTELHTTPexporter(&otelOpts, opts); err != nil {
+	if err := r.registerOTELHTTPexporter(&otelOpts, opts); err != nil {
 		return nil, err
 	}
-	if err := registerOTELgRPCexporter(&otelOpts, opts); err != nil {
+	if err := r.registerOTELgRPCexporter(&otelOpts, opts); err != nil {
 		return nil, err
 	}
 	otelOpts = append(otelOpts, stores.preAddOptions()...)
@@ -161,7 +184,7 @@ func registerForHandler(opts registerOptions) (http.Handler, error) {
 }
 
 // registerOTELPromExporter registers OTEL prometheus exporter (PULL mode).
-func registerOTELPromExporter(otelOpts *[]metric.Option, opts registerOptions) error {
+func (r *Runner) registerOTELPromExporter(otelOpts *[]metric.Option, opts registerOptions) error {
 	if !opts.pullOptions.disable {
 		promOpts := []otelprom.Option{
 			otelprom.WithoutScopeInfo(),
@@ -176,6 +199,7 @@ func registerOTELPromExporter(otelOpts *[]metric.Option, opts registerOptions) e
 		}
 
 		*otelOpts = append(*otelOpts, metric.WithReader(promreader))
+		metricsLogger := r.cfg.Logger.WithName("metrics")
 		metricsLogger.Info("initialized metrics pull endpoint", "address", opts.address, "endpoint", defaultEndpoint)
 	}
 
@@ -183,7 +207,7 @@ func registerOTELPromExporter(otelOpts *[]metric.Option, opts registerOptions) e
 }
 
 // registerOTELHTTPexporter registers OTEL HTTP metrics exporter (PUSH mode).
-func registerOTELHTTPexporter(otelOpts *[]metric.Option, opts registerOptions) error {
+func (r *Runner) registerOTELHTTPexporter(otelOpts *[]metric.Option, opts registerOptions) error {
 	for _, sink := range opts.pushOptions.sinks {
 		if sink.protocol == egv1a1.HTTPProtocol {
 			address := net.JoinHostPort(sink.host, fmt.Sprint(sink.port))
@@ -208,6 +232,7 @@ func registerOTELHTTPexporter(otelOpts *[]metric.Option, opts registerOptions) e
 
 			otelreader := metric.NewPeriodicReader(httpexporter, periodOpts...)
 			*otelOpts = append(*otelOpts, metric.WithReader(otelreader))
+			metricsLogger := r.cfg.Logger.WithName("metrics")
 			metricsLogger.Info("initialized otel http metrics push endpoint", "address", address)
 		}
 	}
@@ -216,7 +241,7 @@ func registerOTELHTTPexporter(otelOpts *[]metric.Option, opts registerOptions) e
 }
 
 // registerOTELgRPCexporter registers OTEL gRPC metrics exporter (PUSH mode).
-func registerOTELgRPCexporter(otelOpts *[]metric.Option, opts registerOptions) error {
+func (r *Runner) registerOTELgRPCexporter(otelOpts *[]metric.Option, opts registerOptions) error {
 	for _, sink := range opts.pushOptions.sinks {
 		if sink.protocol == egv1a1.GRPCProtocol {
 			address := net.JoinHostPort(sink.host, fmt.Sprint(sink.port))
@@ -241,6 +266,7 @@ func registerOTELgRPCexporter(otelOpts *[]metric.Option, opts registerOptions) e
 
 			otelreader := metric.NewPeriodicReader(httpexporter, periodOpts...)
 			*otelOpts = append(*otelOpts, metric.WithReader(otelreader))
+			metricsLogger := r.cfg.Logger.WithName("metrics")
 			metricsLogger.Info("initialized otel grpc metrics push endpoint", "address", address)
 		}
 	}
diff --git a/internal/provider/kubernetes/controller.go b/internal/provider/kubernetes/controller.go
index a4b809f68..4f8398120 100644
--- a/internal/provider/kubernetes/controller.go
+++ b/internal/provider/kubernetes/controller.go
@@ -245,14 +245,18 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 					return reconcile.Result{}, err
 				}
 
-				r.log.Error(err, fmt.Sprintf("failed processGatewayClassParamsRef for gatewayClass %s, skipping it", managedGC.Name))
+				r.log.Error(err, fmt.Sprintf("failed processGatewayClassParamsRef for gatewayClass %s", managedGC.Name))
 				msg := fmt.Sprintf("%s: %v", status.MsgGatewayClassInvalidParams, err)
 				gc := status.SetGatewayClassAccepted(
 					managedGC.DeepCopy(),
 					false,
 					string(gwapiv1.GatewayClassReasonInvalidParameters),
 					msg)
-				r.resources.GatewayClassStatuses.Store(utils.NamespacedName(gc), &gc.Status)
+				message.HandleStore(message.Metadata{
+					Runner:  string(egv1a1.LogComponentProviderRunner),
+					Message: message.GatewayClassStatusMessageName,
+				},
+					utils.NamespacedName(gc), &gc.Status, &r.resources.GatewayClassStatuses)
 				failToProcessGCParamsRef = true
 			}
 		}
@@ -264,13 +268,17 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 				return reconcile.Result{}, err
 			}
 
-			r.log.Error(err, fmt.Sprintf("failed process TLS SecretRef for EnvoyProxy for gatewayClass %s, skipping it", managedGC.Name))
+			r.log.Error(err, fmt.Sprintf("failed process TLS SecretRef for EnvoyProxy for gatewayClass %s", managedGC.Name))
 			gc := status.SetGatewayClassAccepted(
 				managedGC.DeepCopy(),
 				false,
 				string(gwapiv1.GatewayClassReasonAccepted),
 				fmt.Sprintf("%s: %v", status.MsgGatewayClassInvalidParams, err))
-			r.resources.GatewayClassStatuses.Store(utils.NamespacedName(gc), &gc.Status)
+			message.HandleStore(message.Metadata{
+				Runner:  string(egv1a1.LogComponentProviderRunner),
+				Message: message.GatewayClassStatusMessageName,
+			},
+				utils.NamespacedName(gc), &gc.Status, &r.resources.GatewayClassStatuses)
 			failToProcessGCParamsRef = true
 		}
 
@@ -293,7 +301,7 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 				r.log.Error(err, "transient error processing OIDC HMAC Secret", "gatewayClass", managedGC.Name)
 				return reconcile.Result{}, err
 			}
-			r.log.Error(err, fmt.Sprintf("failed processOIDCHMACSecret for gatewayClass %s, skipping it", managedGC.Name))
+			r.log.Error(err, fmt.Sprintf("failed processOIDCHMACSecret for gatewayClass %s", managedGC.Name))
 		}
 
 		// add the Envoy TLS Secret to the resourceTree
@@ -302,7 +310,7 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 				r.log.Error(err, "transient error processing Envoy TLS Secret", "gatewayClass", managedGC.Name)
 				return reconcile.Result{}, err
 			}
-			r.log.Error(err, fmt.Sprintf("failed processEnvoyTLSSecret for gatewayClass %s, skipping it", managedGC.Name))
+			r.log.Error(err, fmt.Sprintf("failed processEnvoyTLSSecret for gatewayClass %s", managedGC.Name))
 		}
 
 		// Add all Gateways, their associated Routes, and referenced resources to the resourceTree
@@ -311,7 +319,7 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 				r.log.Error(err, "transient error processing gateways", "gatewayClass", managedGC.Name)
 				return reconcile.Result{}, err
 			}
-			r.log.Error(err, fmt.Sprintf("failed processGateways for gatewayClass %s, skipping it", managedGC.Name))
+			r.log.Error(err, fmt.Sprintf("failed processGateways for gatewayClass %s", managedGC.Name))
 		}
 
 		if r.eppCRDExists {
@@ -321,7 +329,7 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 					r.log.Error(err, "transient error processing EnvoyPatchPolicies", "gatewayClass", managedGC.Name)
 					return reconcile.Result{}, err
 				}
-				r.log.Error(err, fmt.Sprintf("failed processEnvoyPatchPolicies for gatewayClass %s, skipping it", managedGC.Name))
+				r.log.Error(err, fmt.Sprintf("failed processEnvoyPatchPolicies for gatewayClass %s", managedGC.Name))
 			}
 		}
 
@@ -332,7 +340,7 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 					r.log.Error(err, "transient error processing ClientTrafficPolicies", "gatewayClass", managedGC.Name)
 					return reconcile.Result{}, err
 				}
-				r.log.Error(err, fmt.Sprintf("failed processClientTrafficPolicies for gatewayClass %s, skipping it", managedGC.Name))
+				r.log.Error(err, fmt.Sprintf("failed processClientTrafficPolicies for gatewayClass %s", managedGC.Name))
 			}
 		}
 
@@ -343,7 +351,7 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 					r.log.Error(err, "transient error processing BackendTrafficPolicies", "gatewayClass", managedGC.Name)
 					return reconcile.Result{}, err
 				}
-				r.log.Error(err, fmt.Sprintf("failed processBackendTrafficPolicies for gatewayClass %s, skipping it", managedGC.Name))
+				r.log.Error(err, fmt.Sprintf("failed processBackendTrafficPolicies for gatewayClass %s", managedGC.Name))
 			}
 		}
 
@@ -354,7 +362,7 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 					r.log.Error(err, "transient error processing SecurityPolicies", "gatewayClass", managedGC.Name)
 					return reconcile.Result{}, err
 				}
-				r.log.Error(err, fmt.Sprintf("failed processSecurityPolicies for gatewayClass %s, skipping it", managedGC.Name))
+				r.log.Error(err, fmt.Sprintf("failed processSecurityPolicies for gatewayClass %s", managedGC.Name))
 			}
 		}
 
@@ -365,7 +373,7 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 					r.log.Error(err, "transient error processing BackendTLSPolicies", "gatewayClass", managedGC.Name)
 					return reconcile.Result{}, err
 				}
-				r.log.Error(err, fmt.Sprintf("failed processBackendTLSPolicies for gatewayClass %s, skipping it", managedGC.Name))
+				r.log.Error(err, fmt.Sprintf("failed processBackendTLSPolicies for gatewayClass %s", managedGC.Name))
 			}
 		}
 
@@ -376,7 +384,7 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 					r.log.Error(err, "transient error processing EnvoyExtensionPolicies", "gatewayClass", managedGC.Name)
 					return reconcile.Result{}, err
 				}
-				r.log.Error(err, fmt.Sprintf("failed processEnvoyExtensionPolicies for gatewayClass %s, skipping it", managedGC.Name))
+				r.log.Error(err, fmt.Sprintf("failed processEnvoyExtensionPolicies for gatewayClass %s", managedGC.Name))
 			}
 		}
 
@@ -385,17 +393,7 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 				r.log.Error(err, "transient error processing ExtensionServerPolicies", "gatewayClass", managedGC.Name)
 				return reconcile.Result{}, err
 			}
-			r.log.Error(err, fmt.Sprintf("failed processExtensionServerPolicies for gatewayClass %s, skipping it", managedGC.Name))
-		}
-
-		if r.backendCRDExists {
-			if err = r.processBackends(ctx, gwcResource); err != nil {
-				if isTransientError(err) {
-					r.log.Error(err, "transient error processing Backends", "gatewayClass", managedGC.Name)
-					return reconcile.Result{}, err
-				}
-				r.log.Error(err, fmt.Sprintf("failed processBackends for gatewayClass %s, skipping it", managedGC.Name))
-			}
+			r.log.Error(err, fmt.Sprintf("failed processExtensionServerPolicies for gatewayClass %s", managedGC.Name))
 		}
 
 		// Add the referenced services, ServiceImports, and EndpointSlices in
@@ -407,7 +405,7 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 				return reconcile.Result{}, err
 			}
 
-			r.log.Error(err, fmt.Sprintf("failed  processBackendRefs for gatewayClass %s, skipping it", managedGC.Name))
+			r.log.Error(err, fmt.Sprintf("failed  processBackendRefs for gatewayClass %s", managedGC.Name))
 		}
 
 		// For this particular Gateway, and all associated objects, check whether the
@@ -466,7 +464,11 @@ func (r *gatewayAPIReconciler) Reconcile(ctx context.Context, _ reconcile.Reques
 	// The Store is triggered even when there are no Gateways associated to the
 	// GatewayClass. This would happen in case the last Gateway is removed and the
 	// Store will be required to trigger a cleanup of envoy infra resources.
-	r.resources.GatewayAPIResources.Store(string(r.classController), &gwcResources)
+	message.HandleStore(message.Metadata{
+		Runner:  string(egv1a1.LogComponentProviderRunner),
+		Message: message.ProviderResourcesMessageName,
+	},
+		string(r.classController), &gwcResources, &r.resources.GatewayAPIResources)
 
 	r.log.Info("reconciled gateways successfully")
 	return reconcile.Result{}, nil
@@ -576,13 +578,18 @@ func (r *gatewayAPIReconciler) processBackendRefs(ctx context.Context, gwcResour
 			endpointSliceLabelKey = mcsapiv1a1.LabelServiceName
 
 		case egv1a1.KindBackend:
+			if !r.backendCRDExists {
+				r.log.V(6).Info("skipping Backend processing as Backend CRD is not installed")
+				continue
+			}
 			backend := new(egv1a1.Backend)
 			err := r.client.Get(ctx, types.NamespacedName{Namespace: string(*backendRef.Namespace), Name: string(backendRef.Name)}, backend)
 			if err != nil {
 				if isTransientError(err) {
 					return err
 				}
-				r.log.Error(err, "failed to get Backend", "namespace", string(*backendRef.Namespace),
+				r.log.Error(err, "failed to get Backend",
+					"namespace", string(*backendRef.Namespace),
 					"name", string(backendRef.Name))
 			} else {
 				resourceMappings.allAssociatedNamespaces.Insert(backend.Namespace)
@@ -590,7 +597,8 @@ func (r *gatewayAPIReconciler) processBackendRefs(ctx context.Context, gwcResour
 				if !resourceMappings.allAssociatedBackends.Has(key) {
 					resourceMappings.allAssociatedBackends.Insert(key)
 					gwcResource.Backends = append(gwcResource.Backends, backend)
-					r.log.Info("added Backend to resource tree", "namespace", string(*backendRef.Namespace),
+					r.log.Info("added Backend to resource tree",
+						"namespace", string(*backendRef.Namespace),
 						"name", string(backendRef.Name))
 				}
 			}
@@ -702,7 +710,8 @@ func (r *gatewayAPIReconciler) processBackendRefs(ctx context.Context, gwcResour
 
 // processSecurityPolicyObjectRefs adds the referenced resources in SecurityPolicies
 // to the resourceTree
-// - Secrets for OIDC and BasicAuth
+// - BackendRefs and Secrets for OIDC
+// - Secrets for BasicAuth
 // - BackendRefs for ExAuth
 func (r *gatewayAPIReconciler) processSecurityPolicyObjectRefs(
 	ctx context.Context, resourceTree *resource.Resources, resourceMap *resourceMappings,
@@ -735,6 +744,24 @@ func (r *gatewayAPIReconciler) processSecurityPolicyObjectRefs(
 					"failed to process OIDC SecretRef for SecurityPolicy",
 					"policy", policy, "secretRef", oidc.ClientSecret)
 			}
+
+			var backendRefs []gwapiv1.BackendObjectReference
+			if oidc.Provider.BackendRef != nil {
+				backendRefs = append(backendRefs, *oidc.Provider.BackendRef)
+			}
+			if len(oidc.Provider.BackendRefs) > 0 {
+				backendRefs = append(backendRefs, oidc.Provider.BackendRefs[0].BackendObjectReference)
+			}
+
+			for _, backendRef := range backendRefs {
+				if err := r.processBackendRef(
+					ctx, resourceMap, resourceTree,
+					resource.KindSecurityPolicy, policy.Namespace, policy.Name,
+					backendRef); err != nil {
+					r.log.Error(err, "failed to process OIDC BackendRef for SecurityPolicy",
+						"policy", policy, "backendRef", backendRef)
+				}
+			}
 		}
 
 		// Add the referenced Secretes in APIKeyAuth to the resourceTree.
@@ -1473,24 +1500,7 @@ func (r *gatewayAPIReconciler) processBackendTLSPolicies(
 	return r.processBackendTLSPolicyRefs(ctx, resourceTree, resourceMap)
 }
 
-// processBackends adds Backends to the resourceTree
-func (r *gatewayAPIReconciler) processBackends(ctx context.Context, resourceTree *resource.Resources) error {
-	backends := egv1a1.BackendList{}
-	if err := r.client.List(ctx, &backends); err != nil {
-		return fmt.Errorf("error listing Backends: %w", err)
-	}
-
-	for _, backend := range backends.Items {
-		backend := backend //nolint:copyloopvar
-		// Discard Status to reduce memory consumption in watchable
-		// It will be recomputed by the gateway-api layer
-		backend.Status = egv1a1.BackendStatus{}
-		resourceTree.Backends = append(resourceTree.Backends, &backend)
-	}
-	return nil
-}
-
-// removeFinalizer removes the gatewayclass finalizer from the provided gc, if it exists.
+// removeFinalizer removes the GatewayClass finalizer from the provided gc, if it exists.
 func (r *gatewayAPIReconciler) removeFinalizer(ctx context.Context, gc *gwapiv1.GatewayClass) error {
 	if slice.ContainsString(gc.Finalizers, gatewayClassFinalizer) {
 		base := client.MergeFrom(gc.DeepCopy())
diff --git a/internal/provider/kubernetes/controller_offline.go b/internal/provider/kubernetes/controller_offline.go
index 9a55f8a31..f7a76c248 100644
--- a/internal/provider/kubernetes/controller_offline.go
+++ b/internal/provider/kubernetes/controller_offline.go
@@ -89,9 +89,7 @@ func NewOfflineGatewayAPIController(
 		tcpRouteCRDExists:      true,
 		tlsRouteCRDExists:      true,
 		udpRouteCRDExists:      true,
-		// TODO: enable this for consistency after the foundamental fix is available https://github.com/envoyproxy/gateway/pull/6021.
-		// In practice, this won't affect any user-facing reconciliation logic for now but it might in the future.
-		backendCRDExists: false,
+		backendCRDExists:       true,
 	}
 
 	r.log.Info("created offline gatewayapi controller")
diff --git a/internal/provider/kubernetes/status.go b/internal/provider/kubernetes/status.go
index 5712f9aa7..828928876 100644
--- a/internal/provider/kubernetes/status.go
+++ b/internal/provider/kubernetes/status.go
@@ -30,7 +30,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// GatewayClass object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "gatewayclass-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.GatewayClassStatusMessageName},
 			r.resources.GatewayClassStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1.GatewayClassStatus], errChan chan error) {
 				// skip delete updates.
@@ -59,7 +59,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// Gateway object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "gateway-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.GatewayStatusMessageName},
 			r.resources.GatewayStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1.GatewayStatus], errChan chan error) {
 				// skip delete updates.
@@ -84,7 +84,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// HTTPRoute object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "httproute-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.HTTPRouteStatusMessageName},
 			r.resources.HTTPRouteStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1.HTTPRouteStatus], errChan chan error) {
 				// skip delete updates.
@@ -115,7 +115,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 
 	// GRPCRoute object status updater
 	go func() {
-		message.HandleSubscription(message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "grpcroute-status"}, r.resources.GRPCRouteStatuses.Subscribe(ctx),
+		message.HandleSubscription(message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.GRPCRouteStatusMessageName}, r.resources.GRPCRouteStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1.GRPCRouteStatus], errChan chan error) {
 				// skip delete updates.
 				if update.Delete {
@@ -146,7 +146,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// TLSRoute object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "tlsroute-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.TLSRouteStatusMessageName},
 			r.resources.TLSRouteStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1a2.TLSRouteStatus], errChan chan error) {
 				// skip delete updates.
@@ -178,7 +178,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// TCPRoute object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "tcproute-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.TCPRouteStatusMessageName},
 			r.resources.TCPRouteStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1a2.TCPRouteStatus], errChan chan error) {
 				// skip delete updates.
@@ -210,7 +210,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// UDPRoute object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "udproute-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.UDPRouteStatusMessageName},
 			r.resources.UDPRouteStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1a2.UDPRouteStatus], errChan chan error) {
 				// skip delete updates.
@@ -242,7 +242,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// EnvoyPatchPolicy object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "envoypatchpolicy-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.EnvoyPatchPolicyStatusMessageName},
 			r.resources.EnvoyPatchPolicyStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1a2.PolicyStatus], errChan chan error) {
 				// skip delete updates.
@@ -274,7 +274,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// ClientTrafficPolicy object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "clienttrafficpolicy-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.ClientTrafficPolicyStatusMessageName},
 			r.resources.ClientTrafficPolicyStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1a2.PolicyStatus], errChan chan error) {
 				// skip delete updates.
@@ -306,7 +306,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// BackendTrafficPolicy object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "backendtrafficpolicy-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.BackendTrafficPolicyStatusMessageName},
 			r.resources.BackendTrafficPolicyStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1a2.PolicyStatus], errChan chan error) {
 				// skip delete updates.
@@ -338,7 +338,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// SecurityPolicy object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "securitypolicy-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.SecurityPolicyStatusMessageName},
 			r.resources.SecurityPolicyStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1a2.PolicyStatus], errChan chan error) {
 				// skip delete updates.
@@ -369,7 +369,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 
 	// BackendTLSPolicy object status updater
 	go func() {
-		message.HandleSubscription(message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "backendtlspolicy-status"}, r.resources.BackendTLSPolicyStatuses.Subscribe(ctx),
+		message.HandleSubscription(message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.BackendTLSPolicyStatusMessageName}, r.resources.BackendTLSPolicyStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1a2.PolicyStatus], errChan chan error) {
 				// skip delete updates.
 				if update.Delete {
@@ -400,7 +400,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// EnvoyExtensionPolicy object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "envoyextensionpolicy-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.EnvoyExtensionPolicyStatusMessageName},
 			r.resources.EnvoyExtensionPolicyStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *gwapiv1a2.PolicyStatus], errChan chan error) {
 				// skip delete updates.
@@ -432,7 +432,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 	// Backend object status updater
 	go func() {
 		message.HandleSubscription(
-			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "backend-status"},
+			message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.BackendStatusMessageName},
 			r.resources.BackendStatuses.Subscribe(ctx),
 			func(update message.Update[types.NamespacedName, *egv1a1.BackendStatus], errChan chan error) {
 				// skip delete updates.
@@ -465,7 +465,7 @@ func (r *gatewayAPIReconciler) subscribeAndUpdateStatus(ctx context.Context, ext
 		// ExtensionServerPolicy object status updater
 		go func() {
 			message.HandleSubscription(
-				message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: "extensionserverpolicies-status"},
+				message.Metadata{Runner: string(egv1a1.LogComponentProviderRunner), Message: message.ExtensionServerPoliciesStatusMessageName},
 				r.resources.ExtensionPolicyStatuses.Subscribe(ctx),
 				func(update message.Update[message.NamespacedNameAndGVK, *gwapiv1a2.PolicyStatus], errChan chan error) {
 					// skip delete updates.
@@ -576,7 +576,7 @@ func (r *gatewayAPIReconciler) updateStatusForGateway(ctx context.Context, gtw *
 		// to true in the Gateway API translator
 		status.UpdateGatewayStatusAccepted(gtw)
 		// update address field and programmed condition
-		status.UpdateGatewayStatusProgrammedCondition(gtw, svc, envoyObj, r.store.listNodeAddresses()...)
+		status.UpdateGatewayStatusProgrammedCondition(gtw, svc, envoyObj, r.store.listNodeAddresses())
 	}
 
 	key := utils.NamespacedName(gtw)
diff --git a/internal/provider/kubernetes/store.go b/internal/provider/kubernetes/store.go
index eeb63a1da..c9da30903 100644
--- a/internal/provider/kubernetes/store.go
+++ b/internal/provider/kubernetes/store.go
@@ -6,14 +6,17 @@
 package kubernetes
 
 import (
+	"net"
 	"sync"
 
 	corev1 "k8s.io/api/core/v1"
+
+	"github.com/envoyproxy/gateway/internal/gatewayapi/status"
 )
 
 type nodeDetails struct {
-	name    string
-	address string
+	name      string
+	addresses status.NodeAddresses
 }
 
 // kubernetesProviderStore holds cached information for the kubernetes provider.
@@ -34,23 +37,31 @@ func newProviderStore() *kubernetesProviderStore {
 func (p *kubernetesProviderStore) addNode(n *corev1.Node) {
 	details := nodeDetails{name: n.Name}
 
-	var internalIP, externalIP string
+	var internalIPs, externalIPs status.NodeAddresses
 	for _, addr := range n.Status.Addresses {
-		if addr.Type == corev1.NodeExternalIP {
-			externalIP = addr.Address
+		var addrs *status.NodeAddresses
+		switch addr.Type {
+		case corev1.NodeExternalIP:
+			addrs = &externalIPs
+		case corev1.NodeInternalIP:
+			addrs = &internalIPs
+		default:
+			continue
 		}
-		if addr.Type == corev1.NodeInternalIP {
-			internalIP = addr.Address
+		if net.ParseIP(addr.Address).To4() != nil {
+			addrs.IPv4 = append(addrs.IPv4, addr.Address)
+		} else {
+			addrs.IPv6 = append(addrs.IPv6, addr.Address)
 		}
 	}
 
 	// In certain scenarios (like in local KinD clusters), the Node
 	// externalIP is not provided, in that case we default back
 	// to the internalIP of the Node.
-	if externalIP != "" {
-		details.address = externalIP
-	} else if internalIP != "" {
-		details.address = internalIP
+	if len(externalIPs.IPv4) > 0 || len(externalIPs.IPv6) > 0 {
+		details.addresses = externalIPs
+	} else if len(internalIPs.IPv4) > 0 || len(internalIPs.IPv6) > 0 {
+		details.addresses = internalIPs
 	}
 	p.mu.Lock()
 	defer p.mu.Unlock()
@@ -63,14 +74,13 @@ func (p *kubernetesProviderStore) removeNode(n *corev1.Node) {
 	delete(p.nodes, n.Name)
 }
 
-func (p *kubernetesProviderStore) listNodeAddresses() []string {
-	addrs := []string{}
+func (p *kubernetesProviderStore) listNodeAddresses() status.NodeAddresses {
 	p.mu.Lock()
 	defer p.mu.Unlock()
+	addrs := status.NodeAddresses{}
 	for _, n := range p.nodes {
-		if n.address != "" {
-			addrs = append(addrs, n.address)
-		}
+		addrs.IPv4 = append(addrs.IPv4, n.addresses.IPv4...)
+		addrs.IPv6 = append(addrs.IPv6, n.addresses.IPv6...)
 	}
 	return addrs
 }
diff --git a/internal/xds/server/runner/runner.go b/internal/xds/server/runner/runner.go
index f610935b5..df47b9951 100644
--- a/internal/xds/server/runner/runner.go
+++ b/internal/xds/server/runner/runner.go
@@ -187,7 +187,7 @@ func registerServer(srv serverv3.Server, g *grpc.Server) {
 }
 
 func (r *Runner) subscribeAndTranslate(sub <-chan watchable.Snapshot[string, *xdstypes.ResourceVersionTable]) {
-	message.HandleSubscription(message.Metadata{Runner: string(egv1a1.LogComponentXdsServerRunner), Message: "xds"}, sub,
+	message.HandleSubscription(message.Metadata{Runner: r.Name(), Message: message.XDSMessageName}, sub,
 		func(update message.Update[string, *xdstypes.ResourceVersionTable], errChan chan error) {
 			key := update.Key
 			val := update.Value
diff --git a/internal/xds/translator/cluster.go b/internal/xds/translator/cluster.go
index 277466f13..1166229e8 100644
--- a/internal/xds/translator/cluster.go
+++ b/internal/xds/translator/cluster.go
@@ -19,6 +19,7 @@ import (
 	codecv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/upstream_codec/v3"
 	hcmv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/network/http_connection_manager/v3"
 	preservecasev3 "github.com/envoyproxy/go-control-plane/envoy/extensions/http/header_formatters/preserve_case/v3"
+	cluster_providedv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/cluster_provided/v3"
 	commonv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/common/v3"
 	least_requestv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/least_request/v3"
 	maglevv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/maglev/v3"
@@ -144,15 +145,14 @@ func buildXdsCluster(args *xdsClusterArgs) (*buildClusterResult, error) {
 	}
 
 	cluster := &clusterv3.Cluster{
-		Name:            args.name,
-		DnsLookupFamily: dnsLookupFamily,
-		CommonLbConfig: &clusterv3.Cluster_CommonLbConfig{
-			LocalityConfigSpecifier: &clusterv3.Cluster_CommonLbConfig_LocalityWeightedLbConfig_{
-				LocalityWeightedLbConfig: &clusterv3.Cluster_CommonLbConfig_LocalityWeightedLbConfig{},
-			},
-		},
+		Name:                          args.name,
+		DnsLookupFamily:               dnsLookupFamily,
+		CommonLbConfig:                &clusterv3.Cluster_CommonLbConfig{},
 		PerConnectionBufferLimitBytes: buildBackandConnectionBufferLimitBytes(args.backendConnection),
 		Metadata:                      buildXdsMetadata(args.metadata),
+		// Dont wait for a health check to determine health and remove these endpoints
+		// if the endpoint has been removed via EDS by the control plane or removed from DNS query results
+		IgnoreHealthOnHostRemoval: true,
 	}
 
 	if args.statName != nil {
@@ -228,45 +228,125 @@ func buildXdsCluster(args *xdsClusterArgs) (*buildClusterResult, error) {
 		cluster.TypedExtensionProtocolOptions = epo
 	}
 
+	// Set default localityLbConfig
+	localityLbConfig := &commonv3.LocalityLbConfig{
+		LocalityConfigSpecifier: &commonv3.LocalityLbConfig_LocalityWeightedLbConfig_{
+			LocalityWeightedLbConfig: &commonv3.LocalityLbConfig_LocalityWeightedLbConfig{},
+		},
+	}
+
+	// Override LocalityWeightedLbConfig if zone aware routing is enabled.
+	// Zone aware enabled backendRefs always have a single DestinationSetting per-cluster.
+	if len(args.settings) == 1 && args.settings[0].ZoneAwareRouting != nil {
+		localityLbConfig.LocalityConfigSpecifier = &commonv3.LocalityLbConfig_ZoneAwareLbConfig_{
+			ZoneAwareLbConfig: &commonv3.LocalityLbConfig_ZoneAwareLbConfig{
+				MinClusterSize: wrapperspb.UInt64(1),
+				ForceLocalZone: &commonv3.LocalityLbConfig_ZoneAwareLbConfig_ForceLocalZone{
+					MinSize: wrapperspb.UInt32(uint32(args.settings[0].ZoneAwareRouting.MinSize)),
+				},
+			},
+		}
+	}
+
 	// Set Load Balancer policy
 	//nolint:gocritic
 	switch {
 	case args.loadBalancer == nil:
 		cluster.LbPolicy = clusterv3.Cluster_LEAST_REQUEST
+		leastRequest := &least_requestv3.LeastRequest{
+			LocalityLbConfig: localityLbConfig,
+		}
+		typedLeastRequest, err := proto.ToAnyWithValidation(leastRequest)
+		if err != nil {
+			return nil, err
+		}
+		cluster.LoadBalancingPolicy = &clusterv3.LoadBalancingPolicy{
+			Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
+				TypedExtensionConfig: &corev3.TypedExtensionConfig{
+					Name:        "envoy.load_balancing_policies.least_request",
+					TypedConfig: typedLeastRequest,
+				},
+			}},
+		}
 	case args.loadBalancer.LeastRequest != nil:
 		cluster.LbPolicy = clusterv3.Cluster_LEAST_REQUEST
-		if args.loadBalancer.LeastRequest.SlowStart != nil {
-			if args.loadBalancer.LeastRequest.SlowStart.Window != nil {
-				cluster.LbConfig = &clusterv3.Cluster_LeastRequestLbConfig_{
-					LeastRequestLbConfig: &clusterv3.Cluster_LeastRequestLbConfig{
-						SlowStartConfig: &clusterv3.Cluster_SlowStartConfig{
-							SlowStartWindow: durationpb.New(args.loadBalancer.LeastRequest.SlowStart.Window.Duration),
-						},
-					},
-				}
+
+		leastRequest := &least_requestv3.LeastRequest{
+			LocalityLbConfig: localityLbConfig,
+		}
+		if args.loadBalancer.LeastRequest.SlowStart != nil && args.loadBalancer.LeastRequest.SlowStart.Window != nil {
+			leastRequest.SlowStartConfig = &commonv3.SlowStartConfig{
+				SlowStartWindow: durationpb.New(args.loadBalancer.LeastRequest.SlowStart.Window.Duration),
 			}
 		}
+		typedLeastRequest, err := proto.ToAnyWithValidation(leastRequest)
+		if err != nil {
+			return nil, err
+		}
+		cluster.LoadBalancingPolicy = &clusterv3.LoadBalancingPolicy{
+			Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
+				TypedExtensionConfig: &corev3.TypedExtensionConfig{
+					Name:        "envoy.load_balancing_policies.least_request",
+					TypedConfig: typedLeastRequest,
+				},
+			}},
+		}
 	case args.loadBalancer.RoundRobin != nil:
 		cluster.LbPolicy = clusterv3.Cluster_ROUND_ROBIN
+		roundRobin := &round_robinv3.RoundRobin{
+			LocalityLbConfig: localityLbConfig,
+		}
 		if args.loadBalancer.RoundRobin.SlowStart != nil && args.loadBalancer.RoundRobin.SlowStart.Window != nil {
-			cluster.LbConfig = &clusterv3.Cluster_RoundRobinLbConfig_{
-				RoundRobinLbConfig: &clusterv3.Cluster_RoundRobinLbConfig{
-					SlowStartConfig: &clusterv3.Cluster_SlowStartConfig{
-						SlowStartWindow: durationpb.New(args.loadBalancer.RoundRobin.SlowStart.Window.Duration),
-					},
-				},
+			roundRobin.SlowStartConfig = &commonv3.SlowStartConfig{
+				SlowStartWindow: durationpb.New(args.loadBalancer.RoundRobin.SlowStart.Window.Duration),
 			}
 		}
+		typedRoundRobin, err := proto.ToAnyWithValidation(roundRobin)
+		if err != nil {
+			return nil, err
+		}
+		cluster.LoadBalancingPolicy = &clusterv3.LoadBalancingPolicy{
+			Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
+				TypedExtensionConfig: &corev3.TypedExtensionConfig{
+					Name:        "envoy.load_balancing_policies.round_robin",
+					TypedConfig: typedRoundRobin,
+				},
+			}},
+		}
 	case args.loadBalancer.Random != nil:
 		cluster.LbPolicy = clusterv3.Cluster_RANDOM
+		random := &randomv3.Random{
+			LocalityLbConfig: localityLbConfig,
+		}
+		typeRandom, err := proto.ToAnyWithValidation(random)
+		if err != nil {
+			return nil, err
+		}
+		cluster.LoadBalancingPolicy = &clusterv3.LoadBalancingPolicy{
+			Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
+				TypedExtensionConfig: &corev3.TypedExtensionConfig{
+					Name:        "envoy.load_balancing_policies.random",
+					TypedConfig: typeRandom,
+				},
+			}},
+		}
 	case args.loadBalancer.ConsistentHash != nil:
 		cluster.LbPolicy = clusterv3.Cluster_MAGLEV
+		consistentHash := &maglevv3.Maglev{}
 		if args.loadBalancer.ConsistentHash.TableSize != nil {
-			cluster.LbConfig = &clusterv3.Cluster_MaglevLbConfig_{
-				MaglevLbConfig: &clusterv3.Cluster_MaglevLbConfig{
-					TableSize: &wrapperspb.UInt64Value{Value: *args.loadBalancer.ConsistentHash.TableSize},
+			consistentHash.TableSize = wrapperspb.UInt64(*args.loadBalancer.ConsistentHash.TableSize)
+		}
+		typedConsistentHash, err := proto.ToAnyWithValidation(consistentHash)
+		if err != nil {
+			return nil, err
+		}
+		cluster.LoadBalancingPolicy = &clusterv3.LoadBalancingPolicy{
+			Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
+				TypedExtensionConfig: &corev3.TypedExtensionConfig{
+					Name:        "envoy.load_balancing_policies.maglev",
+					TypedConfig: typedConsistentHash,
 				},
-			}
+			}},
 		}
 	}
 
@@ -313,7 +393,19 @@ func buildXdsCluster(args *xdsClusterArgs) (*buildClusterResult, error) {
 			TypedConfig: dfpAny,
 		}}
 		cluster.LbPolicy = clusterv3.Cluster_CLUSTER_PROVIDED
-
+		clusterProvided := &cluster_providedv3.ClusterProvided{}
+		typedClusterProvided, err := proto.ToAnyWithValidation(clusterProvided)
+		if err != nil {
+			return nil, err
+		}
+		cluster.LoadBalancingPolicy = &clusterv3.LoadBalancingPolicy{
+			Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
+				TypedExtensionConfig: &corev3.TypedExtensionConfig{
+					Name:        "envoy.load_balancing_policies.cluster_provided",
+					TypedConfig: typedClusterProvided,
+				},
+			}},
+		}
 	case EndpointTypeStatic:
 		cluster.ClusterDiscoveryType = &clusterv3.Cluster_Type{Type: clusterv3.Cluster_EDS}
 		cluster.EdsClusterConfig = &clusterv3.Cluster_EdsClusterConfig{
@@ -325,9 +417,6 @@ func buildXdsCluster(args *xdsClusterArgs) (*buildClusterResult, error) {
 				},
 			},
 		}
-		// Dont wait for a health check to determine health and remove these endpoints
-		// if the endpoint has been removed via EDS by the control plane
-		cluster.IgnoreHealthOnHostRemoval = true
 	default:
 		cluster.ClusterDiscoveryType = &clusterv3.Cluster_Type{Type: clusterv3.Cluster_STRICT_DNS}
 		cluster.DnsRefreshRate = durationpb.New(30 * time.Second)
@@ -344,114 +433,12 @@ func buildXdsCluster(args *xdsClusterArgs) (*buildClusterResult, error) {
 		}
 	}
 
-	if args.endpointType != EndpointTypeDynamicResolver {
-		for _, ds := range args.settings {
-			buildZoneAwareRoutingCluster(ds.ZoneAwareRouting, cluster, args.loadBalancer)
-		}
-	}
-
 	return &buildClusterResult{
 		cluster: cluster,
 		secrets: secrets,
 	}, nil
 }
 
-// buildZoneAwareRoutingCluster configures an xds cluster with Zone Aware Routing configuration. It overrides
-// cluster.LbPolicy and cluster.CommonLbConfig with cluster.LoadBalancingPolicy.
-// TODO: Remove cluster.LbPolicy along with clustercommongLbConfig and switch to cluster.LoadBalancingPolicy
-// everywhere as the preferred and more feature-rich configuration field.
-func buildZoneAwareRoutingCluster(cfg *ir.ZoneAwareRouting, cluster *clusterv3.Cluster, lb *ir.LoadBalancer) {
-	if cfg == nil {
-		return
-	}
-
-	// Remove CommonLbConfig.LocalityConfigSpecifier and instead configure via cluster.LoadBalancingPolicy
-	cluster.CommonLbConfig.LocalityConfigSpecifier = nil
-
-	localityLbConfig := &commonv3.LocalityLbConfig{
-		LocalityConfigSpecifier: &commonv3.LocalityLbConfig_ZoneAwareLbConfig_{
-			ZoneAwareLbConfig: &commonv3.LocalityLbConfig_ZoneAwareLbConfig{
-				MinClusterSize: wrapperspb.UInt64(1),
-				ForceLocalZone: &commonv3.LocalityLbConfig_ZoneAwareLbConfig_ForceLocalZone{
-					MinSize: wrapperspb.UInt32(uint32(cfg.MinSize)),
-				},
-			},
-		},
-	}
-
-	// Default to least request LoadBalancingPolicy
-	leastRequest := &least_requestv3.LeastRequest{
-		LocalityLbConfig: localityLbConfig,
-	}
-	typedLeastRequest, _ := anypb.New(leastRequest)
-	cluster.LoadBalancingPolicy = &clusterv3.LoadBalancingPolicy{
-		Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
-			TypedExtensionConfig: &corev3.TypedExtensionConfig{
-				Name:        "envoy.load_balancing_policies.least_request",
-				TypedConfig: typedLeastRequest,
-			},
-		}},
-	}
-
-	if lb != nil {
-		switch cluster.LbPolicy {
-		case clusterv3.Cluster_LEAST_REQUEST:
-			if lb.LeastRequest != nil && lb.LeastRequest.SlowStart != nil && lb.LeastRequest.SlowStart.Window != nil {
-				leastRequest.SlowStartConfig = &commonv3.SlowStartConfig{
-					SlowStartWindow: durationpb.New(lb.LeastRequest.SlowStart.Window.Duration),
-				}
-			}
-			cluster.LoadBalancingPolicy.Policies[0].TypedExtensionConfig.TypedConfig, _ = anypb.New(leastRequest)
-		case clusterv3.Cluster_ROUND_ROBIN:
-			roundRobin := &round_robinv3.RoundRobin{
-				LocalityLbConfig: localityLbConfig,
-			}
-			if lb.RoundRobin.SlowStart != nil && lb.RoundRobin.SlowStart.Window != nil {
-				roundRobin.SlowStartConfig = &commonv3.SlowStartConfig{
-					SlowStartWindow: durationpb.New(lb.RoundRobin.SlowStart.Window.Duration),
-				}
-			}
-			typedRoundRobin, _ := anypb.New(roundRobin)
-			cluster.LoadBalancingPolicy = &clusterv3.LoadBalancingPolicy{
-				Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
-					TypedExtensionConfig: &corev3.TypedExtensionConfig{
-						Name:        "envoy.load_balancing_policies.round_robin",
-						TypedConfig: typedRoundRobin,
-					},
-				}},
-			}
-
-		case clusterv3.Cluster_RANDOM:
-			random := &randomv3.Random{
-				LocalityLbConfig: localityLbConfig,
-			}
-			typeRandom, _ := anypb.New(random)
-			cluster.LoadBalancingPolicy = &clusterv3.LoadBalancingPolicy{
-				Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
-					TypedExtensionConfig: &corev3.TypedExtensionConfig{
-						Name:        "envoy.load_balancing_policies.random",
-						TypedConfig: typeRandom,
-					},
-				}},
-			}
-		case clusterv3.Cluster_MAGLEV:
-			consistentHash := &maglevv3.Maglev{}
-			if lb.ConsistentHash.TableSize != nil {
-				consistentHash.TableSize = wrapperspb.UInt64(*lb.ConsistentHash.TableSize)
-			}
-			typedConsistentHash, _ := anypb.New(consistentHash)
-			cluster.LoadBalancingPolicy = &clusterv3.LoadBalancingPolicy{
-				Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
-					TypedExtensionConfig: &corev3.TypedExtensionConfig{
-						Name:        "envoy.load_balancing_policies.maglev",
-						TypedConfig: typedConsistentHash,
-					},
-				}},
-			}
-		}
-	}
-}
-
 func buildXdsHealthCheck(healthcheck *ir.ActiveHealthCheck) []*corev3.HealthCheck {
 	hc := &corev3.HealthCheck{
 		Timeout:  durationpb.New(healthcheck.Timeout.Duration),
@@ -679,7 +666,8 @@ func buildZonalLocalities(metadata *corev3.Metadata, ds *ir.DestinationSetting)
 			Metadata: metadata,
 			HostIdentifier: &endpointv3.LbEndpoint_Endpoint{
 				Endpoint: &endpointv3.Endpoint{
-					Address: buildAddress(irEp),
+					Hostname: ptr.Deref(irEp.Hostname, ""),
+					Address:  buildAddress(irEp),
 				},
 			},
 			LoadBalancingWeight: wrapperspb.UInt32(1),
@@ -721,7 +709,8 @@ func buildWeightedLocalities(metadata *corev3.Metadata, ds *ir.DestinationSettin
 			Metadata: metadata,
 			HostIdentifier: &endpointv3.LbEndpoint_Endpoint{
 				Endpoint: &endpointv3.Endpoint{
-					Address: buildAddress(irEp),
+					Hostname: ptr.Deref(irEp.Hostname, ""),
+					Address:  buildAddress(irEp),
 				},
 			},
 			HealthStatus: healthStatus,
diff --git a/internal/xds/translator/extension.go b/internal/xds/translator/extension.go
index 82bcaba80..00d8d51f2 100644
--- a/internal/xds/translator/extension.go
+++ b/internal/xds/translator/extension.go
@@ -180,7 +180,7 @@ func processExtensionPostTranslationHook(tCtx *types.ResourceVersionTable, em *e
 	if em == nil {
 		return nil
 	}
-	// If there is a loaded extension that wants to inject clusters/secrets, then call it
+	// If there is a loaded extension that wants to inject clusters/secrets/listeners/routes, then call it
 	// while clusters can by statically added with bootstrap configuration, an extension may need to add clusters with a configuration
 	// that is non-static. If a cluster definition is unlikely to change over the course of an extension's lifetime then the custom bootstrap config
 	// is the preferred way of adding it.
@@ -193,35 +193,88 @@ func processExtensionPostTranslationHook(tCtx *types.ResourceVersionTable, em *e
 		return nil
 	}
 
-	clusters := tCtx.XdsResources[resourcev3.ClusterType]
-	oldClusters := make([]*clusterv3.Cluster, len(clusters))
-	for idx, cluster := range clusters {
-		oldClusters[idx] = cluster.(*clusterv3.Cluster)
-	}
+	// Get translation configuration and determine which resources to include
+	translationConfig := extManager.GetTranslationHookConfig()
+
+	// Determine which resources to include based on configuration
+	includeClusters := translationConfig.ShouldIncludeClusters()
+	includeSecrets := translationConfig.ShouldIncludeSecrets()
+	includeListeners := translationConfig.ShouldIncludeListeners()
+	includeRoutes := translationConfig.ShouldIncludeRoutes()
+
+	// Prepare resources based on configuration
+	var oldClusters []*clusterv3.Cluster
+	var oldSecrets []*tlsv3.Secret
+	var oldListeners []*listenerv3.Listener
+	var oldRoutes []*routev3.RouteConfiguration
 
-	secrets := tCtx.XdsResources[resourcev3.SecretType]
-	oldSecrets := make([]*tlsv3.Secret, len(secrets))
-	for idx, secret := range secrets {
-		oldSecrets[idx] = secret.(*tlsv3.Secret)
+	if includeClusters {
+		clusters := tCtx.XdsResources[resourcev3.ClusterType]
+		oldClusters = make([]*clusterv3.Cluster, len(clusters))
+		for idx, cluster := range clusters {
+			oldClusters[idx] = cluster.(*clusterv3.Cluster)
+		}
+	}
+	if includeSecrets {
+		secrets := tCtx.XdsResources[resourcev3.SecretType]
+		oldSecrets = make([]*tlsv3.Secret, len(secrets))
+		for idx, secret := range secrets {
+			oldSecrets[idx] = secret.(*tlsv3.Secret)
+		}
+	}
+	if includeListeners {
+		listeners := tCtx.XdsResources[resourcev3.ListenerType]
+		oldListeners = make([]*listenerv3.Listener, len(listeners))
+		for idx, listener := range listeners {
+			oldListeners[idx] = listener.(*listenerv3.Listener)
+		}
+	}
+	if includeRoutes {
+		routes := tCtx.XdsResources[resourcev3.RouteType]
+		oldRoutes = make([]*routev3.RouteConfiguration, len(routes))
+		for idx, route := range routes {
+			oldRoutes[idx] = route.(*routev3.RouteConfiguration)
+		}
 	}
 
-	newClusters, newSecrets, err := extensionInsertHookClient.PostTranslateModifyHook(oldClusters, oldSecrets, policies)
+	// Call the extension hook
+	newClusters, newSecrets, newListeners, newRoutes, err := extensionInsertHookClient.PostTranslateModifyHook(oldClusters, oldSecrets, oldListeners, oldRoutes, policies)
 	if err != nil {
 		return err
 	}
 
-	clusterResources := make([]resourceTypes.Resource, len(newClusters))
-	for idx, cluster := range newClusters {
-		clusterResources[idx] = cluster
+	// Update the resource table with the new resources
+	if includeListeners {
+		listenerResources := make([]resourceTypes.Resource, len(newListeners))
+		for idx, listener := range newListeners {
+			listenerResources[idx] = listener
+		}
+		tCtx.SetResources(resourcev3.ListenerType, listenerResources)
+	}
+
+	if includeRoutes {
+		routeResources := make([]resourceTypes.Resource, len(newRoutes))
+		for idx, route := range newRoutes {
+			routeResources[idx] = route
+		}
+		tCtx.SetResources(resourcev3.RouteType, routeResources)
 	}
-	tCtx.SetResources(resourcev3.ClusterType, clusterResources)
 
-	secretResources := make([]resourceTypes.Resource, len(newSecrets))
-	for idx, secret := range newSecrets {
-		secretResources[idx] = secret
+	if includeClusters {
+		clusterResources := make([]resourceTypes.Resource, len(newClusters))
+		for idx, cluster := range newClusters {
+			clusterResources[idx] = cluster
+		}
+		tCtx.SetResources(resourcev3.ClusterType, clusterResources)
 	}
 
-	tCtx.SetResources(resourcev3.SecretType, secretResources)
+	if includeSecrets {
+		secretResources := make([]resourceTypes.Resource, len(newSecrets))
+		for idx, secret := range newSecrets {
+			secretResources[idx] = secret
+		}
+		tCtx.SetResources(resourcev3.SecretType, secretResources)
+	}
 
 	return nil
 }
diff --git a/internal/xds/translator/globalresources.go b/internal/xds/translator/globalresources.go
index 0cb59c5f4..1ddb9e3b5 100644
--- a/internal/xds/translator/globalresources.go
+++ b/internal/xds/translator/globalresources.go
@@ -83,7 +83,7 @@ func (t *Translator) createRateLimitServiceCluster(tCtx *types.ResourceVersionTa
 	ds := &ir.DestinationSetting{
 		Weight:    ptr.To[uint32](1),
 		Protocol:  ir.GRPC,
-		Endpoints: []*ir.DestinationEndpoint{ir.NewDestEndpoint(host, port, false, nil)},
+		Endpoints: []*ir.DestinationEndpoint{ir.NewDestEndpoint(nil, host, port, false, nil)},
 		Name:      destinationSettingName(clusterName),
 	}
 
@@ -153,7 +153,7 @@ func (t *Translator) createWasmHTTPServiceCluster(tCtx *types.ResourceVersionTab
 	ds := &ir.DestinationSetting{
 		Weight:    ptr.To[uint32](1),
 		Protocol:  ir.GRPC,
-		Endpoints: []*ir.DestinationEndpoint{ir.NewDestEndpoint(wasmHTTPServiceFQDN(t.ControllerNamespace), wasmHTTPServicePort, false, nil)},
+		Endpoints: []*ir.DestinationEndpoint{ir.NewDestEndpoint(nil, wasmHTTPServiceFQDN(t.ControllerNamespace), wasmHTTPServicePort, false, nil)},
 		Name:      destinationSettingName(wasmHTTPServiceClusterName),
 	}
 
diff --git a/internal/xds/translator/listener.go b/internal/xds/translator/listener.go
index 1d54e1a3f..b896f3199 100644
--- a/internal/xds/translator/listener.go
+++ b/internal/xds/translator/listener.go
@@ -382,6 +382,10 @@ func (t *Translator) addHCMToXDSListener(xdsListener *listenerv3.Listener, irLis
 		if irListener.Timeout.HTTP.IdleTimeout != nil {
 			mgr.CommonHttpProtocolOptions.IdleTimeout = durationpb.New(irListener.Timeout.HTTP.IdleTimeout.Duration)
 		}
+
+		if irListener.Timeout.HTTP.StreamIdleTimeout != nil {
+			mgr.StreamIdleTimeout = durationpb.New(irListener.Timeout.HTTP.StreamIdleTimeout.Duration)
+		}
 	}
 
 	// Add the proxy protocol filter if needed
diff --git a/internal/xds/translator/oidc.go b/internal/xds/translator/oidc.go
index 1244250a6..fd5c1bf5a 100644
--- a/internal/xds/translator/oidc.go
+++ b/internal/xds/translator/oidc.go
@@ -474,7 +474,7 @@ func createOAuth2TokenEndpointCluster(tCtx *types.ResourceVersionTable,
 	ds = &ir.DestinationSetting{
 		Weight: ptr.To[uint32](1),
 		Endpoints: []*ir.DestinationEndpoint{
-			ir.NewDestEndpoint(cluster.hostname, cluster.port, false, nil),
+			ir.NewDestEndpoint(nil, cluster.hostname, cluster.port, false, nil),
 		},
 		Name: destinationSettingName(cluster.name),
 	}
diff --git a/internal/xds/translator/route.go b/internal/xds/translator/route.go
index 7458145c2..9f2a5ca48 100644
--- a/internal/xds/translator/route.go
+++ b/internal/xds/translator/route.go
@@ -771,6 +771,7 @@ func buildRetryOn(triggers []ir.TriggerEnum) (string, error) {
 		ir.Error5XX:             "5xx",
 		ir.GatewayError:         "gateway-error",
 		ir.Reset:                "reset",
+		ir.ResetBeforeRequest:   "reset-before-request",
 		ir.ConnectFailure:       "connect-failure",
 		ir.Retriable4XX:         "retriable-4xx",
 		ir.RefusedStream:        "refused-stream",
diff --git a/internal/xds/translator/runner/runner.go b/internal/xds/translator/runner/runner.go
index 3d4832168..8453d59a7 100644
--- a/internal/xds/translator/runner/runner.go
+++ b/internal/xds/translator/runner/runner.go
@@ -56,7 +56,7 @@ func (r *Runner) Start(ctx context.Context) (err error) {
 
 func (r *Runner) subscribeAndTranslate(sub <-chan watchable.Snapshot[string, *ir.Xds]) {
 	// Subscribe to resources
-	message.HandleSubscription(message.Metadata{Runner: string(egv1a1.LogComponentXdsTranslatorRunner), Message: "xds-ir"}, sub,
+	message.HandleSubscription(message.Metadata{Runner: r.Name(), Message: message.XDSIRMessageName}, sub,
 		func(update message.Update[string, *ir.Xds], errChan chan error) {
 			r.Logger.Info("received an update")
 			key := update.Key
@@ -128,7 +128,11 @@ func (r *Runner) subscribeAndTranslate(sub <-chan watchable.Snapshot[string, *ir
 
 				// Publish
 				if err == nil {
-					r.Xds.Store(key, result)
+					message.HandleStore(message.Metadata{
+						Runner:  r.Name(),
+						Message: message.XDSMessageName,
+					},
+						key, result, &r.Xds.Map)
 				} else {
 					r.Logger.Error(err, "skipped publishing xds resources")
 				}
diff --git a/internal/xds/translator/utils.go b/internal/xds/translator/utils.go
index 5f6c527e7..7220feab2 100644
--- a/internal/xds/translator/utils.go
+++ b/internal/xds/translator/utils.go
@@ -186,7 +186,7 @@ func addClusterFromURL(url string, tCtx *types.ResourceVersionTable) error {
 
 	ds = &ir.DestinationSetting{
 		Weight:    ptr.To[uint32](1),
-		Endpoints: []*ir.DestinationEndpoint{ir.NewDestEndpoint(uc.hostname, uc.port, false, nil)},
+		Endpoints: []*ir.DestinationEndpoint{ir.NewDestEndpoint(nil, uc.hostname, uc.port, false, nil)},
 		Name:      destinationSettingName(uc.name),
 	}
 
diff --git a/proto/extension/service.pb.go b/proto/extension/service.pb.go
index 535666cd9..9267784e9 100644
--- a/proto/extension/service.pb.go
+++ b/proto/extension/service.pb.go
@@ -425,13 +425,15 @@ func (x *PostHTTPListenerModifyResponse) GetListener() *v32.Listener {
 	return nil
 }
 
-// PostTranslateModifyRequest currently sends only clusters and secrets to an extension.
+// PostTranslateModifyRequest sends clusters, secrets, listeners, and routes to an extension.
 // The extension is free to add/modify/remove the resources it received.
 type PostTranslateModifyRequest struct {
 	state                protoimpl.MessageState         `protogen:"open.v1"`
 	PostTranslateContext *PostTranslateExtensionContext `protobuf:"bytes,1,opt,name=post_translate_context,json=postTranslateContext,proto3" json:"post_translate_context,omitempty"`
 	Clusters             []*v31.Cluster                 `protobuf:"bytes,2,rep,name=clusters,proto3" json:"clusters,omitempty"`
 	Secrets              []*v33.Secret                  `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty"`
+	Listeners            []*v32.Listener                `protobuf:"bytes,4,rep,name=listeners,proto3" json:"listeners,omitempty"`
+	Routes               []*v3.RouteConfiguration       `protobuf:"bytes,5,rep,name=routes,proto3" json:"routes,omitempty"`
 	unknownFields        protoimpl.UnknownFields
 	sizeCache            protoimpl.SizeCache
 }
@@ -487,12 +489,28 @@ func (x *PostTranslateModifyRequest) GetSecrets() []*v33.Secret {
 	return nil
 }
 
+func (x *PostTranslateModifyRequest) GetListeners() []*v32.Listener {
+	if x != nil {
+		return x.Listeners
+	}
+	return nil
+}
+
+func (x *PostTranslateModifyRequest) GetRoutes() []*v3.RouteConfiguration {
+	if x != nil {
+		return x.Routes
+	}
+	return nil
+}
+
 // PostTranslateModifyResponse is the expected response from an extension and contains
-// the full list of xDS clusters and secrets to be used for the xDS config.
+// the full list of xDS clusters, secrets, listeners, and routes to be used for the xDS config.
 type PostTranslateModifyResponse struct {
-	state         protoimpl.MessageState `protogen:"open.v1"`
-	Clusters      []*v31.Cluster         `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"`
-	Secrets       []*v33.Secret          `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty"`
+	state         protoimpl.MessageState   `protogen:"open.v1"`
+	Clusters      []*v31.Cluster           `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"`
+	Secrets       []*v33.Secret            `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty"`
+	Listeners     []*v32.Listener          `protobuf:"bytes,3,rep,name=listeners,proto3" json:"listeners,omitempty"`
+	Routes        []*v3.RouteConfiguration `protobuf:"bytes,4,rep,name=routes,proto3" json:"routes,omitempty"`
 	unknownFields protoimpl.UnknownFields
 	sizeCache     protoimpl.SizeCache
 }
@@ -541,6 +559,20 @@ func (x *PostTranslateModifyResponse) GetSecrets() []*v33.Secret {
 	return nil
 }
 
+func (x *PostTranslateModifyResponse) GetListeners() []*v32.Listener {
+	if x != nil {
+		return x.Listeners
+	}
+	return nil
+}
+
+func (x *PostTranslateModifyResponse) GetRoutes() []*v3.RouteConfiguration {
+	if x != nil {
+		return x.Routes
+	}
+	return nil
+}
+
 var File_proto_extension_service_proto protoreflect.FileDescriptor
 
 var file_proto_extension_service_proto_rawDesc = string([]byte{
@@ -555,157 +587,176 @@ var file_proto_extension_service_proto_rawDesc = string([]byte{
 	0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x63,
 	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2f, 0x76, 0x33, 0x2f, 0x72,
 	0x6f, 0x75, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x65, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72,
-	0x74, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x74, 0x6c, 0x73, 0x2f, 0x76, 0x33,
-	0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x63,
-	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xad, 0x01, 0x0a,
-	0x16, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x63, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2f, 0x76, 0x33, 0x2f, 0x72, 0x6f, 0x75,
+	0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73,
+	0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x74, 0x6c, 0x73,
+	0x2f, 0x76, 0x33, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x1a, 0x1d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
+	0xad, 0x01, 0x0a, 0x16, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x6f, 0x64,
+	0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x72, 0x6f,
+	0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
+	0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x76,
+	0x33, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x5f,
+	0x0a, 0x12, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x65, 0x6e, 0x76,
+	0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x45, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x10, 0x70,
+	0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22,
+	0x4d, 0x0a, 0x17, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69,
+	0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x72, 0x6f,
+	0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
+	0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x76,
+	0x33, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0xbd,
+	0x01, 0x0a, 0x18, 0x50, 0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f,
+	0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x07, 0x63,
+	0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65,
+	0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6c, 0x75, 0x73,
+	0x74, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07,
+	0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x14, 0x70, 0x6f, 0x73, 0x74, 0x5f,
+	0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74,
+	0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50,
+	0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x12, 0x70, 0x6f, 0x73, 0x74,
+	0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x57,
+	0x0a, 0x19, 0x50, 0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f, 0x64,
+	0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x63,
+	0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65,
+	0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6c, 0x75, 0x73,
+	0x74, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07,
+	0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0xd9, 0x01, 0x0a, 0x1c, 0x50, 0x6f, 0x73, 0x74,
+	0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66,
+	0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74,
+	0x75, 0x61, 0x6c, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22,
+	0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x6f,
+	0x75, 0x74, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f,
+	0x73, 0x74, 0x52, 0x0b, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x12,
+	0x72, 0x0a, 0x19, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f,
+	0x68, 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x37, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
+	0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74,
+	0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x16, 0x70, 0x6f, 0x73,
+	0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74,
+	0x65, 0x78, 0x74, 0x22, 0x66, 0x0a, 0x1d, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75,
+	0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f,
+	0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6e, 0x76,
+	0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e,
+	0x76, 0x33, 0x2e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x0b,
+	0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x22, 0xcd, 0x01, 0x0a, 0x1d,
+	0x50, 0x6f, 0x73, 0x74, 0x48, 0x54, 0x54, 0x50, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72,
+	0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a,
+	0x08, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x22, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6c,
+	0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x65,
+	0x6e, 0x65, 0x72, 0x52, 0x08, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x6c, 0x0a,
+	0x15, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x5f, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x65,
+	0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x48, 0x54, 0x54, 0x50, 0x4c, 0x69,
+	0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x43,
+	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74,
+	0x65, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x60, 0x0a, 0x1e, 0x50,
+	0x6f, 0x73, 0x74, 0x48, 0x54, 0x54, 0x50, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4d,
+	0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a,
+	0x08, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x22, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6c,
+	0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x65,
+	0x6e, 0x65, 0x72, 0x52, 0x08, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x22, 0x99, 0x03,
+	0x0a, 0x1a, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x4d,
+	0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6b, 0x0a, 0x16,
+	0x70, 0x6f, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x65,
+	0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c,
+	0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74,
+	0x65, 0x78, 0x74, 0x52, 0x14, 0x70, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61,
+	0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3c, 0x0a, 0x08, 0x63, 0x6c, 0x75,
+	0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6e,
+	0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74,
+	0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63,
+	0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65,
+	0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79,
+	0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e,
+	0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2e, 0x74, 0x6c,
+	0x73, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63,
+	0x72, 0x65, 0x74, 0x73, 0x12, 0x40, 0x0a, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72,
+	0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e,
+	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x2e,
+	0x76, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x6c, 0x69, 0x73,
+	0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73,
+	0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63,
 	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x52,
-	0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x12, 0x70,
-	0x6f, 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
-	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67,
-	0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x74,
-	0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x4d, 0x0a, 0x17,
-	0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63,
+	0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x22, 0xad, 0x02, 0x0a, 0x1b, 0x50, 0x6f,
+	0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66,
+	0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x08, 0x63, 0x6c, 0x75,
+	0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6e,
+	0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74,
+	0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63,
+	0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65,
+	0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79,
+	0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e,
+	0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2e, 0x74, 0x6c,
+	0x73, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63,
+	0x72, 0x65, 0x74, 0x73, 0x12, 0x40, 0x0a, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72,
+	0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e,
+	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x2e,
+	0x76, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x6c, 0x69, 0x73,
+	0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73,
+	0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63,
 	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x52,
-	0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0xbd, 0x01, 0x0a, 0x18,
-	0x50, 0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66,
-	0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73,
-	0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
-	0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
-	0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75,
-	0x73, 0x74, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x14, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x75,
-	0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x33, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
-	0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74,
-	0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x12, 0x70, 0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75,
-	0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x57, 0x0a, 0x19, 0x50,
-	0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73,
-	0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
-	0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
-	0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75,
-	0x73, 0x74, 0x65, 0x72, 0x22, 0xd9, 0x01, 0x0a, 0x1c, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x69, 0x72,
-	0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c,
-	0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6e,
-	0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
-	0x2e, 0x76, 0x33, 0x2e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x52,
-	0x0b, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x72, 0x0a, 0x19,
-	0x70, 0x6f, 0x73, 0x74, 0x5f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x68, 0x6f, 0x73,
-	0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x37, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x69, 0x72,
-	0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x16, 0x70, 0x6f, 0x73, 0x74, 0x56, 0x69,
-	0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
-	0x22, 0x66, 0x0a, 0x1d, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48,
-	0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x12, 0x45, 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x68, 0x6f, 0x73,
-	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e,
-	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x76, 0x33, 0x2e,
-	0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x0b, 0x76, 0x69, 0x72,
-	0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x22, 0xcd, 0x01, 0x0a, 0x1d, 0x50, 0x6f, 0x73,
-	0x74, 0x48, 0x54, 0x54, 0x50, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4d, 0x6f, 0x64,
-	0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x08, 0x6c, 0x69,
-	0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65,
-	0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6c, 0x69, 0x73, 0x74,
-	0x65, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72,
-	0x52, 0x08, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x6c, 0x0a, 0x15, 0x70, 0x6f,
-	0x73, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74,
-	0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
-	0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x48, 0x54, 0x54, 0x50, 0x4c, 0x69, 0x73, 0x74, 0x65,
-	0x6e, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74,
-	0x65, 0x78, 0x74, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65,
-	0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x60, 0x0a, 0x1e, 0x50, 0x6f, 0x73, 0x74,
-	0x48, 0x54, 0x54, 0x50, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69,
-	0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6c, 0x69,
-	0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65,
-	0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6c, 0x69, 0x73, 0x74,
-	0x65, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72,
-	0x52, 0x08, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x22, 0x94, 0x02, 0x0a, 0x1a, 0x50,
-	0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69,
-	0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6b, 0x0a, 0x16, 0x70, 0x6f, 0x73,
-	0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74,
-	0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
-	0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65,
-	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
-	0x52, 0x14, 0x70, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x43,
-	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3c, 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
-	0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79,
-	0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e,
-	0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73,
-	0x74, 0x65, 0x72, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18,
-	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f,
-	0x72, 0x74, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2e, 0x74, 0x6c, 0x73, 0x2e, 0x76,
-	0x33, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74,
-	0x73, 0x22, 0xa8, 0x01, 0x0a, 0x1b, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c,
-	0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x12, 0x3c, 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20,
-	0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
-	0x69, 0x67, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c,
-	0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12,
-	0x4b, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x31, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x6f,
-	0x63, 0x6b, 0x65, 0x74, 0x73, 0x2e, 0x74, 0x6c, 0x73, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, 0x63,
-	0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x32, 0xa1, 0x05, 0x0a,
-	0x15, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x45, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x0f, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f,
-	0x75, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x12, 0x2e, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
-	0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69,
-	0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
-	0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69,
-	0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x86, 0x01, 0x0a,
-	0x15, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74,
-	0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x12, 0x34, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61,
+	0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x32, 0xa1, 0x05, 0x0a, 0x15, 0x45, 0x6e,
+	0x76, 0x6f, 0x79, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x0f, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65,
+	0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x12, 0x2e, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61,
 	0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
-	0x50, 0x6f, 0x73, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d,
-	0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x65,
-	0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61,
-	0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x89, 0x01, 0x0a, 0x16, 0x50, 0x6f, 0x73, 0x74, 0x48, 0x54,
-	0x54, 0x50, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79,
-	0x12, 0x35, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e,
-	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x48, 0x54,
-	0x54, 0x50, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67,
-	0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x2e, 0x50, 0x6f, 0x73, 0x74, 0x48, 0x54, 0x54, 0x50, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65,
-	0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
-	0x00, 0x12, 0x7a, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
-	0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x12, 0x30, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61,
+	0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61,
 	0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
-	0x50, 0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66,
-	0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79,
-	0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f, 0x64,
-	0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01,
-	0x0a, 0x13, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x4d,
-	0x6f, 0x64, 0x69, 0x66, 0x79, 0x12, 0x32, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74,
+	0x50, 0x6f, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x86, 0x01, 0x0a, 0x15, 0x50, 0x6f,
+	0x73, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64,
+	0x69, 0x66, 0x79, 0x12, 0x34, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77,
+	0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73,
+	0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69,
+	0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
+	0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f,
+	0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x89, 0x01, 0x0a, 0x16, 0x50, 0x6f, 0x73, 0x74, 0x48, 0x54, 0x54, 0x50, 0x4c,
+	0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x12, 0x35, 0x2e,
+	0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x48, 0x54, 0x54, 0x50, 0x4c,
+	0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65,
+	0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f,
+	0x73, 0x74, 0x48, 0x54, 0x54, 0x50, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4d, 0x6f,
+	0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7a,
+	0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f, 0x64,
+	0x69, 0x66, 0x79, 0x12, 0x30, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77,
+	0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73,
+	0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74,
 	0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50,
+	0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x13, 0x50,
 	0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69,
-	0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6e, 0x76, 0x6f,
-	0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65,
-	0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
-	0x42, 0x11, 0x5a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x66, 0x79, 0x12, 0x32, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
+	0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x73, 0x74,
+	0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x67, 0x61,
+	0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+	0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64,
+	0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x11, 0x5a,
+	0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 })
 
 var (
@@ -742,6 +793,7 @@ var file_proto_extension_service_proto_goTypes = []any{
 	(*PostHTTPListenerExtensionContext)(nil), // 17: envoygateway.extension.PostHTTPListenerExtensionContext
 	(*PostTranslateExtensionContext)(nil),    // 18: envoygateway.extension.PostTranslateExtensionContext
 	(*v33.Secret)(nil),                       // 19: envoy.extensions.transport_sockets.tls.v3.Secret
+	(*v3.RouteConfiguration)(nil),            // 20: envoy.config.route.v3.RouteConfiguration
 }
 var file_proto_extension_service_proto_depIdxs = []int32{
 	10, // 0: envoygateway.extension.PostRouteModifyRequest.route:type_name -> envoy.config.route.v3.Route
@@ -759,23 +811,27 @@ var file_proto_extension_service_proto_depIdxs = []int32{
 	18, // 12: envoygateway.extension.PostTranslateModifyRequest.post_translate_context:type_name -> envoygateway.extension.PostTranslateExtensionContext
 	12, // 13: envoygateway.extension.PostTranslateModifyRequest.clusters:type_name -> envoy.config.cluster.v3.Cluster
 	19, // 14: envoygateway.extension.PostTranslateModifyRequest.secrets:type_name -> envoy.extensions.transport_sockets.tls.v3.Secret
-	12, // 15: envoygateway.extension.PostTranslateModifyResponse.clusters:type_name -> envoy.config.cluster.v3.Cluster
-	19, // 16: envoygateway.extension.PostTranslateModifyResponse.secrets:type_name -> envoy.extensions.transport_sockets.tls.v3.Secret
-	0,  // 17: envoygateway.extension.EnvoyGatewayExtension.PostRouteModify:input_type -> envoygateway.extension.PostRouteModifyRequest
-	4,  // 18: envoygateway.extension.EnvoyGatewayExtension.PostVirtualHostModify:input_type -> envoygateway.extension.PostVirtualHostModifyRequest
-	6,  // 19: envoygateway.extension.EnvoyGatewayExtension.PostHTTPListenerModify:input_type -> envoygateway.extension.PostHTTPListenerModifyRequest
-	2,  // 20: envoygateway.extension.EnvoyGatewayExtension.PostClusterModify:input_type -> envoygateway.extension.PostClusterModifyRequest
-	8,  // 21: envoygateway.extension.EnvoyGatewayExtension.PostTranslateModify:input_type -> envoygateway.extension.PostTranslateModifyRequest
-	1,  // 22: envoygateway.extension.EnvoyGatewayExtension.PostRouteModify:output_type -> envoygateway.extension.PostRouteModifyResponse
-	5,  // 23: envoygateway.extension.EnvoyGatewayExtension.PostVirtualHostModify:output_type -> envoygateway.extension.PostVirtualHostModifyResponse
-	7,  // 24: envoygateway.extension.EnvoyGatewayExtension.PostHTTPListenerModify:output_type -> envoygateway.extension.PostHTTPListenerModifyResponse
-	3,  // 25: envoygateway.extension.EnvoyGatewayExtension.PostClusterModify:output_type -> envoygateway.extension.PostClusterModifyResponse
-	9,  // 26: envoygateway.extension.EnvoyGatewayExtension.PostTranslateModify:output_type -> envoygateway.extension.PostTranslateModifyResponse
-	22, // [22:27] is the sub-list for method output_type
-	17, // [17:22] is the sub-list for method input_type
-	17, // [17:17] is the sub-list for extension type_name
-	17, // [17:17] is the sub-list for extension extendee
-	0,  // [0:17] is the sub-list for field type_name
+	16, // 15: envoygateway.extension.PostTranslateModifyRequest.listeners:type_name -> envoy.config.listener.v3.Listener
+	20, // 16: envoygateway.extension.PostTranslateModifyRequest.routes:type_name -> envoy.config.route.v3.RouteConfiguration
+	12, // 17: envoygateway.extension.PostTranslateModifyResponse.clusters:type_name -> envoy.config.cluster.v3.Cluster
+	19, // 18: envoygateway.extension.PostTranslateModifyResponse.secrets:type_name -> envoy.extensions.transport_sockets.tls.v3.Secret
+	16, // 19: envoygateway.extension.PostTranslateModifyResponse.listeners:type_name -> envoy.config.listener.v3.Listener
+	20, // 20: envoygateway.extension.PostTranslateModifyResponse.routes:type_name -> envoy.config.route.v3.RouteConfiguration
+	0,  // 21: envoygateway.extension.EnvoyGatewayExtension.PostRouteModify:input_type -> envoygateway.extension.PostRouteModifyRequest
+	4,  // 22: envoygateway.extension.EnvoyGatewayExtension.PostVirtualHostModify:input_type -> envoygateway.extension.PostVirtualHostModifyRequest
+	6,  // 23: envoygateway.extension.EnvoyGatewayExtension.PostHTTPListenerModify:input_type -> envoygateway.extension.PostHTTPListenerModifyRequest
+	2,  // 24: envoygateway.extension.EnvoyGatewayExtension.PostClusterModify:input_type -> envoygateway.extension.PostClusterModifyRequest
+	8,  // 25: envoygateway.extension.EnvoyGatewayExtension.PostTranslateModify:input_type -> envoygateway.extension.PostTranslateModifyRequest
+	1,  // 26: envoygateway.extension.EnvoyGatewayExtension.PostRouteModify:output_type -> envoygateway.extension.PostRouteModifyResponse
+	5,  // 27: envoygateway.extension.EnvoyGatewayExtension.PostVirtualHostModify:output_type -> envoygateway.extension.PostVirtualHostModifyResponse
+	7,  // 28: envoygateway.extension.EnvoyGatewayExtension.PostHTTPListenerModify:output_type -> envoygateway.extension.PostHTTPListenerModifyResponse
+	3,  // 29: envoygateway.extension.EnvoyGatewayExtension.PostClusterModify:output_type -> envoygateway.extension.PostClusterModifyResponse
+	9,  // 30: envoygateway.extension.EnvoyGatewayExtension.PostTranslateModify:output_type -> envoygateway.extension.PostTranslateModifyResponse
+	26, // [26:31] is the sub-list for method output_type
+	21, // [21:26] is the sub-list for method input_type
+	21, // [21:21] is the sub-list for extension type_name
+	21, // [21:21] is the sub-list for extension extendee
+	0,  // [0:21] is the sub-list for field type_name
 }
 
 func init() { file_proto_extension_service_proto_init() }
diff --git a/proto/extension/service.proto b/proto/extension/service.proto
index 1e77ca7de..2a34b728f 100644
--- a/proto/extension/service.proto
+++ b/proto/extension/service.proto
@@ -10,6 +10,7 @@ package envoygateway.extension;
 import "envoy/config/cluster/v3/cluster.proto";
 import "envoy/config/listener/v3/listener.proto";
 import "envoy/config/route/v3/route_components.proto";
+import "envoy/config/route/v3/route.proto";
 import "envoy/extensions/transport_sockets/tls/v3/secret.proto";
 
 import "proto/extension/context.proto";
@@ -106,18 +107,22 @@ message PostHTTPListenerModifyResponse {
 }
 
 
-// PostTranslateModifyRequest currently sends only clusters and secrets to an extension.
+// PostTranslateModifyRequest sends clusters, secrets, listeners, and routes to an extension.
 // The extension is free to add/modify/remove the resources it received.
 message PostTranslateModifyRequest {
     PostTranslateExtensionContext post_translate_context = 1;
     repeated envoy.config.cluster.v3.Cluster clusters = 2;
     repeated envoy.extensions.transport_sockets.tls.v3.Secret secrets = 3;
+    repeated envoy.config.listener.v3.Listener listeners = 4;
+    repeated envoy.config.route.v3.RouteConfiguration routes = 5;
 }
 
 
 // PostTranslateModifyResponse is the expected response from an extension and contains
-// the full list of xDS clusters and secrets to be used for the xDS config.
+// the full list of xDS clusters, secrets, listeners, and routes to be used for the xDS config.
 message PostTranslateModifyResponse {
     repeated envoy.config.cluster.v3.Cluster clusters = 1;
     repeated envoy.extensions.transport_sockets.tls.v3.Secret secrets = 2;
+    repeated envoy.config.listener.v3.Listener listeners = 3;
+    repeated envoy.config.route.v3.RouteConfiguration routes = 4;
 }
diff --git a/release-notes/current.yaml b/release-notes/current.yaml
index 8a12601b1..4aaba48f1 100644
--- a/release-notes/current.yaml
+++ b/release-notes/current.yaml
@@ -3,6 +3,7 @@ date: Pending
 # Changes that are expected to cause an incompatibility with previous versions, such as deletions or modifications to existing APIs.
 breaking changes: |
   Use gateway name as proxy fleet name for gateway namespace mode.
+  Endpoints that are absent from service discovery are removed even if their active health checks succeed.
 
 # Updates addressing vulnerabilities, security flaws, or compliance requirements.
 security updates: |
@@ -32,7 +33,10 @@ new features: |
   Added support for specifying deployment annotations through the helm chart.
   Added support for customizing the name of the ServiceAccount used by the Proxy.
   Added support for custom backendRefs via extension server using PostClusterModify hook.
-
+  Added support for SecurityPolicy and EnvoyExtensionPolicy to target ServiceImport via BackendRefs.
+  Introduce validation strictness levels for Lua scripts in EnvoyExtensionPolicies.
+  Added metric `watchable_publish_total` counting store events in watchable message queues.
+  Accessloggers of type ALS now have http2 enabled on the cluster by default.
 
 bug fixes: |
   Handle integer zone annotation values
@@ -47,6 +51,10 @@ bug fixes: |
   Add ConfigMap indexers for EnvoyExtensionPolicies to reconcile Lua changes
   Fixed issue that default accesslog format not working.
   Fixed validation errors when the rateLimit url for Redis in the EnvoyGateway API includes multiple comma separated hosts.
+  Fixes addresses in status of DualStack NodePort Gateways.
+  Fixed issue that not able to override the prometheus annotation in EnvoyProxy CRD.
+  Skipped ExtProc, Wasm, and ExtAuth when they are configured FailOpen and the configuration is invalid, e.g. missing backendRefs or invalid port.
+  Fixed issue that failed to update policy status when there are more than 16 ancestors.
 
 # Enhancements that improve performance.
 performance improvements: |
diff --git a/site/assets/scss/_styles_project.scss b/site/assets/scss/_styles_project.scss
index c05153516..4642082f1 100644
--- a/site/assets/scss/_styles_project.scss
+++ b/site/assets/scss/_styles_project.scss
@@ -10,6 +10,7 @@ $dark: #1E1B4B;
 $gray-100: #F5F3FF;
 $gray-200: #E9E8FF;
 $white: #ffffff;
+$light-purple: #8c87ec;
 
 
 // Gradient colors
@@ -110,6 +111,51 @@ $gradient-end: #4F46E5; // Indigo
   }
 }
 
+
+
+.btn-light-purple {
+  background: $light-purple;
+  backdrop-filter: blur(8px);
+  border: 1px solid rgba(255, 255, 255, 0.3);
+  color: $white !important;
+  padding: 0.625rem 1.5rem;
+  font-size: 1rem;
+  font-weight: 500;
+  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+  text-decoration: none;
+  letter-spacing: 0.02em;
+  border-radius: 9999px;
+  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+  display: inline-flex;
+  align-items: center;
+  gap: 0.5rem;
+
+  &:hover {
+    background: $primary;
+    border-color: rgba(255, 255, 255, 0.4);
+    color: $white !important;
+    transform: translateY(-2px);
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+    text-decoration: none !important;
+  }
+
+  &:active {
+    transform: translateY(0);
+    background: rgba(255, 255, 255, 0.25);
+    color: $white !important;
+  }
+
+  &:focus {
+    outline: none;
+    box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.3);
+    color: $white !important;
+  }
+
+  &:visited {
+    color: $white !important;
+  }
+}
+
 // Override Docsy variables
 $enable-gradients: false;
 $enable-shadows: false;
@@ -622,6 +668,11 @@ nav.foldable-nav {
   }
 }
 
+.btn-sm {
+  padding: 0.4rem 0.8rem;
+  font-size: 0.8rem;
+}
+
 // Alert boxes
 .alert {
   border-radius: 8px;
@@ -1719,4 +1770,40 @@ footer {
     margin-left: auto;
     margin-right: auto;
   }
-}
\ No newline at end of file
+}
+
+// AI Chat Container Styling
+.ai-chat-container {
+  width: 80vw;
+  max-width: 1400px;
+  height: 80vh;
+  border: none;
+  border-radius: 8px;
+  overflow: hidden;
+  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+  margin: 2rem auto;
+  transition: box-shadow 0.3s ease;
+
+  &:hover {
+    box-shadow: 0 8px 12px rgba(0, 0, 0, 0.15);
+  }
+
+  iframe {
+    width: 100%;
+    height: 100%;
+    border: none;
+  }
+
+  // Responsive adjustments
+  @media (max-width: 768px) {
+    width: 95vw;
+    height: 70vh;
+  }
+
+  @media (max-width: 480px) {
+    width: 100vw;
+    height: 60vh;
+    border-radius: 0;
+    margin: 0 -1rem;
+  }
+}
diff --git a/site/content/en/_index.md b/site/content/en/_index.md
index 62f443051..ea6874b93 100644
--- a/site/content/en/_index.md
+++ b/site/content/en/_index.md
@@ -114,6 +114,23 @@ no_list: true
           <p>Envoy Gateway provides a rich set of observability features including metrics, access logging, distributed tracing, and more.</p>
         </div>
       </article>
+      <article class="col-md-12 mb-4">
+        <div class="feature-card">
+          <div class="icon-container">
+            <i class="fas fa-brain"></i>
+          </div>
+          <h3>GenAI Traffic Management</h3>
+          <p>As part of the Envoy ecosystem, <strong>Envoy AI Gateway</strong> builds on <strong>Envoy Gateway</strong> to manage GenAI traffic adding features like LLM provider integrations, token-based rate limiting, an OpenAI-compatible API, and provider fallback support, and more. Click the links below to learn more and get involved.</p>
+          <div class="mt-4">
+            <a class="btn me-3 btn-sm btn-light-purple" href="https://aigateway.envoyproxy.io/">
+              <i class="fas fa-rocket"></i>Get Started with Envoy AI Gateway
+            </a>
+            <a class="btn btn-sm btn-light-purple" href="https://github.com/envoyproxy/ai-gateway">
+              <i class="fab fa-github"></i>View on GitHub
+            </a>
+          </div>
+        </div>
+      </article>
     </div>
   </div>
 </section>
diff --git a/site/content/en/contributions/design/envoy-extension-policy.md b/site/content/en/contributions/design/envoy-extension-policy.md
index 9ecf25988..d334e9692 100644
--- a/site/content/en/contributions/design/envoy-extension-policy.md
+++ b/site/content/en/contributions/design/envoy-extension-policy.md
@@ -81,7 +81,6 @@ metadata:
   name: ext-proc-policy
   namespace: default
 spec:
-  priority: 10
   extProc:
   - service:
       backendRef:
@@ -117,13 +116,14 @@ Here is a list of features that can be included in this API
 
 ## Design Decisions
 * This API will only support a single `targetRef` and can bind to a `Gateway` resource or a `HTTPRoute` or `GRPCRoute` or `TCPRoute`.
+* Only one `EnvoyExtensionPolicy` can attach to a given resource (Gateway or xRoute). If multiple policies attempt to attach to the same resource, the oldest policy (by creation timestamp) will be applied and newer policies will be rejected.
+* A policy targeting a route takes precedence over a policy targeting a Gateway that is a parentRef to that route. This allows for more specific route-level configuration to override broader gateway-level settings.
 * Extensions that support both Network and HTTP filter variants (e.g. Wasm, Golang) will be translated to the appropriate filter type according to the sort of route that they attach to.
 * Extensions that only support HTTP extensibility (Ext-Proc, LUA) can only be attached to HTTP/GRPC Routes.  
 * A user-defined extension that is added to the request processing flow can have a significant impact on security,
   resilience and performance of the proxy. Gateway Operators can restrict access to the extensibility policy using K8s RBAC. 
 * Users may need to customize the order of extension and built-in filters. This will be addressed in a separate issue.  
 * Gateway operators may need to include multiple extensions (e.g. Wasm modules developed by different teams and distributed separately). 
-  This API will support attachment of multiple policies. Extension will execute in an order defined by the priority field.
 * This API resource MUST be part of same namespace as the targetRef resource
 * If the policy targets a resource but cannot attach to it, this information should be reflected
   in the Policy Status field using the `Conflicted=True` condition.
diff --git a/site/content/en/tools/ai-chat/index.md b/site/content/en/tools/ai-chat/index.md
new file mode 100644
index 000000000..8ccb2e761
--- /dev/null
+++ b/site/content/en/tools/ai-chat/index.md
@@ -0,0 +1,12 @@
+---
+title: "AI Assistant Chat"
+description: "Get help with Envoy Gateway through chatting with an AI assistant that is referencing docs and GitHub, providing your with actionable advice."
+type: "tools"
+---
+
+<div class="ai-chat-container">
+  <iframe
+    src="/html/ai-chat-embed.html"
+    title="Envoy Gateway AI Assistant">
+  </iframe>
+</div>
diff --git a/site/content/en/v1.4/concepts/introduction/gateway_api_extensions/backend-traffic-policy.md b/site/content/en/v1.4/concepts/introduction/gateway_api_extensions/backend-traffic-policy.md
index b0313539e..995d66e7d 100644
--- a/site/content/en/v1.4/concepts/introduction/gateway_api_extensions/backend-traffic-policy.md
+++ b/site/content/en/v1.4/concepts/introduction/gateway_api_extensions/backend-traffic-policy.md
@@ -69,6 +69,77 @@ In this example `my-route` and `my-gateway` would both affect the route. However
 
 Lastly, it's important to note that even when you apply a policy to a Gateway, the policy's effects are tracked separately for each backend service referenced in your routes. For example, if you set up circuit breaking on a Gateway with multiple backend services, each backend service will have its own independent circuit breaker counter. This ensures that issues with one backend service don't affect the others.
 
+## Policy Merging
+
+BackendTrafficPolicy supports merging configurations using the `mergeType` field, which allows route-level policies to combine with gateway-level policies rather than completely overriding them. This enables layered policy strategies where platform teams can set baseline configurations at the Gateway level, while application teams can add specific policies for their routes.
+
+### Merge Types
+
+- **StrategicMerge**: Uses Kubernetes strategic merge patch semantics, providing intelligent merging for complex data structures including arrays
+- **JSONMerge**: Uses RFC 7396 JSON Merge Patch semantics, with simple replacement strategy where arrays are completely replaced
+
+### Example Usage
+
+Here's an example demonstrating policy merging for rate limiting:
+
+```yaml
+# Platform team: Gateway-level policy with global abuse prevention
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: BackendTrafficPolicy
+metadata:
+  name: global-backendtrafficpolicy
+spec:
+  rateLimit:
+    type: Global
+    global:
+      rules:
+      - clientSelectors:
+        - sourceCIDR:
+            type: Distinct
+            value: 0.0.0.0/0
+        limit:
+          requests: 100
+          unit: Second
+        shared: true
+  targetRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: eg
+
+---
+# Application team: Route-level policy with specific limits
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: BackendTrafficPolicy
+metadata:
+  name: route-backendtrafficpolicy
+spec:
+  mergeType: StrategicMerge  # Enables merging with gateway policy
+  rateLimit:
+    type: Global
+    global:
+      rules:
+      - clientSelectors:
+        - sourceCIDR:
+            type: Distinct
+            value: 0.0.0.0/0
+        limit:
+          requests: 5
+          unit: Minute
+        shared: false
+  targetRefs:
+  - group: gateway.networking.k8s.io
+    kind: HTTPRoute
+    name: signup-service-httproute
+```
+
+In this example, the route-level policy merges with the gateway-level policy, resulting in both rate limits being enforced: the global 100 requests/second abuse limit and the route-specific 5 requests/minute limit.
+
+### Key Constraints
+
+- The `mergeType` field can only be set on policies targeting child resources (like HTTPRoute), not parent resources (like Gateway)
+- When `mergeType` is unset, no merging occurs - only the most specific policy takes effect
+- The merged configuration combines both policies, enabling layered protection strategies
+
 ## Related Resources
 
 - [Circuit Breakers](../../../tasks/traffic/circuit-breaker.md)
diff --git a/site/content/en/v1.4/tasks/operations/airgap-deployment.md b/site/content/en/v1.4/tasks/operations/airgap-deployment.md
new file mode 100644
index 000000000..8b72c776d
--- /dev/null
+++ b/site/content/en/v1.4/tasks/operations/airgap-deployment.md
@@ -0,0 +1,160 @@
+---
+title: 'Deploy Envoy Gateway in Air-Gapped Environments'
+---
+
+Deploying the Envoy Gateway in an air-gapped environment using a Helm chart
+requires careful configuration of the `values.yaml` file as well as adjustments
+when deploying a Gateway resource.
+
+You will need to specify custom image repositories for the following components
+in the Helm chart. This can be done on a global level or image level.
+
+- Gateway
+- Ratelimit
+
+## Gateway – `values.yaml` Configuration
+
+Example done in image level:
+
+```yaml
+deployment:
+  envoyGateway:
+    image:
+      repository: custom-cr.internal.io/envoyproxy/gateway
+      tag: v1.4.1
+```
+
+It's also possible to define the registry on a global level:
+
+```yaml
+# Global settings
+global:
+  # If set, these take highest precedence and change both envoyGateway and ratelimit's container registry and pull secrets.
+  # -- Global override for image registry
+  imageRegistry: 'custom-cr.internal.io'
+```
+
+## Ratelimit - `values.yaml` Configuration
+
+Example done on global level:
+
+```yaml
+global:
+  images:
+    ratelimit:
+      image: custom-cr.internal.io/envoyproxy/ratelimit:master
+```
+
+Furthermore for private registries you might need to define imagePullSecrets.
+
+On global level:
+
+```yaml
+global:
+  imagePullSecrets:
+    - my-private-registry-secret
+```
+
+or per image
+
+```yaml
+global:
+  images:
+    ratelimit:
+      pullSecrets:
+        - name: my-private-registry-secret
+```
+
+## Gateway Requires a Custom EnvoyProxy Reference
+
+Either the Gateway or GatewayClass must reference a custom EnvoyProxy resource
+that explicitly specifies the location of the distroless Envoy container image.
+Without this, the image will be pulled implicitly from Docker Hub.
+
+```yaml
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: EnvoyProxy
+metadata:
+  name: custom-envoy-proxy
+  namespace: default
+spec:
+  provider:
+    type: Kubernetes
+    kubernetes:
+      envoyDeployment:
+        container:
+          image: custom-cr.internal.io/envoyproxy/envoy:distroless-v1.34.1
+```
+
+Then, reference the `custom-envoy-proxy` in your Gateway manifest
+
+```yaml
+apiVersion: gateway.networking.k8s.io/v1
+kind: Gateway
+metadata:
+  name: envoy-gateway
+  namespace: default
+  annotations:
+    cert-manager.io/cluster-issuer: cluster-wide-ca-issuer
+    cert-manager.io/duration: 8760h
+    cert-manager.io/renew-before: 360h
+    cert-manager.io/usages: server auth, client auth
+spec:
+  gatewayClassName: envoy-gateway-class
+  infrastructure:
+    parametersRef:
+      group: gateway.envoyproxy.io
+      kind: EnvoyProxy
+      name: custom-envoy-proxy
+  listeners:
+    - hostname: example.com
+      name: https
+      port: 443
+      protocol: HTTPS
+      tls:
+        certificateRefs:
+          - name: example-tls
+        mode: Terminate
+```
+
+or reference it in your GatewayClass, so that each new Gateway uses the
+EnvoyProxy automatically:
+
+```yaml
+apiVersion: gateway.networking.k8s.io/v1
+kind: GatewayClass
+metadata:
+  name: envoy-gateway-class
+spec:
+  controllerName: gateway.envoyproxy.io/gatewayclass-controller
+  parametersRef:
+    group: gateway.envoyproxy.io
+    kind: EnvoyProxy
+    name: custom-envoy-proxy
+    namespace: default
+```
+
+## Default LoadBalancer Service Type
+
+By default, Envoy uses a Service of type `LoadBalancer`. Depending on your
+Kubernetes environment, you might need to add custom annotations. For example,
+when deploying in Azure, you can configure the service as follows:
+
+```yaml
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: EnvoyProxy
+metadata:
+  name: custom-envoy-proxy
+  namespace: default
+spec:
+  provider:
+    type: Kubernetes
+    kubernetes:
+      envoyService:
+        type: LoadBalancer
+        annotations:
+          service.beta.kubernetes.io/azure-load-balancer-internal: 'true'
+      envoyDeployment:
+        container:
+          image: custom-cr.internal.io/envoyproxy/envoy:distroless-v1.34.1
+```
diff --git a/site/data/ecosystem.yaml b/site/data/ecosystem.yaml
index 0a7e04b09..018273e58 100644
--- a/site/data/ecosystem.yaml
+++ b/site/data/ecosystem.yaml
@@ -23,3 +23,7 @@ adopters:
     url: "https://k0rdent.io/"
     logo: /logos/k0rdent.svg
     description: "k0rdent integrates with Envoy Gateway to offer advanced, high-performance traffic management within Kubernetes. k0rdent simplifies Envoy configuration, enabling users to easily define routing, security, and observability policies. This integration provides a robust, scalable, and secure ingress solution for applications deployed within the k0rdent-managed cluster."
+  - name: "KEDA"
+    logo: "/logos/keda.svg"
+    url: "https://keda.sh"
+    description: "KEDA integrates with Envoy Gateway through http-add-on for autoscaling workloads based on real-time HTTP traffic metrics. This integration allows users to leverage Envoy Gateway's capabilities for scaling behavior shaping desired traffic patterns."
diff --git a/site/static/html/ai-chat-embed.html b/site/static/html/ai-chat-embed.html
new file mode 100644
index 000000000..dfc64064c
--- /dev/null
+++ b/site/static/html/ai-chat-embed.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Envoy Gateway AI Assistant</title>
+    <style>
+      html, body {
+        margin: 0;
+        padding: 0;
+        height: 100%;
+        width: 100%;
+        overflow: hidden;
+        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+      }
+      #kapa-widget-container {
+        height: 100vh;
+        width: 100vw;
+      }
+    </style>
+    <script
+      src="https://widget.kapa.ai/kapa-widget.bundle.js"
+      data-website-id="b232d295-36d9-4b0f-95da-a4524b622ef0"
+      data-project-name="Envoy Gateway"
+      data-project-color="#9333EA"
+      data-project-logo="/img/ask-ai-green.png"
+      data-modal-disclaimer="This AI assistant can help you find information about **Envoy Gateway** and **Proxy**. Please verify important information from our official documentation. If you need more help you can always [ask a human](https://github.com/envoyproxy/gateway/discussions/new?category=q-a)."
+      data-modal-disclaimer-text="This AI assistant can help you find information about Envoy Gateway. Please verify important information from our official documentation."
+      data-modal-example-questions="How do I install Envoy Gateway?,How do I authorize requests with EG?,What EG deployment options are there?,Can EG route outside of Kubernetes?,How do I configure TLS with EG?, Explain Envoy Gateway vs Proxy."
+      data-modal-ask-ai-button-text="Ask AI"
+      data-modal-title="Envoy Gateway Assistant"
+      data-modal-full-screen="true"
+      data-modal-open-by-default="true"
+      data-modal-close-button-hide="true"
+      data-modal-with-overlay="false"
+      data-search-mode-enabled="true"
+      data-search-include-source-names='["Envoy Gateway"]'
+      data-answer-cta-button-enabled="true"
+      data-answer-cta-button-link="https://github.com/envoyproxy/gateway/discussions/new?category=q-a"
+      data-answer-cta-button-text="Need more help? Ask a human!"
+      data-modal-border-radius="8px"
+      data-modal-header-bg-color="#F5F3FF"
+      data-modal-body-bg-color="#ffffff"
+      data-modal-title-color="#1E1B4B"
+      data-modal-title-font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif"
+      data-modal-title-font-weight="600"
+      data-modal-disclaimer-bg-color="#F5F3FF"
+      data-modal-disclaimer-text-color="#4F46E5"
+      data-query-input-border-color="#E9E8FF"
+      data-query-input-focus-border-color="#9333EA"
+      data-submit-query-button-bg-color="#9333EA"
+      data-answer-cta-button-bg-color="#4F46E5"
+      data-answer-cta-button-text-color="#ffffff"
+      data-answer-cta-button-hover-bg-color="#6366F1"
+      data-answer-cta-button-border-radius="6px"
+      data-example-question-button-bg-color="#F5F3FF"
+      data-example-question-button-text-color="#4F46E5"
+      data-example-question-button-hover-bg-color="#E9E8FF"
+      data-example-question-button-border="1px solid #E9E8FF"
+      data-example-question-button-border-radius="6px"
+      data-hyperlink-color="#9333EA"
+      data-answer-feedback-button-active-bg-color="#F5F3FF"
+      data-answer-feedback-button-active-text-color="#9333EA"
+      data-answer-feedback-button-hover-bg-color="#F5F3FF"
+      data-answer-feedback-button-border-radius="4px"
+    ></script>
+  </head>
+  <body>
+    <div id="kapa-widget-container"></div>
+  </body>
+</html>
diff --git a/site/static/js/benchmark-dashboard.js b/site/static/js/benchmark-dashboard.js
index 7e2f1804c..83f0324cc 100644
--- a/site/static/js/benchmark-dashboard.js
+++ b/site/static/js/benchmark-dashboard.js
@@ -1,4 +1,4 @@
-var CO=Object.defineProperty;var c1=e=>{throw TypeError(e)};var EO=(e,t,n)=>t in e?CO(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var f1=(e,t,n)=>EO(e,typeof t!="symbol"?t+"":t,n),qd=(e,t,n)=>t.has(e)||c1("Cannot "+n);var B=(e,t,n)=>(qd(e,t,"read from private field"),n?n.call(e):t.get(e)),me=(e,t,n)=>t.has(e)?c1("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),ae=(e,t,n,r)=>(qd(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),wt=(e,t,n)=>(qd(e,t,"access private method"),n);var zu=(e,t,n,r)=>({set _(a){ae(e,t,a,n)},get _(){return B(e,t,r)}});function TO(e,t){for(var n=0;n<t.length;n++){const r=t[n];if(typeof r!="string"&&!Array.isArray(r)){for(const a in r)if(a!=="default"&&!(a in e)){const o=Object.getOwnPropertyDescriptor(r,a);o&&Object.defineProperty(e,a,o.get?o:{enumerable:!0,get:()=>r[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var Bu=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ce(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var r5={exports:{}},kp={},a5={exports:{}},ce={};/**
+var jO=Object.defineProperty;var c1=e=>{throw TypeError(e)};var $O=(e,t,n)=>t in e?jO(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var p1=(e,t,n)=>$O(e,typeof t!="symbol"?t+"":t,n),qd=(e,t,n)=>t.has(e)||c1("Cannot "+n);var B=(e,t,n)=>(qd(e,t,"read from private field"),n?n.call(e):t.get(e)),me=(e,t,n)=>t.has(e)?c1("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),ae=(e,t,n,r)=>(qd(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),wt=(e,t,n)=>(qd(e,t,"access private method"),n);var zu=(e,t,n,r)=>({set _(a){ae(e,t,a,n)},get _(){return B(e,t,r)}});function NO(e,t){for(var n=0;n<t.length;n++){const r=t[n];if(typeof r!="string"&&!Array.isArray(r)){for(const a in r)if(a!=="default"&&!(a in e)){const o=Object.getOwnPropertyDescriptor(r,a);o&&Object.defineProperty(e,a,o.get?o:{enumerable:!0,get:()=>r[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var Bu=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ae(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var o5={exports:{}},kf={},i5={exports:{}},ce={};/**
  * @license React
  * react.production.min.js
  *
@@ -6,7 +6,7 @@ var CO=Object.defineProperty;var c1=e=>{throw TypeError(e)};var EO=(e,t,n)=>t in
  *
  * This source code is licensed under the MIT license found in the
  * LICENSE file in the root directory of this source tree.
- */var ku=Symbol.for("react.element"),jO=Symbol.for("react.portal"),$O=Symbol.for("react.fragment"),NO=Symbol.for("react.strict_mode"),MO=Symbol.for("react.profiler"),RO=Symbol.for("react.provider"),IO=Symbol.for("react.context"),DO=Symbol.for("react.forward_ref"),LO=Symbol.for("react.suspense"),FO=Symbol.for("react.memo"),zO=Symbol.for("react.lazy"),p1=Symbol.iterator;function BO(e){return e===null||typeof e!="object"?null:(e=p1&&e[p1]||e["@@iterator"],typeof e=="function"?e:null)}var o5={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},i5=Object.assign,s5={};function ls(e,t,n){this.props=e,this.context=t,this.refs=s5,this.updater=n||o5}ls.prototype.isReactComponent={};ls.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};ls.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function l5(){}l5.prototype=ls.prototype;function By(e,t,n){this.props=e,this.context=t,this.refs=s5,this.updater=n||o5}var Hy=By.prototype=new l5;Hy.constructor=By;i5(Hy,ls.prototype);Hy.isPureReactComponent=!0;var d1=Array.isArray,u5=Object.prototype.hasOwnProperty,Gy={current:null},c5={key:!0,ref:!0,__self:!0,__source:!0};function f5(e,t,n){var r,a={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)u5.call(t,r)&&!c5.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(s===1)a.children=n;else if(1<s){for(var l=Array(s),u=0;u<s;u++)l[u]=arguments[u+2];a.children=l}if(e&&e.defaultProps)for(r in s=e.defaultProps,s)a[r]===void 0&&(a[r]=s[r]);return{$$typeof:ku,type:e,key:o,ref:i,props:a,_owner:Gy.current}}function HO(e,t){return{$$typeof:ku,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function Uy(e){return typeof e=="object"&&e!==null&&e.$$typeof===ku}function GO(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var m1=/\/+/g;function Vd(e,t){return typeof e=="object"&&e!==null&&e.key!=null?GO(""+e.key):t.toString(36)}function _c(e,t,n,r,a){var o=typeof e;(o==="undefined"||o==="boolean")&&(e=null);var i=!1;if(e===null)i=!0;else switch(o){case"string":case"number":i=!0;break;case"object":switch(e.$$typeof){case ku:case jO:i=!0}}if(i)return i=e,a=a(i),e=r===""?"."+Vd(i,0):r,d1(a)?(n="",e!=null&&(n=e.replace(m1,"$&/")+"/"),_c(a,t,n,"",function(u){return u})):a!=null&&(Uy(a)&&(a=HO(a,n+(!a.key||i&&i.key===a.key?"":(""+a.key).replace(m1,"$&/")+"/")+e)),t.push(a)),1;if(i=0,r=r===""?".":r+":",d1(e))for(var s=0;s<e.length;s++){o=e[s];var l=r+Vd(o,s);i+=_c(o,t,n,l,a)}else if(l=BO(e),typeof l=="function")for(e=l.call(e),s=0;!(o=e.next()).done;)o=o.value,l=r+Vd(o,s++),i+=_c(o,t,n,l,a);else if(o==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return i}function Hu(e,t,n){if(e==null)return e;var r=[],a=0;return _c(e,r,"","",function(o){return t.call(n,o,a++)}),r}function UO(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var Lt={current:null},Ac={transition:null},WO={ReactCurrentDispatcher:Lt,ReactCurrentBatchConfig:Ac,ReactCurrentOwner:Gy};function p5(){throw Error("act(...) is not supported in production builds of React.")}ce.Children={map:Hu,forEach:function(e,t,n){Hu(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return Hu(e,function(){t++}),t},toArray:function(e){return Hu(e,function(t){return t})||[]},only:function(e){if(!Uy(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};ce.Component=ls;ce.Fragment=$O;ce.Profiler=MO;ce.PureComponent=By;ce.StrictMode=NO;ce.Suspense=LO;ce.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=WO;ce.act=p5;ce.cloneElement=function(e,t,n){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var r=i5({},e.props),a=e.key,o=e.ref,i=e._owner;if(t!=null){if(t.ref!==void 0&&(o=t.ref,i=Gy.current),t.key!==void 0&&(a=""+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(l in t)u5.call(t,l)&&!c5.hasOwnProperty(l)&&(r[l]=t[l]===void 0&&s!==void 0?s[l]:t[l])}var l=arguments.length-2;if(l===1)r.children=n;else if(1<l){s=Array(l);for(var u=0;u<l;u++)s[u]=arguments[u+2];r.children=s}return{$$typeof:ku,type:e.type,key:a,ref:o,props:r,_owner:i}};ce.createContext=function(e){return e={$$typeof:IO,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:RO,_context:e},e.Consumer=e};ce.createElement=f5;ce.createFactory=function(e){var t=f5.bind(null,e);return t.type=e,t};ce.createRef=function(){return{current:null}};ce.forwardRef=function(e){return{$$typeof:DO,render:e}};ce.isValidElement=Uy;ce.lazy=function(e){return{$$typeof:zO,_payload:{_status:-1,_result:e},_init:UO}};ce.memo=function(e,t){return{$$typeof:FO,type:e,compare:t===void 0?null:t}};ce.startTransition=function(e){var t=Ac.transition;Ac.transition={};try{e()}finally{Ac.transition=t}};ce.unstable_act=p5;ce.useCallback=function(e,t){return Lt.current.useCallback(e,t)};ce.useContext=function(e){return Lt.current.useContext(e)};ce.useDebugValue=function(){};ce.useDeferredValue=function(e){return Lt.current.useDeferredValue(e)};ce.useEffect=function(e,t){return Lt.current.useEffect(e,t)};ce.useId=function(){return Lt.current.useId()};ce.useImperativeHandle=function(e,t,n){return Lt.current.useImperativeHandle(e,t,n)};ce.useInsertionEffect=function(e,t){return Lt.current.useInsertionEffect(e,t)};ce.useLayoutEffect=function(e,t){return Lt.current.useLayoutEffect(e,t)};ce.useMemo=function(e,t){return Lt.current.useMemo(e,t)};ce.useReducer=function(e,t,n){return Lt.current.useReducer(e,t,n)};ce.useRef=function(e){return Lt.current.useRef(e)};ce.useState=function(e){return Lt.current.useState(e)};ce.useSyncExternalStore=function(e,t,n){return Lt.current.useSyncExternalStore(e,t,n)};ce.useTransition=function(){return Lt.current.useTransition()};ce.version="18.3.1";a5.exports=ce;var k=a5.exports;const C=Ce(k),d5=TO({__proto__:null,default:C},[k]);/**
+ */var ku=Symbol.for("react.element"),MO=Symbol.for("react.portal"),RO=Symbol.for("react.fragment"),IO=Symbol.for("react.strict_mode"),DO=Symbol.for("react.profiler"),LO=Symbol.for("react.provider"),FO=Symbol.for("react.context"),zO=Symbol.for("react.forward_ref"),BO=Symbol.for("react.suspense"),HO=Symbol.for("react.memo"),GO=Symbol.for("react.lazy"),f1=Symbol.iterator;function UO(e){return e===null||typeof e!="object"?null:(e=f1&&e[f1]||e["@@iterator"],typeof e=="function"?e:null)}var s5={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},l5=Object.assign,u5={};function ls(e,t,n){this.props=e,this.context=t,this.refs=u5,this.updater=n||s5}ls.prototype.isReactComponent={};ls.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};ls.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function c5(){}c5.prototype=ls.prototype;function Bv(e,t,n){this.props=e,this.context=t,this.refs=u5,this.updater=n||s5}var Hv=Bv.prototype=new c5;Hv.constructor=Bv;l5(Hv,ls.prototype);Hv.isPureReactComponent=!0;var d1=Array.isArray,p5=Object.prototype.hasOwnProperty,Gv={current:null},f5={key:!0,ref:!0,__self:!0,__source:!0};function d5(e,t,n){var r,a={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)p5.call(t,r)&&!f5.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(s===1)a.children=n;else if(1<s){for(var l=Array(s),u=0;u<s;u++)l[u]=arguments[u+2];a.children=l}if(e&&e.defaultProps)for(r in s=e.defaultProps,s)a[r]===void 0&&(a[r]=s[r]);return{$$typeof:ku,type:e,key:o,ref:i,props:a,_owner:Gv.current}}function WO(e,t){return{$$typeof:ku,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function Uv(e){return typeof e=="object"&&e!==null&&e.$$typeof===ku}function qO(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var m1=/\/+/g;function Vd(e,t){return typeof e=="object"&&e!==null&&e.key!=null?qO(""+e.key):t.toString(36)}function _c(e,t,n,r,a){var o=typeof e;(o==="undefined"||o==="boolean")&&(e=null);var i=!1;if(e===null)i=!0;else switch(o){case"string":case"number":i=!0;break;case"object":switch(e.$$typeof){case ku:case MO:i=!0}}if(i)return i=e,a=a(i),e=r===""?"."+Vd(i,0):r,d1(a)?(n="",e!=null&&(n=e.replace(m1,"$&/")+"/"),_c(a,t,n,"",function(u){return u})):a!=null&&(Uv(a)&&(a=WO(a,n+(!a.key||i&&i.key===a.key?"":(""+a.key).replace(m1,"$&/")+"/")+e)),t.push(a)),1;if(i=0,r=r===""?".":r+":",d1(e))for(var s=0;s<e.length;s++){o=e[s];var l=r+Vd(o,s);i+=_c(o,t,n,l,a)}else if(l=UO(e),typeof l=="function")for(e=l.call(e),s=0;!(o=e.next()).done;)o=o.value,l=r+Vd(o,s++),i+=_c(o,t,n,l,a);else if(o==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return i}function Hu(e,t,n){if(e==null)return e;var r=[],a=0;return _c(e,r,"","",function(o){return t.call(n,o,a++)}),r}function VO(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var Lt={current:null},Cc={transition:null},KO={ReactCurrentDispatcher:Lt,ReactCurrentBatchConfig:Cc,ReactCurrentOwner:Gv};function m5(){throw Error("act(...) is not supported in production builds of React.")}ce.Children={map:Hu,forEach:function(e,t,n){Hu(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return Hu(e,function(){t++}),t},toArray:function(e){return Hu(e,function(t){return t})||[]},only:function(e){if(!Uv(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};ce.Component=ls;ce.Fragment=RO;ce.Profiler=DO;ce.PureComponent=Bv;ce.StrictMode=IO;ce.Suspense=BO;ce.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=KO;ce.act=m5;ce.cloneElement=function(e,t,n){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var r=l5({},e.props),a=e.key,o=e.ref,i=e._owner;if(t!=null){if(t.ref!==void 0&&(o=t.ref,i=Gv.current),t.key!==void 0&&(a=""+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(l in t)p5.call(t,l)&&!f5.hasOwnProperty(l)&&(r[l]=t[l]===void 0&&s!==void 0?s[l]:t[l])}var l=arguments.length-2;if(l===1)r.children=n;else if(1<l){s=Array(l);for(var u=0;u<l;u++)s[u]=arguments[u+2];r.children=s}return{$$typeof:ku,type:e.type,key:a,ref:o,props:r,_owner:i}};ce.createContext=function(e){return e={$$typeof:FO,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:LO,_context:e},e.Consumer=e};ce.createElement=d5;ce.createFactory=function(e){var t=d5.bind(null,e);return t.type=e,t};ce.createRef=function(){return{current:null}};ce.forwardRef=function(e){return{$$typeof:zO,render:e}};ce.isValidElement=Uv;ce.lazy=function(e){return{$$typeof:GO,_payload:{_status:-1,_result:e},_init:VO}};ce.memo=function(e,t){return{$$typeof:HO,type:e,compare:t===void 0?null:t}};ce.startTransition=function(e){var t=Cc.transition;Cc.transition={};try{e()}finally{Cc.transition=t}};ce.unstable_act=m5;ce.useCallback=function(e,t){return Lt.current.useCallback(e,t)};ce.useContext=function(e){return Lt.current.useContext(e)};ce.useDebugValue=function(){};ce.useDeferredValue=function(e){return Lt.current.useDeferredValue(e)};ce.useEffect=function(e,t){return Lt.current.useEffect(e,t)};ce.useId=function(){return Lt.current.useId()};ce.useImperativeHandle=function(e,t,n){return Lt.current.useImperativeHandle(e,t,n)};ce.useInsertionEffect=function(e,t){return Lt.current.useInsertionEffect(e,t)};ce.useLayoutEffect=function(e,t){return Lt.current.useLayoutEffect(e,t)};ce.useMemo=function(e,t){return Lt.current.useMemo(e,t)};ce.useReducer=function(e,t,n){return Lt.current.useReducer(e,t,n)};ce.useRef=function(e){return Lt.current.useRef(e)};ce.useState=function(e){return Lt.current.useState(e)};ce.useSyncExternalStore=function(e,t,n){return Lt.current.useSyncExternalStore(e,t,n)};ce.useTransition=function(){return Lt.current.useTransition()};ce.version="18.3.1";i5.exports=ce;var k=i5.exports;const A=Ae(k),h5=NO({__proto__:null,default:A},[k]);/**
  * @license React
  * react-jsx-runtime.production.min.js
  *
@@ -14,7 +14,7 @@ var CO=Object.defineProperty;var c1=e=>{throw TypeError(e)};var EO=(e,t,n)=>t in
  *
  * This source code is licensed under the MIT license found in the
  * LICENSE file in the root directory of this source tree.
- */var qO=k,VO=Symbol.for("react.element"),KO=Symbol.for("react.fragment"),XO=Object.prototype.hasOwnProperty,YO=qO.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,QO={key:!0,ref:!0,__self:!0,__source:!0};function m5(e,t,n){var r,a={},o=null,i=null;n!==void 0&&(o=""+n),t.key!==void 0&&(o=""+t.key),t.ref!==void 0&&(i=t.ref);for(r in t)XO.call(t,r)&&!QO.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)a[r]===void 0&&(a[r]=t[r]);return{$$typeof:VO,type:e,key:o,ref:i,props:a,_owner:YO.current}}kp.Fragment=KO;kp.jsx=m5;kp.jsxs=m5;r5.exports=kp;var b=r5.exports,Gc={},h5={exports:{}},on={},v5={exports:{}},y5={};/**
+ */var XO=k,YO=Symbol.for("react.element"),QO=Symbol.for("react.fragment"),ZO=Object.prototype.hasOwnProperty,JO=XO.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,ek={key:!0,ref:!0,__self:!0,__source:!0};function v5(e,t,n){var r,a={},o=null,i=null;n!==void 0&&(o=""+n),t.key!==void 0&&(o=""+t.key),t.ref!==void 0&&(i=t.ref);for(r in t)ZO.call(t,r)&&!ek.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)a[r]===void 0&&(a[r]=t[r]);return{$$typeof:YO,type:e,key:o,ref:i,props:a,_owner:JO.current}}kf.Fragment=QO;kf.jsx=v5;kf.jsxs=v5;o5.exports=kf;var b=o5.exports,Gc={},y5={exports:{}},on={},g5={exports:{}},x5={};/**
  * @license React
  * scheduler.production.min.js
  *
@@ -22,7 +22,7 @@ var CO=Object.defineProperty;var c1=e=>{throw TypeError(e)};var EO=(e,t,n)=>t in
  *
  * This source code is licensed under the MIT license found in the
  * LICENSE file in the root directory of this source tree.
- */(function(e){function t($,D){var H=$.length;$.push(D);e:for(;0<H;){var W=H-1>>>1,G=$[W];if(0<a(G,D))$[W]=D,$[H]=G,H=W;else break e}}function n($){return $.length===0?null:$[0]}function r($){if($.length===0)return null;var D=$[0],H=$.pop();if(H!==D){$[0]=H;e:for(var W=0,G=$.length,Z=G>>>1;W<Z;){var ie=2*(W+1)-1,ve=$[ie],Pe=ie+1,J=$[Pe];if(0>a(ve,H))Pe<G&&0>a(J,ve)?($[W]=J,$[Pe]=H,W=Pe):($[W]=ve,$[ie]=H,W=ie);else if(Pe<G&&0>a(J,H))$[W]=J,$[Pe]=H,W=Pe;else break e}}return D}function a($,D){var H=$.sortIndex-D.sortIndex;return H!==0?H:$.id-D.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,s=i.now();e.unstable_now=function(){return i.now()-s}}var l=[],u=[],f=1,c=null,p=3,d=!1,h=!1,m=!1,g=typeof setTimeout=="function"?setTimeout:null,v=typeof clearTimeout=="function"?clearTimeout:null,y=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function x($){for(var D=n(u);D!==null;){if(D.callback===null)r(u);else if(D.startTime<=$)r(u),D.sortIndex=D.expirationTime,t(l,D);else break;D=n(u)}}function P($){if(m=!1,x($),!h)if(n(l)!==null)h=!0,R(w);else{var D=n(u);D!==null&&L(P,D.startTime-$)}}function w($,D){h=!1,m&&(m=!1,v(_),_=-1),d=!0;var H=p;try{for(x(D),c=n(l);c!==null&&(!(c.expirationTime>D)||$&&!E());){var W=c.callback;if(typeof W=="function"){c.callback=null,p=c.priorityLevel;var G=W(c.expirationTime<=D);D=e.unstable_now(),typeof G=="function"?c.callback=G:c===n(l)&&r(l),x(D)}else r(l);c=n(l)}if(c!==null)var Z=!0;else{var ie=n(u);ie!==null&&L(P,ie.startTime-D),Z=!1}return Z}finally{c=null,p=H,d=!1}}var S=!1,O=null,_=-1,A=5,j=-1;function E(){return!(e.unstable_now()-j<A)}function T(){if(O!==null){var $=e.unstable_now();j=$;var D=!0;try{D=O(!0,$)}finally{D?N():(S=!1,O=null)}}else S=!1}var N;if(typeof y=="function")N=function(){y(T)};else if(typeof MessageChannel<"u"){var M=new MessageChannel,I=M.port2;M.port1.onmessage=T,N=function(){I.postMessage(null)}}else N=function(){g(T,0)};function R($){O=$,S||(S=!0,N())}function L($,D){_=g(function(){$(e.unstable_now())},D)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function($){$.callback=null},e.unstable_continueExecution=function(){h||d||(h=!0,R(w))},e.unstable_forceFrameRate=function($){0>$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):A=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return p},e.unstable_getFirstCallbackNode=function(){return n(l)},e.unstable_next=function($){switch(p){case 1:case 2:case 3:var D=3;break;default:D=p}var H=p;p=D;try{return $()}finally{p=H}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,D){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var H=p;p=$;try{return D()}finally{p=H}},e.unstable_scheduleCallback=function($,D,H){var W=e.unstable_now();switch(typeof H=="object"&&H!==null?(H=H.delay,H=typeof H=="number"&&0<H?W+H:W):H=W,$){case 1:var G=-1;break;case 2:G=250;break;case 5:G=1073741823;break;case 4:G=1e4;break;default:G=5e3}return G=H+G,$={id:f++,callback:D,priorityLevel:$,startTime:H,expirationTime:G,sortIndex:-1},H>W?($.sortIndex=H,t(u,$),n(l)===null&&$===n(u)&&(m?(v(_),_=-1):m=!0,L(P,H-W))):($.sortIndex=G,t(l,$),h||d||(h=!0,R(w))),$},e.unstable_shouldYield=E,e.unstable_wrapCallback=function($){var D=p;return function(){var H=p;p=D;try{return $.apply(this,arguments)}finally{p=H}}}})(y5);v5.exports=y5;var ZO=v5.exports;/**
+ */(function(e){function t($,D){var H=$.length;$.push(D);e:for(;0<H;){var W=H-1>>>1,G=$[W];if(0<a(G,D))$[W]=D,$[H]=G,H=W;else break e}}function n($){return $.length===0?null:$[0]}function r($){if($.length===0)return null;var D=$[0],H=$.pop();if(H!==D){$[0]=H;e:for(var W=0,G=$.length,Z=G>>>1;W<Z;){var ie=2*(W+1)-1,ve=$[ie],Pe=ie+1,J=$[Pe];if(0>a(ve,H))Pe<G&&0>a(J,ve)?($[W]=J,$[Pe]=H,W=Pe):($[W]=ve,$[ie]=H,W=ie);else if(Pe<G&&0>a(J,H))$[W]=J,$[Pe]=H,W=Pe;else break e}}return D}function a($,D){var H=$.sortIndex-D.sortIndex;return H!==0?H:$.id-D.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,s=i.now();e.unstable_now=function(){return i.now()-s}}var l=[],u=[],p=1,c=null,f=3,d=!1,h=!1,m=!1,g=typeof setTimeout=="function"?setTimeout:null,v=typeof clearTimeout=="function"?clearTimeout:null,y=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function x($){for(var D=n(u);D!==null;){if(D.callback===null)r(u);else if(D.startTime<=$)r(u),D.sortIndex=D.expirationTime,t(l,D);else break;D=n(u)}}function P($){if(m=!1,x($),!h)if(n(l)!==null)h=!0,R(w);else{var D=n(u);D!==null&&L(P,D.startTime-$)}}function w($,D){h=!1,m&&(m=!1,v(_),_=-1),d=!0;var H=f;try{for(x(D),c=n(l);c!==null&&(!(c.expirationTime>D)||$&&!E());){var W=c.callback;if(typeof W=="function"){c.callback=null,f=c.priorityLevel;var G=W(c.expirationTime<=D);D=e.unstable_now(),typeof G=="function"?c.callback=G:c===n(l)&&r(l),x(D)}else r(l);c=n(l)}if(c!==null)var Z=!0;else{var ie=n(u);ie!==null&&L(P,ie.startTime-D),Z=!1}return Z}finally{c=null,f=H,d=!1}}var S=!1,O=null,_=-1,C=5,j=-1;function E(){return!(e.unstable_now()-j<C)}function T(){if(O!==null){var $=e.unstable_now();j=$;var D=!0;try{D=O(!0,$)}finally{D?N():(S=!1,O=null)}}else S=!1}var N;if(typeof y=="function")N=function(){y(T)};else if(typeof MessageChannel<"u"){var M=new MessageChannel,I=M.port2;M.port1.onmessage=T,N=function(){I.postMessage(null)}}else N=function(){g(T,0)};function R($){O=$,S||(S=!0,N())}function L($,D){_=g(function(){$(e.unstable_now())},D)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function($){$.callback=null},e.unstable_continueExecution=function(){h||d||(h=!0,R(w))},e.unstable_forceFrameRate=function($){0>$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):C=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_getFirstCallbackNode=function(){return n(l)},e.unstable_next=function($){switch(f){case 1:case 2:case 3:var D=3;break;default:D=f}var H=f;f=D;try{return $()}finally{f=H}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,D){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var H=f;f=$;try{return D()}finally{f=H}},e.unstable_scheduleCallback=function($,D,H){var W=e.unstable_now();switch(typeof H=="object"&&H!==null?(H=H.delay,H=typeof H=="number"&&0<H?W+H:W):H=W,$){case 1:var G=-1;break;case 2:G=250;break;case 5:G=1073741823;break;case 4:G=1e4;break;default:G=5e3}return G=H+G,$={id:p++,callback:D,priorityLevel:$,startTime:H,expirationTime:G,sortIndex:-1},H>W?($.sortIndex=H,t(u,$),n(l)===null&&$===n(u)&&(m?(v(_),_=-1):m=!0,L(P,H-W))):($.sortIndex=G,t(l,$),h||d||(h=!0,R(w))),$},e.unstable_shouldYield=E,e.unstable_wrapCallback=function($){var D=f;return function(){var H=f;f=D;try{return $.apply(this,arguments)}finally{f=H}}}})(x5);g5.exports=x5;var tk=g5.exports;/**
  * @license React
  * react-dom.production.min.js
  *
@@ -30,19 +30,19 @@ var CO=Object.defineProperty;var c1=e=>{throw TypeError(e)};var EO=(e,t,n)=>t in
  *
  * This source code is licensed under the MIT license found in the
  * LICENSE file in the root directory of this source tree.
- */var JO=k,an=ZO;function U(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var g5=new Set,xl={};function Eo(e,t){Ai(e,t),Ai(e+"Capture",t)}function Ai(e,t){for(xl[e]=t,e=0;e<t.length;e++)g5.add(t[e])}var Mr=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),oh=Object.prototype.hasOwnProperty,ek=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,h1={},v1={};function tk(e){return oh.call(v1,e)?!0:oh.call(h1,e)?!1:ek.test(e)?v1[e]=!0:(h1[e]=!0,!1)}function nk(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function rk(e,t,n,r){if(t===null||typeof t>"u"||nk(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Ft(e,t,n,r,a,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var xt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){xt[e]=new Ft(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];xt[t]=new Ft(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){xt[e]=new Ft(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){xt[e]=new Ft(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){xt[e]=new Ft(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){xt[e]=new Ft(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){xt[e]=new Ft(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){xt[e]=new Ft(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){xt[e]=new Ft(e,5,!1,e.toLowerCase(),null,!1,!1)});var Wy=/[\-:]([a-z])/g;function qy(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Wy,qy);xt[t]=new Ft(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Wy,qy);xt[t]=new Ft(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Wy,qy);xt[t]=new Ft(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){xt[e]=new Ft(e,1,!1,e.toLowerCase(),null,!1,!1)});xt.xlinkHref=new Ft("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){xt[e]=new Ft(e,1,!1,e.toLowerCase(),null,!0,!0)});function Vy(e,t,n,r){var a=xt.hasOwnProperty(t)?xt[t]:null;(a!==null?a.type!==0:r||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(rk(t,n,a,r)&&(n=null),r||a===null?tk(t)&&(n===null?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=n===null?a.type===3?!1:"":n:(t=a.attributeName,r=a.attributeNamespace,n===null?e.removeAttribute(t):(a=a.type,n=a===3||a===4&&n===!0?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}var Gr=JO.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Gu=Symbol.for("react.element"),Uo=Symbol.for("react.portal"),Wo=Symbol.for("react.fragment"),Ky=Symbol.for("react.strict_mode"),ih=Symbol.for("react.profiler"),x5=Symbol.for("react.provider"),w5=Symbol.for("react.context"),Xy=Symbol.for("react.forward_ref"),sh=Symbol.for("react.suspense"),lh=Symbol.for("react.suspense_list"),Yy=Symbol.for("react.memo"),ea=Symbol.for("react.lazy"),b5=Symbol.for("react.offscreen"),y1=Symbol.iterator;function js(e){return e===null||typeof e!="object"?null:(e=y1&&e[y1]||e["@@iterator"],typeof e=="function"?e:null)}var Ue=Object.assign,Kd;function Qs(e){if(Kd===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Kd=t&&t[1]||""}return`
+ */var nk=k,an=tk;function U(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var w5=new Set,xl={};function Eo(e,t){Ci(e,t),Ci(e+"Capture",t)}function Ci(e,t){for(xl[e]=t,e=0;e<t.length;e++)w5.add(t[e])}var Mr=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),oh=Object.prototype.hasOwnProperty,rk=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,h1={},v1={};function ak(e){return oh.call(v1,e)?!0:oh.call(h1,e)?!1:rk.test(e)?v1[e]=!0:(h1[e]=!0,!1)}function ok(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function ik(e,t,n,r){if(t===null||typeof t>"u"||ok(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Ft(e,t,n,r,a,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var xt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){xt[e]=new Ft(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];xt[t]=new Ft(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){xt[e]=new Ft(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){xt[e]=new Ft(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){xt[e]=new Ft(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){xt[e]=new Ft(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){xt[e]=new Ft(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){xt[e]=new Ft(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){xt[e]=new Ft(e,5,!1,e.toLowerCase(),null,!1,!1)});var Wv=/[\-:]([a-z])/g;function qv(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Wv,qv);xt[t]=new Ft(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Wv,qv);xt[t]=new Ft(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Wv,qv);xt[t]=new Ft(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){xt[e]=new Ft(e,1,!1,e.toLowerCase(),null,!1,!1)});xt.xlinkHref=new Ft("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){xt[e]=new Ft(e,1,!1,e.toLowerCase(),null,!0,!0)});function Vv(e,t,n,r){var a=xt.hasOwnProperty(t)?xt[t]:null;(a!==null?a.type!==0:r||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(ik(t,n,a,r)&&(n=null),r||a===null?ak(t)&&(n===null?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=n===null?a.type===3?!1:"":n:(t=a.attributeName,r=a.attributeNamespace,n===null?e.removeAttribute(t):(a=a.type,n=a===3||a===4&&n===!0?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}var Gr=nk.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Gu=Symbol.for("react.element"),Uo=Symbol.for("react.portal"),Wo=Symbol.for("react.fragment"),Kv=Symbol.for("react.strict_mode"),ih=Symbol.for("react.profiler"),b5=Symbol.for("react.provider"),P5=Symbol.for("react.context"),Xv=Symbol.for("react.forward_ref"),sh=Symbol.for("react.suspense"),lh=Symbol.for("react.suspense_list"),Yv=Symbol.for("react.memo"),ea=Symbol.for("react.lazy"),S5=Symbol.for("react.offscreen"),y1=Symbol.iterator;function js(e){return e===null||typeof e!="object"?null:(e=y1&&e[y1]||e["@@iterator"],typeof e=="function"?e:null)}var Ue=Object.assign,Kd;function Qs(e){if(Kd===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Kd=t&&t[1]||""}return`
 `+Kd+e}var Xd=!1;function Yd(e,t){if(!e||Xd)return"";Xd=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(u){var r=u}Reflect.construct(e,[],t)}else{try{t.call()}catch(u){r=u}e.call(t.prototype)}else{try{throw Error()}catch(u){r=u}e()}}catch(u){if(u&&r&&typeof u.stack=="string"){for(var a=u.stack.split(`
 `),o=r.stack.split(`
 `),i=a.length-1,s=o.length-1;1<=i&&0<=s&&a[i]!==o[s];)s--;for(;1<=i&&0<=s;i--,s--)if(a[i]!==o[s]){if(i!==1||s!==1)do if(i--,s--,0>s||a[i]!==o[s]){var l=`
-`+a[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}while(1<=i&&0<=s);break}}}finally{Xd=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Qs(e):""}function ak(e){switch(e.tag){case 5:return Qs(e.type);case 16:return Qs("Lazy");case 13:return Qs("Suspense");case 19:return Qs("SuspenseList");case 0:case 2:case 15:return e=Yd(e.type,!1),e;case 11:return e=Yd(e.type.render,!1),e;case 1:return e=Yd(e.type,!0),e;default:return""}}function uh(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Wo:return"Fragment";case Uo:return"Portal";case ih:return"Profiler";case Ky:return"StrictMode";case sh:return"Suspense";case lh:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case w5:return(e.displayName||"Context")+".Consumer";case x5:return(e._context.displayName||"Context")+".Provider";case Xy:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Yy:return t=e.displayName||null,t!==null?t:uh(e.type)||"Memo";case ea:t=e._payload,e=e._init;try{return uh(e(t))}catch{}}return null}function ok(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return uh(t);case 8:return t===Ky?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ka(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function P5(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ik(e){var t=P5(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Uu(e){e._valueTracker||(e._valueTracker=ik(e))}function S5(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=P5(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Uc(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function ch(e,t){var n=t.checked;return Ue({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function g1(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ka(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function O5(e,t){t=t.checked,t!=null&&Vy(e,"checked",t,!1)}function fh(e,t){O5(e,t);var n=ka(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?ph(e,t.type,n):t.hasOwnProperty("defaultValue")&&ph(e,t.type,ka(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function x1(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function ph(e,t,n){(t!=="number"||Uc(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Zs=Array.isArray;function oi(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ka(n),t=null,a=0;a<e.length;a++){if(e[a].value===n){e[a].selected=!0,r&&(e[a].defaultSelected=!0);return}t!==null||e[a].disabled||(t=e[a])}t!==null&&(t.selected=!0)}}function dh(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(U(91));return Ue({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function w1(e,t){var n=t.value;if(n==null){if(n=t.children,t=t.defaultValue,n!=null){if(t!=null)throw Error(U(92));if(Zs(n)){if(1<n.length)throw Error(U(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:ka(n)}}function k5(e,t){var n=ka(t.value),r=ka(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function b1(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}function _5(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function mh(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?_5(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Wu,A5=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,r,a){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,a)})}:e}(function(e,t){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=t;else{for(Wu=Wu||document.createElement("div"),Wu.innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=Wu.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function wl(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var rl={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},sk=["Webkit","ms","Moz","O"];Object.keys(rl).forEach(function(e){sk.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),rl[t]=rl[e]})});function C5(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||rl.hasOwnProperty(e)&&rl[e]?(""+t).trim():t+"px"}function E5(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,a=C5(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}var lk=Ue({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function hh(e,t){if(t){if(lk[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(U(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(U(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(U(61))}if(t.style!=null&&typeof t.style!="object")throw Error(U(62))}}function vh(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var yh=null;function Qy(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var gh=null,ii=null,si=null;function P1(e){if(e=Cu(e)){if(typeof gh!="function")throw Error(U(280));var t=e.stateNode;t&&(t=Tp(t),gh(e.stateNode,e.type,t))}}function T5(e){ii?si?si.push(e):si=[e]:ii=e}function j5(){if(ii){var e=ii,t=si;if(si=ii=null,P1(e),t)for(e=0;e<t.length;e++)P1(t[e])}}function $5(e,t){return e(t)}function N5(){}var Qd=!1;function M5(e,t,n){if(Qd)return e(t,n);Qd=!0;try{return $5(e,t,n)}finally{Qd=!1,(ii!==null||si!==null)&&(N5(),j5())}}function bl(e,t){var n=e.stateNode;if(n===null)return null;var r=Tp(n);if(r===null)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(e=e.type,r=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!r;break e;default:e=!1}if(e)return null;if(n&&typeof n!="function")throw Error(U(231,t,typeof n));return n}var xh=!1;if(Mr)try{var $s={};Object.defineProperty($s,"passive",{get:function(){xh=!0}}),window.addEventListener("test",$s,$s),window.removeEventListener("test",$s,$s)}catch{xh=!1}function uk(e,t,n,r,a,o,i,s,l){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(f){this.onError(f)}}var al=!1,Wc=null,qc=!1,wh=null,ck={onError:function(e){al=!0,Wc=e}};function fk(e,t,n,r,a,o,i,s,l){al=!1,Wc=null,uk.apply(ck,arguments)}function pk(e,t,n,r,a,o,i,s,l){if(fk.apply(this,arguments),al){if(al){var u=Wc;al=!1,Wc=null}else throw Error(U(198));qc||(qc=!0,wh=u)}}function To(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,t.flags&4098&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function R5(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function S1(e){if(To(e)!==e)throw Error(U(188))}function dk(e){var t=e.alternate;if(!t){if(t=To(e),t===null)throw Error(U(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(a===null)break;var o=a.alternate;if(o===null){if(r=a.return,r!==null){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return S1(a),e;if(o===r)return S1(a),t;o=o.sibling}throw Error(U(188))}if(n.return!==r.return)n=a,r=o;else{for(var i=!1,s=a.child;s;){if(s===n){i=!0,n=a,r=o;break}if(s===r){i=!0,r=a,n=o;break}s=s.sibling}if(!i){for(s=o.child;s;){if(s===n){i=!0,n=o,r=a;break}if(s===r){i=!0,r=o,n=a;break}s=s.sibling}if(!i)throw Error(U(189))}}if(n.alternate!==r)throw Error(U(190))}if(n.tag!==3)throw Error(U(188));return n.stateNode.current===n?e:t}function I5(e){return e=dk(e),e!==null?D5(e):null}function D5(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=D5(e);if(t!==null)return t;e=e.sibling}return null}var L5=an.unstable_scheduleCallback,O1=an.unstable_cancelCallback,mk=an.unstable_shouldYield,hk=an.unstable_requestPaint,Ke=an.unstable_now,vk=an.unstable_getCurrentPriorityLevel,Zy=an.unstable_ImmediatePriority,F5=an.unstable_UserBlockingPriority,Vc=an.unstable_NormalPriority,yk=an.unstable_LowPriority,z5=an.unstable_IdlePriority,_p=null,ur=null;function gk(e){if(ur&&typeof ur.onCommitFiberRoot=="function")try{ur.onCommitFiberRoot(_p,e,void 0,(e.current.flags&128)===128)}catch{}}var Hn=Math.clz32?Math.clz32:bk,xk=Math.log,wk=Math.LN2;function bk(e){return e>>>=0,e===0?32:31-(xk(e)/wk|0)|0}var qu=64,Vu=4194304;function Js(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Kc(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,a=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var s=i&~a;s!==0?r=Js(s):(o&=i,o!==0&&(r=Js(o)))}else i=n&~a,i!==0?r=Js(i):o!==0&&(r=Js(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&a)&&(a=r&-r,o=t&-t,a>=o||a===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0<t;)n=31-Hn(t),a=1<<n,r|=e[n],t&=~a;return r}function Pk(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Sk(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,a=e.expirationTimes,o=e.pendingLanes;0<o;){var i=31-Hn(o),s=1<<i,l=a[i];l===-1?(!(s&n)||s&r)&&(a[i]=Pk(s,t)):l<=t&&(e.expiredLanes|=s),o&=~s}}function bh(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function B5(){var e=qu;return qu<<=1,!(qu&4194240)&&(qu=64),e}function Zd(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function _u(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Hn(t),e[t]=n}function Ok(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var a=31-Hn(n),o=1<<a;t[a]=0,r[a]=-1,e[a]=-1,n&=~o}}function Jy(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-Hn(n),a=1<<r;a&t|e[r]&t&&(e[r]|=t),n&=~a}}var ke=0;function H5(e){return e&=-e,1<e?4<e?e&268435455?16:536870912:4:1}var G5,e0,U5,W5,q5,Ph=!1,Ku=[],va=null,ya=null,ga=null,Pl=new Map,Sl=new Map,ra=[],kk="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function k1(e,t){switch(e){case"focusin":case"focusout":va=null;break;case"dragenter":case"dragleave":ya=null;break;case"mouseover":case"mouseout":ga=null;break;case"pointerover":case"pointerout":Pl.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Sl.delete(t.pointerId)}}function Ns(e,t,n,r,a,o){return e===null||e.nativeEvent!==o?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:o,targetContainers:[a]},t!==null&&(t=Cu(t),t!==null&&e0(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,a!==null&&t.indexOf(a)===-1&&t.push(a),e)}function _k(e,t,n,r,a){switch(t){case"focusin":return va=Ns(va,e,t,n,r,a),!0;case"dragenter":return ya=Ns(ya,e,t,n,r,a),!0;case"mouseover":return ga=Ns(ga,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return Pl.set(o,Ns(Pl.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,Sl.set(o,Ns(Sl.get(o)||null,e,t,n,r,a)),!0}return!1}function V5(e){var t=Xa(e.target);if(t!==null){var n=To(t);if(n!==null){if(t=n.tag,t===13){if(t=R5(n),t!==null){e.blockedOn=t,q5(e.priority,function(){U5(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Cc(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=Sh(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(n===null){n=e.nativeEvent;var r=new n.constructor(n.type,n);yh=r,n.target.dispatchEvent(r),yh=null}else return t=Cu(n),t!==null&&e0(t),e.blockedOn=n,!1;t.shift()}return!0}function _1(e,t,n){Cc(e)&&n.delete(t)}function Ak(){Ph=!1,va!==null&&Cc(va)&&(va=null),ya!==null&&Cc(ya)&&(ya=null),ga!==null&&Cc(ga)&&(ga=null),Pl.forEach(_1),Sl.forEach(_1)}function Ms(e,t){e.blockedOn===t&&(e.blockedOn=null,Ph||(Ph=!0,an.unstable_scheduleCallback(an.unstable_NormalPriority,Ak)))}function Ol(e){function t(a){return Ms(a,e)}if(0<Ku.length){Ms(Ku[0],e);for(var n=1;n<Ku.length;n++){var r=Ku[n];r.blockedOn===e&&(r.blockedOn=null)}}for(va!==null&&Ms(va,e),ya!==null&&Ms(ya,e),ga!==null&&Ms(ga,e),Pl.forEach(t),Sl.forEach(t),n=0;n<ra.length;n++)r=ra[n],r.blockedOn===e&&(r.blockedOn=null);for(;0<ra.length&&(n=ra[0],n.blockedOn===null);)V5(n),n.blockedOn===null&&ra.shift()}var li=Gr.ReactCurrentBatchConfig,Xc=!0;function Ck(e,t,n,r){var a=ke,o=li.transition;li.transition=null;try{ke=1,t0(e,t,n,r)}finally{ke=a,li.transition=o}}function Ek(e,t,n,r){var a=ke,o=li.transition;li.transition=null;try{ke=4,t0(e,t,n,r)}finally{ke=a,li.transition=o}}function t0(e,t,n,r){if(Xc){var a=Sh(e,t,n,r);if(a===null)lm(e,t,r,Yc,n),k1(e,r);else if(_k(a,e,t,n,r))r.stopPropagation();else if(k1(e,r),t&4&&-1<kk.indexOf(e)){for(;a!==null;){var o=Cu(a);if(o!==null&&G5(o),o=Sh(e,t,n,r),o===null&&lm(e,t,r,Yc,n),o===a)break;a=o}a!==null&&r.stopPropagation()}else lm(e,t,r,null,n)}}var Yc=null;function Sh(e,t,n,r){if(Yc=null,e=Qy(r),e=Xa(e),e!==null)if(t=To(e),t===null)e=null;else if(n=t.tag,n===13){if(e=R5(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Yc=e,null}function K5(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(vk()){case Zy:return 1;case F5:return 4;case Vc:case yk:return 16;case z5:return 536870912;default:return 16}default:return 16}}var fa=null,n0=null,Ec=null;function X5(){if(Ec)return Ec;var e,t=n0,n=t.length,r,a="value"in fa?fa.value:fa.textContent,o=a.length;for(e=0;e<n&&t[e]===a[e];e++);var i=n-e;for(r=1;r<=i&&t[n-r]===a[o-r];r++);return Ec=a.slice(e,1<r?1-r:void 0)}function Tc(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function Xu(){return!0}function A1(){return!1}function sn(e){function t(n,r,a,o,i){this._reactName=n,this._targetInst=a,this.type=r,this.nativeEvent=o,this.target=i,this.currentTarget=null;for(var s in e)e.hasOwnProperty(s)&&(n=e[s],this[s]=n?n(o):o[s]);return this.isDefaultPrevented=(o.defaultPrevented!=null?o.defaultPrevented:o.returnValue===!1)?Xu:A1,this.isPropagationStopped=A1,this}return Ue(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=Xu)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=Xu)},persist:function(){},isPersistent:Xu}),t}var us={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},r0=sn(us),Au=Ue({},us,{view:0,detail:0}),Tk=sn(Au),Jd,em,Rs,Ap=Ue({},Au,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:a0,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Rs&&(Rs&&e.type==="mousemove"?(Jd=e.screenX-Rs.screenX,em=e.screenY-Rs.screenY):em=Jd=0,Rs=e),Jd)},movementY:function(e){return"movementY"in e?e.movementY:em}}),C1=sn(Ap),jk=Ue({},Ap,{dataTransfer:0}),$k=sn(jk),Nk=Ue({},Au,{relatedTarget:0}),tm=sn(Nk),Mk=Ue({},us,{animationName:0,elapsedTime:0,pseudoElement:0}),Rk=sn(Mk),Ik=Ue({},us,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Dk=sn(Ik),Lk=Ue({},us,{data:0}),E1=sn(Lk),Fk={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},zk={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Bk={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Hk(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=Bk[e])?!!t[e]:!1}function a0(){return Hk}var Gk=Ue({},Au,{key:function(e){if(e.key){var t=Fk[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=Tc(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?zk[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:a0,charCode:function(e){return e.type==="keypress"?Tc(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?Tc(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),Uk=sn(Gk),Wk=Ue({},Ap,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),T1=sn(Wk),qk=Ue({},Au,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:a0}),Vk=sn(qk),Kk=Ue({},us,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xk=sn(Kk),Yk=Ue({},Ap,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Qk=sn(Yk),Zk=[9,13,27,32],o0=Mr&&"CompositionEvent"in window,ol=null;Mr&&"documentMode"in document&&(ol=document.documentMode);var Jk=Mr&&"TextEvent"in window&&!ol,Y5=Mr&&(!o0||ol&&8<ol&&11>=ol),j1=" ",$1=!1;function Q5(e,t){switch(e){case"keyup":return Zk.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Z5(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var qo=!1;function e_(e,t){switch(e){case"compositionend":return Z5(t);case"keypress":return t.which!==32?null:($1=!0,j1);case"textInput":return e=t.data,e===j1&&$1?null:e;default:return null}}function t_(e,t){if(qo)return e==="compositionend"||!o0&&Q5(e,t)?(e=X5(),Ec=n0=fa=null,qo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Y5&&t.locale!=="ko"?null:t.data;default:return null}}var n_={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function N1(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!n_[e.type]:t==="textarea"}function J5(e,t,n,r){T5(r),t=Qc(t,"onChange"),0<t.length&&(n=new r0("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var il=null,kl=null;function r_(e){c9(e,0)}function Cp(e){var t=Xo(e);if(S5(t))return e}function a_(e,t){if(e==="change")return t}var e9=!1;if(Mr){var nm;if(Mr){var rm="oninput"in document;if(!rm){var M1=document.createElement("div");M1.setAttribute("oninput","return;"),rm=typeof M1.oninput=="function"}nm=rm}else nm=!1;e9=nm&&(!document.documentMode||9<document.documentMode)}function R1(){il&&(il.detachEvent("onpropertychange",t9),kl=il=null)}function t9(e){if(e.propertyName==="value"&&Cp(kl)){var t=[];J5(t,kl,e,Qy(e)),M5(r_,t)}}function o_(e,t,n){e==="focusin"?(R1(),il=t,kl=n,il.attachEvent("onpropertychange",t9)):e==="focusout"&&R1()}function i_(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return Cp(kl)}function s_(e,t){if(e==="click")return Cp(t)}function l_(e,t){if(e==="input"||e==="change")return Cp(t)}function u_(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Un=typeof Object.is=="function"?Object.is:u_;function _l(e,t){if(Un(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var a=n[r];if(!oh.call(t,a)||!Un(e[a],t[a]))return!1}return!0}function I1(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function D1(e,t){var n=I1(e);e=0;for(var r;n;){if(n.nodeType===3){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=I1(n)}}function n9(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?n9(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function r9(){for(var e=window,t=Uc();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Uc(e.document)}return t}function i0(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function c_(e){var t=r9(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&n9(n.ownerDocument.documentElement,n)){if(r!==null&&i0(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var a=n.textContent.length,o=Math.min(r.start,a);r=r.end===void 0?o:Math.min(r.end,a),!e.extend&&o>r&&(a=r,r=o,o=a),a=D1(n,o);var i=D1(n,r);a&&i&&(e.rangeCount!==1||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(a.node,a.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n<t.length;n++)e=t[n],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var f_=Mr&&"documentMode"in document&&11>=document.documentMode,Vo=null,Oh=null,sl=null,kh=!1;function L1(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;kh||Vo==null||Vo!==Uc(r)||(r=Vo,"selectionStart"in r&&i0(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),sl&&_l(sl,r)||(sl=r,r=Qc(Oh,"onSelect"),0<r.length&&(t=new r0("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=Vo)))}function Yu(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Ko={animationend:Yu("Animation","AnimationEnd"),animationiteration:Yu("Animation","AnimationIteration"),animationstart:Yu("Animation","AnimationStart"),transitionend:Yu("Transition","TransitionEnd")},am={},a9={};Mr&&(a9=document.createElement("div").style,"AnimationEvent"in window||(delete Ko.animationend.animation,delete Ko.animationiteration.animation,delete Ko.animationstart.animation),"TransitionEvent"in window||delete Ko.transitionend.transition);function Ep(e){if(am[e])return am[e];if(!Ko[e])return e;var t=Ko[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in a9)return am[e]=t[n];return e}var o9=Ep("animationend"),i9=Ep("animationiteration"),s9=Ep("animationstart"),l9=Ep("transitionend"),u9=new Map,F1="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Ta(e,t){u9.set(e,t),Eo(t,[e])}for(var om=0;om<F1.length;om++){var im=F1[om],p_=im.toLowerCase(),d_=im[0].toUpperCase()+im.slice(1);Ta(p_,"on"+d_)}Ta(o9,"onAnimationEnd");Ta(i9,"onAnimationIteration");Ta(s9,"onAnimationStart");Ta("dblclick","onDoubleClick");Ta("focusin","onFocus");Ta("focusout","onBlur");Ta(l9,"onTransitionEnd");Ai("onMouseEnter",["mouseout","mouseover"]);Ai("onMouseLeave",["mouseout","mouseover"]);Ai("onPointerEnter",["pointerout","pointerover"]);Ai("onPointerLeave",["pointerout","pointerover"]);Eo("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));Eo("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));Eo("onBeforeInput",["compositionend","keypress","textInput","paste"]);Eo("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));Eo("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));Eo("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var el="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),m_=new Set("cancel close invalid load scroll toggle".split(" ").concat(el));function z1(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,pk(r,t,void 0,e),e.currentTarget=null}function c9(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,u=s.currentTarget;if(s=s.listener,l!==o&&a.isPropagationStopped())break e;z1(a,s,u),o=l}else for(i=0;i<r.length;i++){if(s=r[i],l=s.instance,u=s.currentTarget,s=s.listener,l!==o&&a.isPropagationStopped())break e;z1(a,s,u),o=l}}}if(qc)throw e=wh,qc=!1,wh=null,e}function Ie(e,t){var n=t[Th];n===void 0&&(n=t[Th]=new Set);var r=e+"__bubble";n.has(r)||(f9(t,e,2,!1),n.add(r))}function sm(e,t,n){var r=0;t&&(r|=4),f9(n,e,r,t)}var Qu="_reactListening"+Math.random().toString(36).slice(2);function Al(e){if(!e[Qu]){e[Qu]=!0,g5.forEach(function(n){n!=="selectionchange"&&(m_.has(n)||sm(n,!1,e),sm(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Qu]||(t[Qu]=!0,sm("selectionchange",!1,t))}}function f9(e,t,n,r){switch(K5(t)){case 1:var a=Ck;break;case 4:a=Ek;break;default:a=t0}n=a.bind(null,t,n,e),a=void 0,!xh||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(a=!0),r?a!==void 0?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):a!==void 0?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function lm(e,t,n,r,a){var o=r;if(!(t&1)&&!(t&2)&&r!==null)e:for(;;){if(r===null)return;var i=r.tag;if(i===3||i===4){var s=r.stateNode.containerInfo;if(s===a||s.nodeType===8&&s.parentNode===a)break;if(i===4)for(i=r.return;i!==null;){var l=i.tag;if((l===3||l===4)&&(l=i.stateNode.containerInfo,l===a||l.nodeType===8&&l.parentNode===a))return;i=i.return}for(;s!==null;){if(i=Xa(s),i===null)return;if(l=i.tag,l===5||l===6){r=o=i;continue e}s=s.parentNode}}r=r.return}M5(function(){var u=o,f=Qy(n),c=[];e:{var p=u9.get(e);if(p!==void 0){var d=r0,h=e;switch(e){case"keypress":if(Tc(n)===0)break e;case"keydown":case"keyup":d=Uk;break;case"focusin":h="focus",d=tm;break;case"focusout":h="blur",d=tm;break;case"beforeblur":case"afterblur":d=tm;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":d=C1;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":d=$k;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":d=Vk;break;case o9:case i9:case s9:d=Rk;break;case l9:d=Xk;break;case"scroll":d=Tk;break;case"wheel":d=Qk;break;case"copy":case"cut":case"paste":d=Dk;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":d=T1}var m=(t&4)!==0,g=!m&&e==="scroll",v=m?p!==null?p+"Capture":null:p;m=[];for(var y=u,x;y!==null;){x=y;var P=x.stateNode;if(x.tag===5&&P!==null&&(x=P,v!==null&&(P=bl(y,v),P!=null&&m.push(Cl(y,P,x)))),g)break;y=y.return}0<m.length&&(p=new d(p,h,null,n,f),c.push({event:p,listeners:m}))}}if(!(t&7)){e:{if(p=e==="mouseover"||e==="pointerover",d=e==="mouseout"||e==="pointerout",p&&n!==yh&&(h=n.relatedTarget||n.fromElement)&&(Xa(h)||h[Rr]))break e;if((d||p)&&(p=f.window===f?f:(p=f.ownerDocument)?p.defaultView||p.parentWindow:window,d?(h=n.relatedTarget||n.toElement,d=u,h=h?Xa(h):null,h!==null&&(g=To(h),h!==g||h.tag!==5&&h.tag!==6)&&(h=null)):(d=null,h=u),d!==h)){if(m=C1,P="onMouseLeave",v="onMouseEnter",y="mouse",(e==="pointerout"||e==="pointerover")&&(m=T1,P="onPointerLeave",v="onPointerEnter",y="pointer"),g=d==null?p:Xo(d),x=h==null?p:Xo(h),p=new m(P,y+"leave",d,n,f),p.target=g,p.relatedTarget=x,P=null,Xa(f)===u&&(m=new m(v,y+"enter",h,n,f),m.target=x,m.relatedTarget=g,P=m),g=P,d&&h)t:{for(m=d,v=h,y=0,x=m;x;x=Io(x))y++;for(x=0,P=v;P;P=Io(P))x++;for(;0<y-x;)m=Io(m),y--;for(;0<x-y;)v=Io(v),x--;for(;y--;){if(m===v||v!==null&&m===v.alternate)break t;m=Io(m),v=Io(v)}m=null}else m=null;d!==null&&B1(c,p,d,m,!1),h!==null&&g!==null&&B1(c,g,h,m,!0)}}e:{if(p=u?Xo(u):window,d=p.nodeName&&p.nodeName.toLowerCase(),d==="select"||d==="input"&&p.type==="file")var w=a_;else if(N1(p))if(e9)w=l_;else{w=i_;var S=o_}else(d=p.nodeName)&&d.toLowerCase()==="input"&&(p.type==="checkbox"||p.type==="radio")&&(w=s_);if(w&&(w=w(e,u))){J5(c,w,n,f);break e}S&&S(e,p,u),e==="focusout"&&(S=p._wrapperState)&&S.controlled&&p.type==="number"&&ph(p,"number",p.value)}switch(S=u?Xo(u):window,e){case"focusin":(N1(S)||S.contentEditable==="true")&&(Vo=S,Oh=u,sl=null);break;case"focusout":sl=Oh=Vo=null;break;case"mousedown":kh=!0;break;case"contextmenu":case"mouseup":case"dragend":kh=!1,L1(c,n,f);break;case"selectionchange":if(f_)break;case"keydown":case"keyup":L1(c,n,f)}var O;if(o0)e:{switch(e){case"compositionstart":var _="onCompositionStart";break e;case"compositionend":_="onCompositionEnd";break e;case"compositionupdate":_="onCompositionUpdate";break e}_=void 0}else qo?Q5(e,n)&&(_="onCompositionEnd"):e==="keydown"&&n.keyCode===229&&(_="onCompositionStart");_&&(Y5&&n.locale!=="ko"&&(qo||_!=="onCompositionStart"?_==="onCompositionEnd"&&qo&&(O=X5()):(fa=f,n0="value"in fa?fa.value:fa.textContent,qo=!0)),S=Qc(u,_),0<S.length&&(_=new E1(_,e,null,n,f),c.push({event:_,listeners:S}),O?_.data=O:(O=Z5(n),O!==null&&(_.data=O)))),(O=Jk?e_(e,n):t_(e,n))&&(u=Qc(u,"onBeforeInput"),0<u.length&&(f=new E1("onBeforeInput","beforeinput",null,n,f),c.push({event:f,listeners:u}),f.data=O))}c9(c,t)})}function Cl(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Qc(e,t){for(var n=t+"Capture",r=[];e!==null;){var a=e,o=a.stateNode;a.tag===5&&o!==null&&(a=o,o=bl(e,n),o!=null&&r.unshift(Cl(e,o,a)),o=bl(e,t),o!=null&&r.push(Cl(e,o,a))),e=e.return}return r}function Io(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function B1(e,t,n,r,a){for(var o=t._reactName,i=[];n!==null&&n!==r;){var s=n,l=s.alternate,u=s.stateNode;if(l!==null&&l===r)break;s.tag===5&&u!==null&&(s=u,a?(l=bl(n,o),l!=null&&i.unshift(Cl(n,l,s))):a||(l=bl(n,o),l!=null&&i.push(Cl(n,l,s)))),n=n.return}i.length!==0&&e.push({event:t,listeners:i})}var h_=/\r\n?/g,v_=/\u0000|\uFFFD/g;function H1(e){return(typeof e=="string"?e:""+e).replace(h_,`
-`).replace(v_,"")}function Zu(e,t,n){if(t=H1(t),H1(e)!==t&&n)throw Error(U(425))}function Zc(){}var _h=null,Ah=null;function Ch(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var Eh=typeof setTimeout=="function"?setTimeout:void 0,y_=typeof clearTimeout=="function"?clearTimeout:void 0,G1=typeof Promise=="function"?Promise:void 0,g_=typeof queueMicrotask=="function"?queueMicrotask:typeof G1<"u"?function(e){return G1.resolve(null).then(e).catch(x_)}:Eh;function x_(e){setTimeout(function(){throw e})}function um(e,t){var n=t,r=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&a.nodeType===8)if(n=a.data,n==="/$"){if(r===0){e.removeChild(a),Ol(t);return}r--}else n!=="$"&&n!=="$?"&&n!=="$!"||r++;n=a}while(n);Ol(t)}function xa(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function U1(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var cs=Math.random().toString(36).slice(2),nr="__reactFiber$"+cs,El="__reactProps$"+cs,Rr="__reactContainer$"+cs,Th="__reactEvents$"+cs,w_="__reactListeners$"+cs,b_="__reactHandles$"+cs;function Xa(e){var t=e[nr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Rr]||n[nr]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=U1(e);e!==null;){if(n=e[nr])return n;e=U1(e)}return t}e=n,n=e.parentNode}return null}function Cu(e){return e=e[nr]||e[Rr],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function Xo(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(U(33))}function Tp(e){return e[El]||null}var jh=[],Yo=-1;function ja(e){return{current:e}}function Fe(e){0>Yo||(e.current=jh[Yo],jh[Yo]=null,Yo--)}function $e(e,t){Yo++,jh[Yo]=e.current,e.current=t}var _a={},Tt=ja(_a),Gt=ja(!1),ho=_a;function Ci(e,t){var n=e.type.contextTypes;if(!n)return _a;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a={},o;for(o in n)a[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Ut(e){return e=e.childContextTypes,e!=null}function Jc(){Fe(Gt),Fe(Tt)}function W1(e,t,n){if(Tt.current!==_a)throw Error(U(168));$e(Tt,t),$e(Gt,n)}function p9(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var a in r)if(!(a in t))throw Error(U(108,ok(e)||"Unknown",a));return Ue({},n,r)}function ef(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||_a,ho=Tt.current,$e(Tt,e),$e(Gt,Gt.current),!0}function q1(e,t,n){var r=e.stateNode;if(!r)throw Error(U(169));n?(e=p9(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,Fe(Gt),Fe(Tt),$e(Tt,e)):Fe(Gt),$e(Gt,n)}var Sr=null,jp=!1,cm=!1;function d9(e){Sr===null?Sr=[e]:Sr.push(e)}function P_(e){jp=!0,d9(e)}function $a(){if(!cm&&Sr!==null){cm=!0;var e=0,t=ke;try{var n=Sr;for(ke=1;e<n.length;e++){var r=n[e];do r=r(!0);while(r!==null)}Sr=null,jp=!1}catch(a){throw Sr!==null&&(Sr=Sr.slice(e+1)),L5(Zy,$a),a}finally{ke=t,cm=!1}}return null}var Qo=[],Zo=0,tf=null,nf=0,dn=[],mn=0,vo=null,kr=1,_r="";function Ua(e,t){Qo[Zo++]=nf,Qo[Zo++]=tf,tf=e,nf=t}function m9(e,t,n){dn[mn++]=kr,dn[mn++]=_r,dn[mn++]=vo,vo=e;var r=kr;e=_r;var a=32-Hn(r)-1;r&=~(1<<a),n+=1;var o=32-Hn(t)+a;if(30<o){var i=a-a%5;o=(r&(1<<i)-1).toString(32),r>>=i,a-=i,kr=1<<32-Hn(t)+a|n<<a|r,_r=o+e}else kr=1<<o|n<<a|r,_r=e}function s0(e){e.return!==null&&(Ua(e,1),m9(e,1,0))}function l0(e){for(;e===tf;)tf=Qo[--Zo],Qo[Zo]=null,nf=Qo[--Zo],Qo[Zo]=null;for(;e===vo;)vo=dn[--mn],dn[mn]=null,_r=dn[--mn],dn[mn]=null,kr=dn[--mn],dn[mn]=null}var nn=null,en=null,ze=!1,Rn=null;function h9(e,t){var n=hn(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function V1(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,nn=e,en=xa(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,nn=e,en=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=vo!==null?{id:kr,overflow:_r}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=hn(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,nn=e,en=null,!0):!1;default:return!1}}function $h(e){return(e.mode&1)!==0&&(e.flags&128)===0}function Nh(e){if(ze){var t=en;if(t){var n=t;if(!V1(e,t)){if($h(e))throw Error(U(418));t=xa(n.nextSibling);var r=nn;t&&V1(e,t)?h9(r,n):(e.flags=e.flags&-4097|2,ze=!1,nn=e)}}else{if($h(e))throw Error(U(418));e.flags=e.flags&-4097|2,ze=!1,nn=e}}}function K1(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;nn=e}function Ju(e){if(e!==nn)return!1;if(!ze)return K1(e),ze=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!=="head"&&t!=="body"&&!Ch(e.type,e.memoizedProps)),t&&(t=en)){if($h(e))throw v9(),Error(U(418));for(;t;)h9(e,t),t=xa(t.nextSibling)}if(K1(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(U(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){en=xa(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}en=null}}else en=nn?xa(e.stateNode.nextSibling):null;return!0}function v9(){for(var e=en;e;)e=xa(e.nextSibling)}function Ei(){en=nn=null,ze=!1}function u0(e){Rn===null?Rn=[e]:Rn.push(e)}var S_=Gr.ReactCurrentBatchConfig;function Is(e,t,n){if(e=n.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(n._owner){if(n=n._owner,n){if(n.tag!==1)throw Error(U(309));var r=n.stateNode}if(!r)throw Error(U(147,e));var a=r,o=""+e;return t!==null&&t.ref!==null&&typeof t.ref=="function"&&t.ref._stringRef===o?t.ref:(t=function(i){var s=a.refs;i===null?delete s[o]:s[o]=i},t._stringRef=o,t)}if(typeof e!="string")throw Error(U(284));if(!n._owner)throw Error(U(290,e))}return e}function ec(e,t){throw e=Object.prototype.toString.call(t),Error(U(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function X1(e){var t=e._init;return t(e._payload)}function y9(e){function t(v,y){if(e){var x=v.deletions;x===null?(v.deletions=[y],v.flags|=16):x.push(y)}}function n(v,y){if(!e)return null;for(;y!==null;)t(v,y),y=y.sibling;return null}function r(v,y){for(v=new Map;y!==null;)y.key!==null?v.set(y.key,y):v.set(y.index,y),y=y.sibling;return v}function a(v,y){return v=Sa(v,y),v.index=0,v.sibling=null,v}function o(v,y,x){return v.index=x,e?(x=v.alternate,x!==null?(x=x.index,x<y?(v.flags|=2,y):x):(v.flags|=2,y)):(v.flags|=1048576,y)}function i(v){return e&&v.alternate===null&&(v.flags|=2),v}function s(v,y,x,P){return y===null||y.tag!==6?(y=ym(x,v.mode,P),y.return=v,y):(y=a(y,x),y.return=v,y)}function l(v,y,x,P){var w=x.type;return w===Wo?f(v,y,x.props.children,P,x.key):y!==null&&(y.elementType===w||typeof w=="object"&&w!==null&&w.$$typeof===ea&&X1(w)===y.type)?(P=a(y,x.props),P.ref=Is(v,y,x),P.return=v,P):(P=Dc(x.type,x.key,x.props,null,v.mode,P),P.ref=Is(v,y,x),P.return=v,P)}function u(v,y,x,P){return y===null||y.tag!==4||y.stateNode.containerInfo!==x.containerInfo||y.stateNode.implementation!==x.implementation?(y=gm(x,v.mode,P),y.return=v,y):(y=a(y,x.children||[]),y.return=v,y)}function f(v,y,x,P,w){return y===null||y.tag!==7?(y=co(x,v.mode,P,w),y.return=v,y):(y=a(y,x),y.return=v,y)}function c(v,y,x){if(typeof y=="string"&&y!==""||typeof y=="number")return y=ym(""+y,v.mode,x),y.return=v,y;if(typeof y=="object"&&y!==null){switch(y.$$typeof){case Gu:return x=Dc(y.type,y.key,y.props,null,v.mode,x),x.ref=Is(v,null,y),x.return=v,x;case Uo:return y=gm(y,v.mode,x),y.return=v,y;case ea:var P=y._init;return c(v,P(y._payload),x)}if(Zs(y)||js(y))return y=co(y,v.mode,x,null),y.return=v,y;ec(v,y)}return null}function p(v,y,x,P){var w=y!==null?y.key:null;if(typeof x=="string"&&x!==""||typeof x=="number")return w!==null?null:s(v,y,""+x,P);if(typeof x=="object"&&x!==null){switch(x.$$typeof){case Gu:return x.key===w?l(v,y,x,P):null;case Uo:return x.key===w?u(v,y,x,P):null;case ea:return w=x._init,p(v,y,w(x._payload),P)}if(Zs(x)||js(x))return w!==null?null:f(v,y,x,P,null);ec(v,x)}return null}function d(v,y,x,P,w){if(typeof P=="string"&&P!==""||typeof P=="number")return v=v.get(x)||null,s(y,v,""+P,w);if(typeof P=="object"&&P!==null){switch(P.$$typeof){case Gu:return v=v.get(P.key===null?x:P.key)||null,l(y,v,P,w);case Uo:return v=v.get(P.key===null?x:P.key)||null,u(y,v,P,w);case ea:var S=P._init;return d(v,y,x,S(P._payload),w)}if(Zs(P)||js(P))return v=v.get(x)||null,f(y,v,P,w,null);ec(y,P)}return null}function h(v,y,x,P){for(var w=null,S=null,O=y,_=y=0,A=null;O!==null&&_<x.length;_++){O.index>_?(A=O,O=null):A=O.sibling;var j=p(v,O,x[_],P);if(j===null){O===null&&(O=A);break}e&&O&&j.alternate===null&&t(v,O),y=o(j,y,_),S===null?w=j:S.sibling=j,S=j,O=A}if(_===x.length)return n(v,O),ze&&Ua(v,_),w;if(O===null){for(;_<x.length;_++)O=c(v,x[_],P),O!==null&&(y=o(O,y,_),S===null?w=O:S.sibling=O,S=O);return ze&&Ua(v,_),w}for(O=r(v,O);_<x.length;_++)A=d(O,v,_,x[_],P),A!==null&&(e&&A.alternate!==null&&O.delete(A.key===null?_:A.key),y=o(A,y,_),S===null?w=A:S.sibling=A,S=A);return e&&O.forEach(function(E){return t(v,E)}),ze&&Ua(v,_),w}function m(v,y,x,P){var w=js(x);if(typeof w!="function")throw Error(U(150));if(x=w.call(x),x==null)throw Error(U(151));for(var S=w=null,O=y,_=y=0,A=null,j=x.next();O!==null&&!j.done;_++,j=x.next()){O.index>_?(A=O,O=null):A=O.sibling;var E=p(v,O,j.value,P);if(E===null){O===null&&(O=A);break}e&&O&&E.alternate===null&&t(v,O),y=o(E,y,_),S===null?w=E:S.sibling=E,S=E,O=A}if(j.done)return n(v,O),ze&&Ua(v,_),w;if(O===null){for(;!j.done;_++,j=x.next())j=c(v,j.value,P),j!==null&&(y=o(j,y,_),S===null?w=j:S.sibling=j,S=j);return ze&&Ua(v,_),w}for(O=r(v,O);!j.done;_++,j=x.next())j=d(O,v,_,j.value,P),j!==null&&(e&&j.alternate!==null&&O.delete(j.key===null?_:j.key),y=o(j,y,_),S===null?w=j:S.sibling=j,S=j);return e&&O.forEach(function(T){return t(v,T)}),ze&&Ua(v,_),w}function g(v,y,x,P){if(typeof x=="object"&&x!==null&&x.type===Wo&&x.key===null&&(x=x.props.children),typeof x=="object"&&x!==null){switch(x.$$typeof){case Gu:e:{for(var w=x.key,S=y;S!==null;){if(S.key===w){if(w=x.type,w===Wo){if(S.tag===7){n(v,S.sibling),y=a(S,x.props.children),y.return=v,v=y;break e}}else if(S.elementType===w||typeof w=="object"&&w!==null&&w.$$typeof===ea&&X1(w)===S.type){n(v,S.sibling),y=a(S,x.props),y.ref=Is(v,S,x),y.return=v,v=y;break e}n(v,S);break}else t(v,S);S=S.sibling}x.type===Wo?(y=co(x.props.children,v.mode,P,x.key),y.return=v,v=y):(P=Dc(x.type,x.key,x.props,null,v.mode,P),P.ref=Is(v,y,x),P.return=v,v=P)}return i(v);case Uo:e:{for(S=x.key;y!==null;){if(y.key===S)if(y.tag===4&&y.stateNode.containerInfo===x.containerInfo&&y.stateNode.implementation===x.implementation){n(v,y.sibling),y=a(y,x.children||[]),y.return=v,v=y;break e}else{n(v,y);break}else t(v,y);y=y.sibling}y=gm(x,v.mode,P),y.return=v,v=y}return i(v);case ea:return S=x._init,g(v,y,S(x._payload),P)}if(Zs(x))return h(v,y,x,P);if(js(x))return m(v,y,x,P);ec(v,x)}return typeof x=="string"&&x!==""||typeof x=="number"?(x=""+x,y!==null&&y.tag===6?(n(v,y.sibling),y=a(y,x),y.return=v,v=y):(n(v,y),y=ym(x,v.mode,P),y.return=v,v=y),i(v)):n(v,y)}return g}var Ti=y9(!0),g9=y9(!1),rf=ja(null),af=null,Jo=null,c0=null;function f0(){c0=Jo=af=null}function p0(e){var t=rf.current;Fe(rf),e._currentValue=t}function Mh(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function ui(e,t){af=e,c0=Jo=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Bt=!0),e.firstContext=null)}function xn(e){var t=e._currentValue;if(c0!==e)if(e={context:e,memoizedValue:t,next:null},Jo===null){if(af===null)throw Error(U(308));Jo=e,af.dependencies={lanes:0,firstContext:e}}else Jo=Jo.next=e;return t}var Ya=null;function d0(e){Ya===null?Ya=[e]:Ya.push(e)}function x9(e,t,n,r){var a=t.interleaved;return a===null?(n.next=n,d0(t)):(n.next=a.next,a.next=n),t.interleaved=n,Ir(e,r)}function Ir(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var ta=!1;function m0(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function w9(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Tr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function wa(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,de&2){var a=r.pending;return a===null?t.next=t:(t.next=a.next,a.next=t),r.pending=t,Ir(e,n)}return a=r.interleaved,a===null?(t.next=t,d0(r)):(t.next=a.next,a.next=t),r.interleaved=t,Ir(e,n)}function jc(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Jy(e,n)}}function Y1(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var a=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?a=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?a=o=t:o=o.next=t}else a=o=t;n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function of(e,t,n,r){var a=e.updateQueue;ta=!1;var o=a.firstBaseUpdate,i=a.lastBaseUpdate,s=a.shared.pending;if(s!==null){a.shared.pending=null;var l=s,u=l.next;l.next=null,i===null?o=u:i.next=u,i=l;var f=e.alternate;f!==null&&(f=f.updateQueue,s=f.lastBaseUpdate,s!==i&&(s===null?f.firstBaseUpdate=u:s.next=u,f.lastBaseUpdate=l))}if(o!==null){var c=a.baseState;i=0,f=u=l=null,s=o;do{var p=s.lane,d=s.eventTime;if((r&p)===p){f!==null&&(f=f.next={eventTime:d,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var h=e,m=s;switch(p=t,d=n,m.tag){case 1:if(h=m.payload,typeof h=="function"){c=h.call(d,c,p);break e}c=h;break e;case 3:h.flags=h.flags&-65537|128;case 0:if(h=m.payload,p=typeof h=="function"?h.call(d,c,p):h,p==null)break e;c=Ue({},c,p);break e;case 2:ta=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,p=a.effects,p===null?a.effects=[s]:p.push(s))}else d={eventTime:d,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},f===null?(u=f=d,l=c):f=f.next=d,i|=p;if(s=s.next,s===null){if(s=a.shared.pending,s===null)break;p=s,s=p.next,p.next=null,a.lastBaseUpdate=p,a.shared.pending=null}}while(!0);if(f===null&&(l=c),a.baseState=l,a.firstBaseUpdate=u,a.lastBaseUpdate=f,t=a.shared.interleaved,t!==null){a=t;do i|=a.lane,a=a.next;while(a!==t)}else o===null&&(a.shared.lanes=0);go|=i,e.lanes=i,e.memoizedState=c}}function Q1(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(a!==null){if(r.callback=null,r=n,typeof a!="function")throw Error(U(191,a));a.call(r)}}}var Eu={},cr=ja(Eu),Tl=ja(Eu),jl=ja(Eu);function Qa(e){if(e===Eu)throw Error(U(174));return e}function h0(e,t){switch($e(jl,t),$e(Tl,e),$e(cr,Eu),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:mh(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=mh(t,e)}Fe(cr),$e(cr,t)}function ji(){Fe(cr),Fe(Tl),Fe(jl)}function b9(e){Qa(jl.current);var t=Qa(cr.current),n=mh(t,e.type);t!==n&&($e(Tl,e),$e(cr,n))}function v0(e){Tl.current===e&&(Fe(cr),Fe(Tl))}var He=ja(0);function sf(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var fm=[];function y0(){for(var e=0;e<fm.length;e++)fm[e]._workInProgressVersionPrimary=null;fm.length=0}var $c=Gr.ReactCurrentDispatcher,pm=Gr.ReactCurrentBatchConfig,yo=0,Ge=null,at=null,ct=null,lf=!1,ll=!1,$l=0,O_=0;function bt(){throw Error(U(321))}function g0(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Un(e[n],t[n]))return!1;return!0}function x0(e,t,n,r,a,o){if(yo=o,Ge=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,$c.current=e===null||e.memoizedState===null?C_:E_,e=n(r,a),ll){o=0;do{if(ll=!1,$l=0,25<=o)throw Error(U(301));o+=1,ct=at=null,t.updateQueue=null,$c.current=T_,e=n(r,a)}while(ll)}if($c.current=uf,t=at!==null&&at.next!==null,yo=0,ct=at=Ge=null,lf=!1,t)throw Error(U(300));return e}function w0(){var e=$l!==0;return $l=0,e}function Qn(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return ct===null?Ge.memoizedState=ct=e:ct=ct.next=e,ct}function wn(){if(at===null){var e=Ge.alternate;e=e!==null?e.memoizedState:null}else e=at.next;var t=ct===null?Ge.memoizedState:ct.next;if(t!==null)ct=t,at=e;else{if(e===null)throw Error(U(310));at=e,e={memoizedState:at.memoizedState,baseState:at.baseState,baseQueue:at.baseQueue,queue:at.queue,next:null},ct===null?Ge.memoizedState=ct=e:ct=ct.next=e}return ct}function Nl(e,t){return typeof t=="function"?t(e):t}function dm(e){var t=wn(),n=t.queue;if(n===null)throw Error(U(311));n.lastRenderedReducer=e;var r=at,a=r.baseQueue,o=n.pending;if(o!==null){if(a!==null){var i=a.next;a.next=o.next,o.next=i}r.baseQueue=a=o,n.pending=null}if(a!==null){o=a.next,r=r.baseState;var s=i=null,l=null,u=o;do{var f=u.lane;if((yo&f)===f)l!==null&&(l=l.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var c={lane:f,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};l===null?(s=l=c,i=r):l=l.next=c,Ge.lanes|=f,go|=f}u=u.next}while(u!==null&&u!==o);l===null?i=r:l.next=s,Un(r,t.memoizedState)||(Bt=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=l,n.lastRenderedState=r}if(e=n.interleaved,e!==null){a=e;do o=a.lane,Ge.lanes|=o,go|=o,a=a.next;while(a!==e)}else a===null&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function mm(e){var t=wn(),n=t.queue;if(n===null)throw Error(U(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(a!==null){n.pending=null;var i=a=a.next;do o=e(o,i.action),i=i.next;while(i!==a);Un(o,t.memoizedState)||(Bt=!0),t.memoizedState=o,t.baseQueue===null&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function P9(){}function S9(e,t){var n=Ge,r=wn(),a=t(),o=!Un(r.memoizedState,a);if(o&&(r.memoizedState=a,Bt=!0),r=r.queue,b0(_9.bind(null,n,r,e),[e]),r.getSnapshot!==t||o||ct!==null&&ct.memoizedState.tag&1){if(n.flags|=2048,Ml(9,k9.bind(null,n,r,a,t),void 0,null),pt===null)throw Error(U(349));yo&30||O9(n,t,a)}return a}function O9(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=Ge.updateQueue,t===null?(t={lastEffect:null,stores:null},Ge.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function k9(e,t,n,r){t.value=n,t.getSnapshot=r,A9(t)&&C9(e)}function _9(e,t,n){return n(function(){A9(t)&&C9(e)})}function A9(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Un(e,n)}catch{return!0}}function C9(e){var t=Ir(e,1);t!==null&&Gn(t,e,1,-1)}function Z1(e){var t=Qn();return typeof e=="function"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Nl,lastRenderedState:e},t.queue=e,e=e.dispatch=A_.bind(null,Ge,e),[t.memoizedState,e]}function Ml(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},t=Ge.updateQueue,t===null?(t={lastEffect:null,stores:null},Ge.updateQueue=t,t.lastEffect=e.next=e):(n=t.lastEffect,n===null?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e)),e}function E9(){return wn().memoizedState}function Nc(e,t,n,r){var a=Qn();Ge.flags|=e,a.memoizedState=Ml(1|t,n,void 0,r===void 0?null:r)}function $p(e,t,n,r){var a=wn();r=r===void 0?null:r;var o=void 0;if(at!==null){var i=at.memoizedState;if(o=i.destroy,r!==null&&g0(r,i.deps)){a.memoizedState=Ml(t,n,o,r);return}}Ge.flags|=e,a.memoizedState=Ml(1|t,n,o,r)}function J1(e,t){return Nc(8390656,8,e,t)}function b0(e,t){return $p(2048,8,e,t)}function T9(e,t){return $p(4,2,e,t)}function j9(e,t){return $p(4,4,e,t)}function $9(e,t){if(typeof t=="function")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function N9(e,t,n){return n=n!=null?n.concat([e]):null,$p(4,4,$9.bind(null,t,e),n)}function P0(){}function M9(e,t){var n=wn();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&g0(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function R9(e,t){var n=wn();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&g0(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function I9(e,t,n){return yo&21?(Un(n,t)||(n=B5(),Ge.lanes|=n,go|=n,e.baseState=!0),t):(e.baseState&&(e.baseState=!1,Bt=!0),e.memoizedState=n)}function k_(e,t){var n=ke;ke=n!==0&&4>n?n:4,e(!0);var r=pm.transition;pm.transition={};try{e(!1),t()}finally{ke=n,pm.transition=r}}function D9(){return wn().memoizedState}function __(e,t,n){var r=Pa(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},L9(e))F9(t,n);else if(n=x9(e,t,n,r),n!==null){var a=Dt();Gn(n,e,r,a),z9(n,t,r)}}function A_(e,t,n){var r=Pa(e),a={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(L9(e))F9(t,a);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,s=o(i,n);if(a.hasEagerState=!0,a.eagerState=s,Un(s,i)){var l=t.interleaved;l===null?(a.next=a,d0(t)):(a.next=l.next,l.next=a),t.interleaved=a;return}}catch{}finally{}n=x9(e,t,a,r),n!==null&&(a=Dt(),Gn(n,e,r,a),z9(n,t,r))}}function L9(e){var t=e.alternate;return e===Ge||t!==null&&t===Ge}function F9(e,t){ll=lf=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function z9(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Jy(e,n)}}var uf={readContext:xn,useCallback:bt,useContext:bt,useEffect:bt,useImperativeHandle:bt,useInsertionEffect:bt,useLayoutEffect:bt,useMemo:bt,useReducer:bt,useRef:bt,useState:bt,useDebugValue:bt,useDeferredValue:bt,useTransition:bt,useMutableSource:bt,useSyncExternalStore:bt,useId:bt,unstable_isNewReconciler:!1},C_={readContext:xn,useCallback:function(e,t){return Qn().memoizedState=[e,t===void 0?null:t],e},useContext:xn,useEffect:J1,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Nc(4194308,4,$9.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Nc(4194308,4,e,t)},useInsertionEffect:function(e,t){return Nc(4,2,e,t)},useMemo:function(e,t){var n=Qn();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Qn();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=__.bind(null,Ge,e),[r.memoizedState,e]},useRef:function(e){var t=Qn();return e={current:e},t.memoizedState=e},useState:Z1,useDebugValue:P0,useDeferredValue:function(e){return Qn().memoizedState=e},useTransition:function(){var e=Z1(!1),t=e[0];return e=k_.bind(null,e[1]),Qn().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Ge,a=Qn();if(ze){if(n===void 0)throw Error(U(407));n=n()}else{if(n=t(),pt===null)throw Error(U(349));yo&30||O9(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,J1(_9.bind(null,r,o,e),[e]),r.flags|=2048,Ml(9,k9.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Qn(),t=pt.identifierPrefix;if(ze){var n=_r,r=kr;n=(r&~(1<<32-Hn(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=$l++,0<n&&(t+="H"+n.toString(32)),t+=":"}else n=O_++,t=":"+t+"r"+n.toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},E_={readContext:xn,useCallback:M9,useContext:xn,useEffect:b0,useImperativeHandle:N9,useInsertionEffect:T9,useLayoutEffect:j9,useMemo:R9,useReducer:dm,useRef:E9,useState:function(){return dm(Nl)},useDebugValue:P0,useDeferredValue:function(e){var t=wn();return I9(t,at.memoizedState,e)},useTransition:function(){var e=dm(Nl)[0],t=wn().memoizedState;return[e,t]},useMutableSource:P9,useSyncExternalStore:S9,useId:D9,unstable_isNewReconciler:!1},T_={readContext:xn,useCallback:M9,useContext:xn,useEffect:b0,useImperativeHandle:N9,useInsertionEffect:T9,useLayoutEffect:j9,useMemo:R9,useReducer:mm,useRef:E9,useState:function(){return mm(Nl)},useDebugValue:P0,useDeferredValue:function(e){var t=wn();return at===null?t.memoizedState=e:I9(t,at.memoizedState,e)},useTransition:function(){var e=mm(Nl)[0],t=wn().memoizedState;return[e,t]},useMutableSource:P9,useSyncExternalStore:S9,useId:D9,unstable_isNewReconciler:!1};function Cn(e,t){if(e&&e.defaultProps){t=Ue({},t),e=e.defaultProps;for(var n in e)t[n]===void 0&&(t[n]=e[n]);return t}return t}function Rh(e,t,n,r){t=e.memoizedState,n=n(r,t),n=n==null?t:Ue({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var Np={isMounted:function(e){return(e=e._reactInternals)?To(e)===e:!1},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=Dt(),a=Pa(e),o=Tr(r,a);o.payload=t,n!=null&&(o.callback=n),t=wa(e,o,a),t!==null&&(Gn(t,e,a,r),jc(t,e,a))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=Dt(),a=Pa(e),o=Tr(r,a);o.tag=1,o.payload=t,n!=null&&(o.callback=n),t=wa(e,o,a),t!==null&&(Gn(t,e,a,r),jc(t,e,a))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Dt(),r=Pa(e),a=Tr(n,r);a.tag=2,t!=null&&(a.callback=t),t=wa(e,a,r),t!==null&&(Gn(t,e,r,n),jc(t,e,r))}};function ex(e,t,n,r,a,o,i){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(r,o,i):t.prototype&&t.prototype.isPureReactComponent?!_l(n,r)||!_l(a,o):!0}function B9(e,t,n){var r=!1,a=_a,o=t.contextType;return typeof o=="object"&&o!==null?o=xn(o):(a=Ut(t)?ho:Tt.current,r=t.contextTypes,o=(r=r!=null)?Ci(e,a):_a),t=new t(n,o),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=Np,e.stateNode=t,t._reactInternals=e,r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function tx(e,t,n,r){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(n,r),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Np.enqueueReplaceState(t,t.state,null)}function Ih(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs={},m0(e);var o=t.contextType;typeof o=="object"&&o!==null?a.context=xn(o):(o=Ut(t)?ho:Tt.current,a.context=Ci(e,o)),a.state=e.memoizedState,o=t.getDerivedStateFromProps,typeof o=="function"&&(Rh(e,t,o,n),a.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof a.getSnapshotBeforeUpdate=="function"||typeof a.UNSAFE_componentWillMount!="function"&&typeof a.componentWillMount!="function"||(t=a.state,typeof a.componentWillMount=="function"&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount=="function"&&a.UNSAFE_componentWillMount(),t!==a.state&&Np.enqueueReplaceState(a,a.state,null),of(e,n,a,r),a.state=e.memoizedState),typeof a.componentDidMount=="function"&&(e.flags|=4194308)}function $i(e,t){try{var n="",r=t;do n+=ak(r),r=r.return;while(r);var a=n}catch(o){a=`
+`+a[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}while(1<=i&&0<=s);break}}}finally{Xd=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Qs(e):""}function sk(e){switch(e.tag){case 5:return Qs(e.type);case 16:return Qs("Lazy");case 13:return Qs("Suspense");case 19:return Qs("SuspenseList");case 0:case 2:case 15:return e=Yd(e.type,!1),e;case 11:return e=Yd(e.type.render,!1),e;case 1:return e=Yd(e.type,!0),e;default:return""}}function uh(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Wo:return"Fragment";case Uo:return"Portal";case ih:return"Profiler";case Kv:return"StrictMode";case sh:return"Suspense";case lh:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case P5:return(e.displayName||"Context")+".Consumer";case b5:return(e._context.displayName||"Context")+".Provider";case Xv:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Yv:return t=e.displayName||null,t!==null?t:uh(e.type)||"Memo";case ea:t=e._payload,e=e._init;try{return uh(e(t))}catch{}}return null}function lk(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return uh(t);case 8:return t===Kv?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ka(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function O5(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function uk(e){var t=O5(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Uu(e){e._valueTracker||(e._valueTracker=uk(e))}function k5(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=O5(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Uc(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function ch(e,t){var n=t.checked;return Ue({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function g1(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ka(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function _5(e,t){t=t.checked,t!=null&&Vv(e,"checked",t,!1)}function ph(e,t){_5(e,t);var n=ka(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?fh(e,t.type,n):t.hasOwnProperty("defaultValue")&&fh(e,t.type,ka(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function x1(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function fh(e,t,n){(t!=="number"||Uc(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Zs=Array.isArray;function oi(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ka(n),t=null,a=0;a<e.length;a++){if(e[a].value===n){e[a].selected=!0,r&&(e[a].defaultSelected=!0);return}t!==null||e[a].disabled||(t=e[a])}t!==null&&(t.selected=!0)}}function dh(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(U(91));return Ue({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function w1(e,t){var n=t.value;if(n==null){if(n=t.children,t=t.defaultValue,n!=null){if(t!=null)throw Error(U(92));if(Zs(n)){if(1<n.length)throw Error(U(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:ka(n)}}function C5(e,t){var n=ka(t.value),r=ka(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function b1(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}function A5(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function mh(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?A5(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Wu,E5=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,r,a){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,a)})}:e}(function(e,t){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=t;else{for(Wu=Wu||document.createElement("div"),Wu.innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=Wu.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function wl(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var rl={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ck=["Webkit","ms","Moz","O"];Object.keys(rl).forEach(function(e){ck.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),rl[t]=rl[e]})});function T5(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||rl.hasOwnProperty(e)&&rl[e]?(""+t).trim():t+"px"}function j5(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,a=T5(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}var pk=Ue({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function hh(e,t){if(t){if(pk[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(U(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(U(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(U(61))}if(t.style!=null&&typeof t.style!="object")throw Error(U(62))}}function vh(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var yh=null;function Qv(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var gh=null,ii=null,si=null;function P1(e){if(e=Au(e)){if(typeof gh!="function")throw Error(U(280));var t=e.stateNode;t&&(t=Tf(t),gh(e.stateNode,e.type,t))}}function $5(e){ii?si?si.push(e):si=[e]:ii=e}function N5(){if(ii){var e=ii,t=si;if(si=ii=null,P1(e),t)for(e=0;e<t.length;e++)P1(t[e])}}function M5(e,t){return e(t)}function R5(){}var Qd=!1;function I5(e,t,n){if(Qd)return e(t,n);Qd=!0;try{return M5(e,t,n)}finally{Qd=!1,(ii!==null||si!==null)&&(R5(),N5())}}function bl(e,t){var n=e.stateNode;if(n===null)return null;var r=Tf(n);if(r===null)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(e=e.type,r=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!r;break e;default:e=!1}if(e)return null;if(n&&typeof n!="function")throw Error(U(231,t,typeof n));return n}var xh=!1;if(Mr)try{var $s={};Object.defineProperty($s,"passive",{get:function(){xh=!0}}),window.addEventListener("test",$s,$s),window.removeEventListener("test",$s,$s)}catch{xh=!1}function fk(e,t,n,r,a,o,i,s,l){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(p){this.onError(p)}}var al=!1,Wc=null,qc=!1,wh=null,dk={onError:function(e){al=!0,Wc=e}};function mk(e,t,n,r,a,o,i,s,l){al=!1,Wc=null,fk.apply(dk,arguments)}function hk(e,t,n,r,a,o,i,s,l){if(mk.apply(this,arguments),al){if(al){var u=Wc;al=!1,Wc=null}else throw Error(U(198));qc||(qc=!0,wh=u)}}function To(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,t.flags&4098&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function D5(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function S1(e){if(To(e)!==e)throw Error(U(188))}function vk(e){var t=e.alternate;if(!t){if(t=To(e),t===null)throw Error(U(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(a===null)break;var o=a.alternate;if(o===null){if(r=a.return,r!==null){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return S1(a),e;if(o===r)return S1(a),t;o=o.sibling}throw Error(U(188))}if(n.return!==r.return)n=a,r=o;else{for(var i=!1,s=a.child;s;){if(s===n){i=!0,n=a,r=o;break}if(s===r){i=!0,r=a,n=o;break}s=s.sibling}if(!i){for(s=o.child;s;){if(s===n){i=!0,n=o,r=a;break}if(s===r){i=!0,r=o,n=a;break}s=s.sibling}if(!i)throw Error(U(189))}}if(n.alternate!==r)throw Error(U(190))}if(n.tag!==3)throw Error(U(188));return n.stateNode.current===n?e:t}function L5(e){return e=vk(e),e!==null?F5(e):null}function F5(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=F5(e);if(t!==null)return t;e=e.sibling}return null}var z5=an.unstable_scheduleCallback,O1=an.unstable_cancelCallback,yk=an.unstable_shouldYield,gk=an.unstable_requestPaint,Ke=an.unstable_now,xk=an.unstable_getCurrentPriorityLevel,Zv=an.unstable_ImmediatePriority,B5=an.unstable_UserBlockingPriority,Vc=an.unstable_NormalPriority,wk=an.unstable_LowPriority,H5=an.unstable_IdlePriority,_f=null,ur=null;function bk(e){if(ur&&typeof ur.onCommitFiberRoot=="function")try{ur.onCommitFiberRoot(_f,e,void 0,(e.current.flags&128)===128)}catch{}}var Hn=Math.clz32?Math.clz32:Ok,Pk=Math.log,Sk=Math.LN2;function Ok(e){return e>>>=0,e===0?32:31-(Pk(e)/Sk|0)|0}var qu=64,Vu=4194304;function Js(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Kc(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,a=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var s=i&~a;s!==0?r=Js(s):(o&=i,o!==0&&(r=Js(o)))}else i=n&~a,i!==0?r=Js(i):o!==0&&(r=Js(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&a)&&(a=r&-r,o=t&-t,a>=o||a===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0<t;)n=31-Hn(t),a=1<<n,r|=e[n],t&=~a;return r}function kk(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function _k(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,a=e.expirationTimes,o=e.pendingLanes;0<o;){var i=31-Hn(o),s=1<<i,l=a[i];l===-1?(!(s&n)||s&r)&&(a[i]=kk(s,t)):l<=t&&(e.expiredLanes|=s),o&=~s}}function bh(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function G5(){var e=qu;return qu<<=1,!(qu&4194240)&&(qu=64),e}function Zd(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function _u(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Hn(t),e[t]=n}function Ck(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var a=31-Hn(n),o=1<<a;t[a]=0,r[a]=-1,e[a]=-1,n&=~o}}function Jv(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-Hn(n),a=1<<r;a&t|e[r]&t&&(e[r]|=t),n&=~a}}var ke=0;function U5(e){return e&=-e,1<e?4<e?e&268435455?16:536870912:4:1}var W5,ey,q5,V5,K5,Ph=!1,Ku=[],va=null,ya=null,ga=null,Pl=new Map,Sl=new Map,ra=[],Ak="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function k1(e,t){switch(e){case"focusin":case"focusout":va=null;break;case"dragenter":case"dragleave":ya=null;break;case"mouseover":case"mouseout":ga=null;break;case"pointerover":case"pointerout":Pl.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Sl.delete(t.pointerId)}}function Ns(e,t,n,r,a,o){return e===null||e.nativeEvent!==o?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:o,targetContainers:[a]},t!==null&&(t=Au(t),t!==null&&ey(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,a!==null&&t.indexOf(a)===-1&&t.push(a),e)}function Ek(e,t,n,r,a){switch(t){case"focusin":return va=Ns(va,e,t,n,r,a),!0;case"dragenter":return ya=Ns(ya,e,t,n,r,a),!0;case"mouseover":return ga=Ns(ga,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return Pl.set(o,Ns(Pl.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,Sl.set(o,Ns(Sl.get(o)||null,e,t,n,r,a)),!0}return!1}function X5(e){var t=Xa(e.target);if(t!==null){var n=To(t);if(n!==null){if(t=n.tag,t===13){if(t=D5(n),t!==null){e.blockedOn=t,K5(e.priority,function(){q5(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Ac(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=Sh(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(n===null){n=e.nativeEvent;var r=new n.constructor(n.type,n);yh=r,n.target.dispatchEvent(r),yh=null}else return t=Au(n),t!==null&&ey(t),e.blockedOn=n,!1;t.shift()}return!0}function _1(e,t,n){Ac(e)&&n.delete(t)}function Tk(){Ph=!1,va!==null&&Ac(va)&&(va=null),ya!==null&&Ac(ya)&&(ya=null),ga!==null&&Ac(ga)&&(ga=null),Pl.forEach(_1),Sl.forEach(_1)}function Ms(e,t){e.blockedOn===t&&(e.blockedOn=null,Ph||(Ph=!0,an.unstable_scheduleCallback(an.unstable_NormalPriority,Tk)))}function Ol(e){function t(a){return Ms(a,e)}if(0<Ku.length){Ms(Ku[0],e);for(var n=1;n<Ku.length;n++){var r=Ku[n];r.blockedOn===e&&(r.blockedOn=null)}}for(va!==null&&Ms(va,e),ya!==null&&Ms(ya,e),ga!==null&&Ms(ga,e),Pl.forEach(t),Sl.forEach(t),n=0;n<ra.length;n++)r=ra[n],r.blockedOn===e&&(r.blockedOn=null);for(;0<ra.length&&(n=ra[0],n.blockedOn===null);)X5(n),n.blockedOn===null&&ra.shift()}var li=Gr.ReactCurrentBatchConfig,Xc=!0;function jk(e,t,n,r){var a=ke,o=li.transition;li.transition=null;try{ke=1,ty(e,t,n,r)}finally{ke=a,li.transition=o}}function $k(e,t,n,r){var a=ke,o=li.transition;li.transition=null;try{ke=4,ty(e,t,n,r)}finally{ke=a,li.transition=o}}function ty(e,t,n,r){if(Xc){var a=Sh(e,t,n,r);if(a===null)lm(e,t,r,Yc,n),k1(e,r);else if(Ek(a,e,t,n,r))r.stopPropagation();else if(k1(e,r),t&4&&-1<Ak.indexOf(e)){for(;a!==null;){var o=Au(a);if(o!==null&&W5(o),o=Sh(e,t,n,r),o===null&&lm(e,t,r,Yc,n),o===a)break;a=o}a!==null&&r.stopPropagation()}else lm(e,t,r,null,n)}}var Yc=null;function Sh(e,t,n,r){if(Yc=null,e=Qv(r),e=Xa(e),e!==null)if(t=To(e),t===null)e=null;else if(n=t.tag,n===13){if(e=D5(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Yc=e,null}function Y5(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(xk()){case Zv:return 1;case B5:return 4;case Vc:case wk:return 16;case H5:return 536870912;default:return 16}default:return 16}}var pa=null,ny=null,Ec=null;function Q5(){if(Ec)return Ec;var e,t=ny,n=t.length,r,a="value"in pa?pa.value:pa.textContent,o=a.length;for(e=0;e<n&&t[e]===a[e];e++);var i=n-e;for(r=1;r<=i&&t[n-r]===a[o-r];r++);return Ec=a.slice(e,1<r?1-r:void 0)}function Tc(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function Xu(){return!0}function C1(){return!1}function sn(e){function t(n,r,a,o,i){this._reactName=n,this._targetInst=a,this.type=r,this.nativeEvent=o,this.target=i,this.currentTarget=null;for(var s in e)e.hasOwnProperty(s)&&(n=e[s],this[s]=n?n(o):o[s]);return this.isDefaultPrevented=(o.defaultPrevented!=null?o.defaultPrevented:o.returnValue===!1)?Xu:C1,this.isPropagationStopped=C1,this}return Ue(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=Xu)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=Xu)},persist:function(){},isPersistent:Xu}),t}var us={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},ry=sn(us),Cu=Ue({},us,{view:0,detail:0}),Nk=sn(Cu),Jd,em,Rs,Cf=Ue({},Cu,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:ay,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Rs&&(Rs&&e.type==="mousemove"?(Jd=e.screenX-Rs.screenX,em=e.screenY-Rs.screenY):em=Jd=0,Rs=e),Jd)},movementY:function(e){return"movementY"in e?e.movementY:em}}),A1=sn(Cf),Mk=Ue({},Cf,{dataTransfer:0}),Rk=sn(Mk),Ik=Ue({},Cu,{relatedTarget:0}),tm=sn(Ik),Dk=Ue({},us,{animationName:0,elapsedTime:0,pseudoElement:0}),Lk=sn(Dk),Fk=Ue({},us,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),zk=sn(Fk),Bk=Ue({},us,{data:0}),E1=sn(Bk),Hk={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Gk={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Uk={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Wk(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=Uk[e])?!!t[e]:!1}function ay(){return Wk}var qk=Ue({},Cu,{key:function(e){if(e.key){var t=Hk[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=Tc(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?Gk[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:ay,charCode:function(e){return e.type==="keypress"?Tc(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?Tc(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),Vk=sn(qk),Kk=Ue({},Cf,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),T1=sn(Kk),Xk=Ue({},Cu,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:ay}),Yk=sn(Xk),Qk=Ue({},us,{propertyName:0,elapsedTime:0,pseudoElement:0}),Zk=sn(Qk),Jk=Ue({},Cf,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),e_=sn(Jk),t_=[9,13,27,32],oy=Mr&&"CompositionEvent"in window,ol=null;Mr&&"documentMode"in document&&(ol=document.documentMode);var n_=Mr&&"TextEvent"in window&&!ol,Z5=Mr&&(!oy||ol&&8<ol&&11>=ol),j1=" ",$1=!1;function J5(e,t){switch(e){case"keyup":return t_.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function e9(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var qo=!1;function r_(e,t){switch(e){case"compositionend":return e9(t);case"keypress":return t.which!==32?null:($1=!0,j1);case"textInput":return e=t.data,e===j1&&$1?null:e;default:return null}}function a_(e,t){if(qo)return e==="compositionend"||!oy&&J5(e,t)?(e=Q5(),Ec=ny=pa=null,qo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Z5&&t.locale!=="ko"?null:t.data;default:return null}}var o_={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function N1(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!o_[e.type]:t==="textarea"}function t9(e,t,n,r){$5(r),t=Qc(t,"onChange"),0<t.length&&(n=new ry("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var il=null,kl=null;function i_(e){f9(e,0)}function Af(e){var t=Xo(e);if(k5(t))return e}function s_(e,t){if(e==="change")return t}var n9=!1;if(Mr){var nm;if(Mr){var rm="oninput"in document;if(!rm){var M1=document.createElement("div");M1.setAttribute("oninput","return;"),rm=typeof M1.oninput=="function"}nm=rm}else nm=!1;n9=nm&&(!document.documentMode||9<document.documentMode)}function R1(){il&&(il.detachEvent("onpropertychange",r9),kl=il=null)}function r9(e){if(e.propertyName==="value"&&Af(kl)){var t=[];t9(t,kl,e,Qv(e)),I5(i_,t)}}function l_(e,t,n){e==="focusin"?(R1(),il=t,kl=n,il.attachEvent("onpropertychange",r9)):e==="focusout"&&R1()}function u_(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return Af(kl)}function c_(e,t){if(e==="click")return Af(t)}function p_(e,t){if(e==="input"||e==="change")return Af(t)}function f_(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Un=typeof Object.is=="function"?Object.is:f_;function _l(e,t){if(Un(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var a=n[r];if(!oh.call(t,a)||!Un(e[a],t[a]))return!1}return!0}function I1(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function D1(e,t){var n=I1(e);e=0;for(var r;n;){if(n.nodeType===3){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=I1(n)}}function a9(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?a9(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function o9(){for(var e=window,t=Uc();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Uc(e.document)}return t}function iy(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function d_(e){var t=o9(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&a9(n.ownerDocument.documentElement,n)){if(r!==null&&iy(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var a=n.textContent.length,o=Math.min(r.start,a);r=r.end===void 0?o:Math.min(r.end,a),!e.extend&&o>r&&(a=r,r=o,o=a),a=D1(n,o);var i=D1(n,r);a&&i&&(e.rangeCount!==1||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(a.node,a.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n<t.length;n++)e=t[n],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var m_=Mr&&"documentMode"in document&&11>=document.documentMode,Vo=null,Oh=null,sl=null,kh=!1;function L1(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;kh||Vo==null||Vo!==Uc(r)||(r=Vo,"selectionStart"in r&&iy(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),sl&&_l(sl,r)||(sl=r,r=Qc(Oh,"onSelect"),0<r.length&&(t=new ry("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=Vo)))}function Yu(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Ko={animationend:Yu("Animation","AnimationEnd"),animationiteration:Yu("Animation","AnimationIteration"),animationstart:Yu("Animation","AnimationStart"),transitionend:Yu("Transition","TransitionEnd")},am={},i9={};Mr&&(i9=document.createElement("div").style,"AnimationEvent"in window||(delete Ko.animationend.animation,delete Ko.animationiteration.animation,delete Ko.animationstart.animation),"TransitionEvent"in window||delete Ko.transitionend.transition);function Ef(e){if(am[e])return am[e];if(!Ko[e])return e;var t=Ko[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in i9)return am[e]=t[n];return e}var s9=Ef("animationend"),l9=Ef("animationiteration"),u9=Ef("animationstart"),c9=Ef("transitionend"),p9=new Map,F1="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Ta(e,t){p9.set(e,t),Eo(t,[e])}for(var om=0;om<F1.length;om++){var im=F1[om],h_=im.toLowerCase(),v_=im[0].toUpperCase()+im.slice(1);Ta(h_,"on"+v_)}Ta(s9,"onAnimationEnd");Ta(l9,"onAnimationIteration");Ta(u9,"onAnimationStart");Ta("dblclick","onDoubleClick");Ta("focusin","onFocus");Ta("focusout","onBlur");Ta(c9,"onTransitionEnd");Ci("onMouseEnter",["mouseout","mouseover"]);Ci("onMouseLeave",["mouseout","mouseover"]);Ci("onPointerEnter",["pointerout","pointerover"]);Ci("onPointerLeave",["pointerout","pointerover"]);Eo("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));Eo("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));Eo("onBeforeInput",["compositionend","keypress","textInput","paste"]);Eo("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));Eo("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));Eo("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var el="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),y_=new Set("cancel close invalid load scroll toggle".split(" ").concat(el));function z1(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,hk(r,t,void 0,e),e.currentTarget=null}function f9(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,u=s.currentTarget;if(s=s.listener,l!==o&&a.isPropagationStopped())break e;z1(a,s,u),o=l}else for(i=0;i<r.length;i++){if(s=r[i],l=s.instance,u=s.currentTarget,s=s.listener,l!==o&&a.isPropagationStopped())break e;z1(a,s,u),o=l}}}if(qc)throw e=wh,qc=!1,wh=null,e}function Ie(e,t){var n=t[Th];n===void 0&&(n=t[Th]=new Set);var r=e+"__bubble";n.has(r)||(d9(t,e,2,!1),n.add(r))}function sm(e,t,n){var r=0;t&&(r|=4),d9(n,e,r,t)}var Qu="_reactListening"+Math.random().toString(36).slice(2);function Cl(e){if(!e[Qu]){e[Qu]=!0,w5.forEach(function(n){n!=="selectionchange"&&(y_.has(n)||sm(n,!1,e),sm(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Qu]||(t[Qu]=!0,sm("selectionchange",!1,t))}}function d9(e,t,n,r){switch(Y5(t)){case 1:var a=jk;break;case 4:a=$k;break;default:a=ty}n=a.bind(null,t,n,e),a=void 0,!xh||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(a=!0),r?a!==void 0?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):a!==void 0?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function lm(e,t,n,r,a){var o=r;if(!(t&1)&&!(t&2)&&r!==null)e:for(;;){if(r===null)return;var i=r.tag;if(i===3||i===4){var s=r.stateNode.containerInfo;if(s===a||s.nodeType===8&&s.parentNode===a)break;if(i===4)for(i=r.return;i!==null;){var l=i.tag;if((l===3||l===4)&&(l=i.stateNode.containerInfo,l===a||l.nodeType===8&&l.parentNode===a))return;i=i.return}for(;s!==null;){if(i=Xa(s),i===null)return;if(l=i.tag,l===5||l===6){r=o=i;continue e}s=s.parentNode}}r=r.return}I5(function(){var u=o,p=Qv(n),c=[];e:{var f=p9.get(e);if(f!==void 0){var d=ry,h=e;switch(e){case"keypress":if(Tc(n)===0)break e;case"keydown":case"keyup":d=Vk;break;case"focusin":h="focus",d=tm;break;case"focusout":h="blur",d=tm;break;case"beforeblur":case"afterblur":d=tm;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":d=A1;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":d=Rk;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":d=Yk;break;case s9:case l9:case u9:d=Lk;break;case c9:d=Zk;break;case"scroll":d=Nk;break;case"wheel":d=e_;break;case"copy":case"cut":case"paste":d=zk;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":d=T1}var m=(t&4)!==0,g=!m&&e==="scroll",v=m?f!==null?f+"Capture":null:f;m=[];for(var y=u,x;y!==null;){x=y;var P=x.stateNode;if(x.tag===5&&P!==null&&(x=P,v!==null&&(P=bl(y,v),P!=null&&m.push(Al(y,P,x)))),g)break;y=y.return}0<m.length&&(f=new d(f,h,null,n,p),c.push({event:f,listeners:m}))}}if(!(t&7)){e:{if(f=e==="mouseover"||e==="pointerover",d=e==="mouseout"||e==="pointerout",f&&n!==yh&&(h=n.relatedTarget||n.fromElement)&&(Xa(h)||h[Rr]))break e;if((d||f)&&(f=p.window===p?p:(f=p.ownerDocument)?f.defaultView||f.parentWindow:window,d?(h=n.relatedTarget||n.toElement,d=u,h=h?Xa(h):null,h!==null&&(g=To(h),h!==g||h.tag!==5&&h.tag!==6)&&(h=null)):(d=null,h=u),d!==h)){if(m=A1,P="onMouseLeave",v="onMouseEnter",y="mouse",(e==="pointerout"||e==="pointerover")&&(m=T1,P="onPointerLeave",v="onPointerEnter",y="pointer"),g=d==null?f:Xo(d),x=h==null?f:Xo(h),f=new m(P,y+"leave",d,n,p),f.target=g,f.relatedTarget=x,P=null,Xa(p)===u&&(m=new m(v,y+"enter",h,n,p),m.target=x,m.relatedTarget=g,P=m),g=P,d&&h)t:{for(m=d,v=h,y=0,x=m;x;x=Io(x))y++;for(x=0,P=v;P;P=Io(P))x++;for(;0<y-x;)m=Io(m),y--;for(;0<x-y;)v=Io(v),x--;for(;y--;){if(m===v||v!==null&&m===v.alternate)break t;m=Io(m),v=Io(v)}m=null}else m=null;d!==null&&B1(c,f,d,m,!1),h!==null&&g!==null&&B1(c,g,h,m,!0)}}e:{if(f=u?Xo(u):window,d=f.nodeName&&f.nodeName.toLowerCase(),d==="select"||d==="input"&&f.type==="file")var w=s_;else if(N1(f))if(n9)w=p_;else{w=u_;var S=l_}else(d=f.nodeName)&&d.toLowerCase()==="input"&&(f.type==="checkbox"||f.type==="radio")&&(w=c_);if(w&&(w=w(e,u))){t9(c,w,n,p);break e}S&&S(e,f,u),e==="focusout"&&(S=f._wrapperState)&&S.controlled&&f.type==="number"&&fh(f,"number",f.value)}switch(S=u?Xo(u):window,e){case"focusin":(N1(S)||S.contentEditable==="true")&&(Vo=S,Oh=u,sl=null);break;case"focusout":sl=Oh=Vo=null;break;case"mousedown":kh=!0;break;case"contextmenu":case"mouseup":case"dragend":kh=!1,L1(c,n,p);break;case"selectionchange":if(m_)break;case"keydown":case"keyup":L1(c,n,p)}var O;if(oy)e:{switch(e){case"compositionstart":var _="onCompositionStart";break e;case"compositionend":_="onCompositionEnd";break e;case"compositionupdate":_="onCompositionUpdate";break e}_=void 0}else qo?J5(e,n)&&(_="onCompositionEnd"):e==="keydown"&&n.keyCode===229&&(_="onCompositionStart");_&&(Z5&&n.locale!=="ko"&&(qo||_!=="onCompositionStart"?_==="onCompositionEnd"&&qo&&(O=Q5()):(pa=p,ny="value"in pa?pa.value:pa.textContent,qo=!0)),S=Qc(u,_),0<S.length&&(_=new E1(_,e,null,n,p),c.push({event:_,listeners:S}),O?_.data=O:(O=e9(n),O!==null&&(_.data=O)))),(O=n_?r_(e,n):a_(e,n))&&(u=Qc(u,"onBeforeInput"),0<u.length&&(p=new E1("onBeforeInput","beforeinput",null,n,p),c.push({event:p,listeners:u}),p.data=O))}f9(c,t)})}function Al(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Qc(e,t){for(var n=t+"Capture",r=[];e!==null;){var a=e,o=a.stateNode;a.tag===5&&o!==null&&(a=o,o=bl(e,n),o!=null&&r.unshift(Al(e,o,a)),o=bl(e,t),o!=null&&r.push(Al(e,o,a))),e=e.return}return r}function Io(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function B1(e,t,n,r,a){for(var o=t._reactName,i=[];n!==null&&n!==r;){var s=n,l=s.alternate,u=s.stateNode;if(l!==null&&l===r)break;s.tag===5&&u!==null&&(s=u,a?(l=bl(n,o),l!=null&&i.unshift(Al(n,l,s))):a||(l=bl(n,o),l!=null&&i.push(Al(n,l,s)))),n=n.return}i.length!==0&&e.push({event:t,listeners:i})}var g_=/\r\n?/g,x_=/\u0000|\uFFFD/g;function H1(e){return(typeof e=="string"?e:""+e).replace(g_,`
+`).replace(x_,"")}function Zu(e,t,n){if(t=H1(t),H1(e)!==t&&n)throw Error(U(425))}function Zc(){}var _h=null,Ch=null;function Ah(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var Eh=typeof setTimeout=="function"?setTimeout:void 0,w_=typeof clearTimeout=="function"?clearTimeout:void 0,G1=typeof Promise=="function"?Promise:void 0,b_=typeof queueMicrotask=="function"?queueMicrotask:typeof G1<"u"?function(e){return G1.resolve(null).then(e).catch(P_)}:Eh;function P_(e){setTimeout(function(){throw e})}function um(e,t){var n=t,r=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&a.nodeType===8)if(n=a.data,n==="/$"){if(r===0){e.removeChild(a),Ol(t);return}r--}else n!=="$"&&n!=="$?"&&n!=="$!"||r++;n=a}while(n);Ol(t)}function xa(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function U1(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var cs=Math.random().toString(36).slice(2),nr="__reactFiber$"+cs,El="__reactProps$"+cs,Rr="__reactContainer$"+cs,Th="__reactEvents$"+cs,S_="__reactListeners$"+cs,O_="__reactHandles$"+cs;function Xa(e){var t=e[nr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Rr]||n[nr]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=U1(e);e!==null;){if(n=e[nr])return n;e=U1(e)}return t}e=n,n=e.parentNode}return null}function Au(e){return e=e[nr]||e[Rr],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function Xo(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(U(33))}function Tf(e){return e[El]||null}var jh=[],Yo=-1;function ja(e){return{current:e}}function Fe(e){0>Yo||(e.current=jh[Yo],jh[Yo]=null,Yo--)}function $e(e,t){Yo++,jh[Yo]=e.current,e.current=t}var _a={},Tt=ja(_a),Gt=ja(!1),ho=_a;function Ai(e,t){var n=e.type.contextTypes;if(!n)return _a;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a={},o;for(o in n)a[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Ut(e){return e=e.childContextTypes,e!=null}function Jc(){Fe(Gt),Fe(Tt)}function W1(e,t,n){if(Tt.current!==_a)throw Error(U(168));$e(Tt,t),$e(Gt,n)}function m9(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var a in r)if(!(a in t))throw Error(U(108,lk(e)||"Unknown",a));return Ue({},n,r)}function ep(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||_a,ho=Tt.current,$e(Tt,e),$e(Gt,Gt.current),!0}function q1(e,t,n){var r=e.stateNode;if(!r)throw Error(U(169));n?(e=m9(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,Fe(Gt),Fe(Tt),$e(Tt,e)):Fe(Gt),$e(Gt,n)}var Sr=null,jf=!1,cm=!1;function h9(e){Sr===null?Sr=[e]:Sr.push(e)}function k_(e){jf=!0,h9(e)}function $a(){if(!cm&&Sr!==null){cm=!0;var e=0,t=ke;try{var n=Sr;for(ke=1;e<n.length;e++){var r=n[e];do r=r(!0);while(r!==null)}Sr=null,jf=!1}catch(a){throw Sr!==null&&(Sr=Sr.slice(e+1)),z5(Zv,$a),a}finally{ke=t,cm=!1}}return null}var Qo=[],Zo=0,tp=null,np=0,dn=[],mn=0,vo=null,kr=1,_r="";function Ua(e,t){Qo[Zo++]=np,Qo[Zo++]=tp,tp=e,np=t}function v9(e,t,n){dn[mn++]=kr,dn[mn++]=_r,dn[mn++]=vo,vo=e;var r=kr;e=_r;var a=32-Hn(r)-1;r&=~(1<<a),n+=1;var o=32-Hn(t)+a;if(30<o){var i=a-a%5;o=(r&(1<<i)-1).toString(32),r>>=i,a-=i,kr=1<<32-Hn(t)+a|n<<a|r,_r=o+e}else kr=1<<o|n<<a|r,_r=e}function sy(e){e.return!==null&&(Ua(e,1),v9(e,1,0))}function ly(e){for(;e===tp;)tp=Qo[--Zo],Qo[Zo]=null,np=Qo[--Zo],Qo[Zo]=null;for(;e===vo;)vo=dn[--mn],dn[mn]=null,_r=dn[--mn],dn[mn]=null,kr=dn[--mn],dn[mn]=null}var nn=null,en=null,ze=!1,Rn=null;function y9(e,t){var n=hn(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function V1(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,nn=e,en=xa(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,nn=e,en=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=vo!==null?{id:kr,overflow:_r}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=hn(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,nn=e,en=null,!0):!1;default:return!1}}function $h(e){return(e.mode&1)!==0&&(e.flags&128)===0}function Nh(e){if(ze){var t=en;if(t){var n=t;if(!V1(e,t)){if($h(e))throw Error(U(418));t=xa(n.nextSibling);var r=nn;t&&V1(e,t)?y9(r,n):(e.flags=e.flags&-4097|2,ze=!1,nn=e)}}else{if($h(e))throw Error(U(418));e.flags=e.flags&-4097|2,ze=!1,nn=e}}}function K1(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;nn=e}function Ju(e){if(e!==nn)return!1;if(!ze)return K1(e),ze=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!=="head"&&t!=="body"&&!Ah(e.type,e.memoizedProps)),t&&(t=en)){if($h(e))throw g9(),Error(U(418));for(;t;)y9(e,t),t=xa(t.nextSibling)}if(K1(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(U(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){en=xa(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}en=null}}else en=nn?xa(e.stateNode.nextSibling):null;return!0}function g9(){for(var e=en;e;)e=xa(e.nextSibling)}function Ei(){en=nn=null,ze=!1}function uy(e){Rn===null?Rn=[e]:Rn.push(e)}var __=Gr.ReactCurrentBatchConfig;function Is(e,t,n){if(e=n.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(n._owner){if(n=n._owner,n){if(n.tag!==1)throw Error(U(309));var r=n.stateNode}if(!r)throw Error(U(147,e));var a=r,o=""+e;return t!==null&&t.ref!==null&&typeof t.ref=="function"&&t.ref._stringRef===o?t.ref:(t=function(i){var s=a.refs;i===null?delete s[o]:s[o]=i},t._stringRef=o,t)}if(typeof e!="string")throw Error(U(284));if(!n._owner)throw Error(U(290,e))}return e}function ec(e,t){throw e=Object.prototype.toString.call(t),Error(U(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function X1(e){var t=e._init;return t(e._payload)}function x9(e){function t(v,y){if(e){var x=v.deletions;x===null?(v.deletions=[y],v.flags|=16):x.push(y)}}function n(v,y){if(!e)return null;for(;y!==null;)t(v,y),y=y.sibling;return null}function r(v,y){for(v=new Map;y!==null;)y.key!==null?v.set(y.key,y):v.set(y.index,y),y=y.sibling;return v}function a(v,y){return v=Sa(v,y),v.index=0,v.sibling=null,v}function o(v,y,x){return v.index=x,e?(x=v.alternate,x!==null?(x=x.index,x<y?(v.flags|=2,y):x):(v.flags|=2,y)):(v.flags|=1048576,y)}function i(v){return e&&v.alternate===null&&(v.flags|=2),v}function s(v,y,x,P){return y===null||y.tag!==6?(y=ym(x,v.mode,P),y.return=v,y):(y=a(y,x),y.return=v,y)}function l(v,y,x,P){var w=x.type;return w===Wo?p(v,y,x.props.children,P,x.key):y!==null&&(y.elementType===w||typeof w=="object"&&w!==null&&w.$$typeof===ea&&X1(w)===y.type)?(P=a(y,x.props),P.ref=Is(v,y,x),P.return=v,P):(P=Dc(x.type,x.key,x.props,null,v.mode,P),P.ref=Is(v,y,x),P.return=v,P)}function u(v,y,x,P){return y===null||y.tag!==4||y.stateNode.containerInfo!==x.containerInfo||y.stateNode.implementation!==x.implementation?(y=gm(x,v.mode,P),y.return=v,y):(y=a(y,x.children||[]),y.return=v,y)}function p(v,y,x,P,w){return y===null||y.tag!==7?(y=co(x,v.mode,P,w),y.return=v,y):(y=a(y,x),y.return=v,y)}function c(v,y,x){if(typeof y=="string"&&y!==""||typeof y=="number")return y=ym(""+y,v.mode,x),y.return=v,y;if(typeof y=="object"&&y!==null){switch(y.$$typeof){case Gu:return x=Dc(y.type,y.key,y.props,null,v.mode,x),x.ref=Is(v,null,y),x.return=v,x;case Uo:return y=gm(y,v.mode,x),y.return=v,y;case ea:var P=y._init;return c(v,P(y._payload),x)}if(Zs(y)||js(y))return y=co(y,v.mode,x,null),y.return=v,y;ec(v,y)}return null}function f(v,y,x,P){var w=y!==null?y.key:null;if(typeof x=="string"&&x!==""||typeof x=="number")return w!==null?null:s(v,y,""+x,P);if(typeof x=="object"&&x!==null){switch(x.$$typeof){case Gu:return x.key===w?l(v,y,x,P):null;case Uo:return x.key===w?u(v,y,x,P):null;case ea:return w=x._init,f(v,y,w(x._payload),P)}if(Zs(x)||js(x))return w!==null?null:p(v,y,x,P,null);ec(v,x)}return null}function d(v,y,x,P,w){if(typeof P=="string"&&P!==""||typeof P=="number")return v=v.get(x)||null,s(y,v,""+P,w);if(typeof P=="object"&&P!==null){switch(P.$$typeof){case Gu:return v=v.get(P.key===null?x:P.key)||null,l(y,v,P,w);case Uo:return v=v.get(P.key===null?x:P.key)||null,u(y,v,P,w);case ea:var S=P._init;return d(v,y,x,S(P._payload),w)}if(Zs(P)||js(P))return v=v.get(x)||null,p(y,v,P,w,null);ec(y,P)}return null}function h(v,y,x,P){for(var w=null,S=null,O=y,_=y=0,C=null;O!==null&&_<x.length;_++){O.index>_?(C=O,O=null):C=O.sibling;var j=f(v,O,x[_],P);if(j===null){O===null&&(O=C);break}e&&O&&j.alternate===null&&t(v,O),y=o(j,y,_),S===null?w=j:S.sibling=j,S=j,O=C}if(_===x.length)return n(v,O),ze&&Ua(v,_),w;if(O===null){for(;_<x.length;_++)O=c(v,x[_],P),O!==null&&(y=o(O,y,_),S===null?w=O:S.sibling=O,S=O);return ze&&Ua(v,_),w}for(O=r(v,O);_<x.length;_++)C=d(O,v,_,x[_],P),C!==null&&(e&&C.alternate!==null&&O.delete(C.key===null?_:C.key),y=o(C,y,_),S===null?w=C:S.sibling=C,S=C);return e&&O.forEach(function(E){return t(v,E)}),ze&&Ua(v,_),w}function m(v,y,x,P){var w=js(x);if(typeof w!="function")throw Error(U(150));if(x=w.call(x),x==null)throw Error(U(151));for(var S=w=null,O=y,_=y=0,C=null,j=x.next();O!==null&&!j.done;_++,j=x.next()){O.index>_?(C=O,O=null):C=O.sibling;var E=f(v,O,j.value,P);if(E===null){O===null&&(O=C);break}e&&O&&E.alternate===null&&t(v,O),y=o(E,y,_),S===null?w=E:S.sibling=E,S=E,O=C}if(j.done)return n(v,O),ze&&Ua(v,_),w;if(O===null){for(;!j.done;_++,j=x.next())j=c(v,j.value,P),j!==null&&(y=o(j,y,_),S===null?w=j:S.sibling=j,S=j);return ze&&Ua(v,_),w}for(O=r(v,O);!j.done;_++,j=x.next())j=d(O,v,_,j.value,P),j!==null&&(e&&j.alternate!==null&&O.delete(j.key===null?_:j.key),y=o(j,y,_),S===null?w=j:S.sibling=j,S=j);return e&&O.forEach(function(T){return t(v,T)}),ze&&Ua(v,_),w}function g(v,y,x,P){if(typeof x=="object"&&x!==null&&x.type===Wo&&x.key===null&&(x=x.props.children),typeof x=="object"&&x!==null){switch(x.$$typeof){case Gu:e:{for(var w=x.key,S=y;S!==null;){if(S.key===w){if(w=x.type,w===Wo){if(S.tag===7){n(v,S.sibling),y=a(S,x.props.children),y.return=v,v=y;break e}}else if(S.elementType===w||typeof w=="object"&&w!==null&&w.$$typeof===ea&&X1(w)===S.type){n(v,S.sibling),y=a(S,x.props),y.ref=Is(v,S,x),y.return=v,v=y;break e}n(v,S);break}else t(v,S);S=S.sibling}x.type===Wo?(y=co(x.props.children,v.mode,P,x.key),y.return=v,v=y):(P=Dc(x.type,x.key,x.props,null,v.mode,P),P.ref=Is(v,y,x),P.return=v,v=P)}return i(v);case Uo:e:{for(S=x.key;y!==null;){if(y.key===S)if(y.tag===4&&y.stateNode.containerInfo===x.containerInfo&&y.stateNode.implementation===x.implementation){n(v,y.sibling),y=a(y,x.children||[]),y.return=v,v=y;break e}else{n(v,y);break}else t(v,y);y=y.sibling}y=gm(x,v.mode,P),y.return=v,v=y}return i(v);case ea:return S=x._init,g(v,y,S(x._payload),P)}if(Zs(x))return h(v,y,x,P);if(js(x))return m(v,y,x,P);ec(v,x)}return typeof x=="string"&&x!==""||typeof x=="number"?(x=""+x,y!==null&&y.tag===6?(n(v,y.sibling),y=a(y,x),y.return=v,v=y):(n(v,y),y=ym(x,v.mode,P),y.return=v,v=y),i(v)):n(v,y)}return g}var Ti=x9(!0),w9=x9(!1),rp=ja(null),ap=null,Jo=null,cy=null;function py(){cy=Jo=ap=null}function fy(e){var t=rp.current;Fe(rp),e._currentValue=t}function Mh(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function ui(e,t){ap=e,cy=Jo=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Bt=!0),e.firstContext=null)}function xn(e){var t=e._currentValue;if(cy!==e)if(e={context:e,memoizedValue:t,next:null},Jo===null){if(ap===null)throw Error(U(308));Jo=e,ap.dependencies={lanes:0,firstContext:e}}else Jo=Jo.next=e;return t}var Ya=null;function dy(e){Ya===null?Ya=[e]:Ya.push(e)}function b9(e,t,n,r){var a=t.interleaved;return a===null?(n.next=n,dy(t)):(n.next=a.next,a.next=n),t.interleaved=n,Ir(e,r)}function Ir(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var ta=!1;function my(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function P9(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Tr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function wa(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,de&2){var a=r.pending;return a===null?t.next=t:(t.next=a.next,a.next=t),r.pending=t,Ir(e,n)}return a=r.interleaved,a===null?(t.next=t,dy(r)):(t.next=a.next,a.next=t),r.interleaved=t,Ir(e,n)}function jc(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Jv(e,n)}}function Y1(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var a=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?a=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?a=o=t:o=o.next=t}else a=o=t;n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function op(e,t,n,r){var a=e.updateQueue;ta=!1;var o=a.firstBaseUpdate,i=a.lastBaseUpdate,s=a.shared.pending;if(s!==null){a.shared.pending=null;var l=s,u=l.next;l.next=null,i===null?o=u:i.next=u,i=l;var p=e.alternate;p!==null&&(p=p.updateQueue,s=p.lastBaseUpdate,s!==i&&(s===null?p.firstBaseUpdate=u:s.next=u,p.lastBaseUpdate=l))}if(o!==null){var c=a.baseState;i=0,p=u=l=null,s=o;do{var f=s.lane,d=s.eventTime;if((r&f)===f){p!==null&&(p=p.next={eventTime:d,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var h=e,m=s;switch(f=t,d=n,m.tag){case 1:if(h=m.payload,typeof h=="function"){c=h.call(d,c,f);break e}c=h;break e;case 3:h.flags=h.flags&-65537|128;case 0:if(h=m.payload,f=typeof h=="function"?h.call(d,c,f):h,f==null)break e;c=Ue({},c,f);break e;case 2:ta=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,f=a.effects,f===null?a.effects=[s]:f.push(s))}else d={eventTime:d,lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},p===null?(u=p=d,l=c):p=p.next=d,i|=f;if(s=s.next,s===null){if(s=a.shared.pending,s===null)break;f=s,s=f.next,f.next=null,a.lastBaseUpdate=f,a.shared.pending=null}}while(!0);if(p===null&&(l=c),a.baseState=l,a.firstBaseUpdate=u,a.lastBaseUpdate=p,t=a.shared.interleaved,t!==null){a=t;do i|=a.lane,a=a.next;while(a!==t)}else o===null&&(a.shared.lanes=0);go|=i,e.lanes=i,e.memoizedState=c}}function Q1(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(a!==null){if(r.callback=null,r=n,typeof a!="function")throw Error(U(191,a));a.call(r)}}}var Eu={},cr=ja(Eu),Tl=ja(Eu),jl=ja(Eu);function Qa(e){if(e===Eu)throw Error(U(174));return e}function hy(e,t){switch($e(jl,t),$e(Tl,e),$e(cr,Eu),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:mh(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=mh(t,e)}Fe(cr),$e(cr,t)}function ji(){Fe(cr),Fe(Tl),Fe(jl)}function S9(e){Qa(jl.current);var t=Qa(cr.current),n=mh(t,e.type);t!==n&&($e(Tl,e),$e(cr,n))}function vy(e){Tl.current===e&&(Fe(cr),Fe(Tl))}var He=ja(0);function ip(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var pm=[];function yy(){for(var e=0;e<pm.length;e++)pm[e]._workInProgressVersionPrimary=null;pm.length=0}var $c=Gr.ReactCurrentDispatcher,fm=Gr.ReactCurrentBatchConfig,yo=0,Ge=null,at=null,ct=null,sp=!1,ll=!1,$l=0,C_=0;function bt(){throw Error(U(321))}function gy(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Un(e[n],t[n]))return!1;return!0}function xy(e,t,n,r,a,o){if(yo=o,Ge=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,$c.current=e===null||e.memoizedState===null?j_:$_,e=n(r,a),ll){o=0;do{if(ll=!1,$l=0,25<=o)throw Error(U(301));o+=1,ct=at=null,t.updateQueue=null,$c.current=N_,e=n(r,a)}while(ll)}if($c.current=lp,t=at!==null&&at.next!==null,yo=0,ct=at=Ge=null,sp=!1,t)throw Error(U(300));return e}function wy(){var e=$l!==0;return $l=0,e}function Qn(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return ct===null?Ge.memoizedState=ct=e:ct=ct.next=e,ct}function wn(){if(at===null){var e=Ge.alternate;e=e!==null?e.memoizedState:null}else e=at.next;var t=ct===null?Ge.memoizedState:ct.next;if(t!==null)ct=t,at=e;else{if(e===null)throw Error(U(310));at=e,e={memoizedState:at.memoizedState,baseState:at.baseState,baseQueue:at.baseQueue,queue:at.queue,next:null},ct===null?Ge.memoizedState=ct=e:ct=ct.next=e}return ct}function Nl(e,t){return typeof t=="function"?t(e):t}function dm(e){var t=wn(),n=t.queue;if(n===null)throw Error(U(311));n.lastRenderedReducer=e;var r=at,a=r.baseQueue,o=n.pending;if(o!==null){if(a!==null){var i=a.next;a.next=o.next,o.next=i}r.baseQueue=a=o,n.pending=null}if(a!==null){o=a.next,r=r.baseState;var s=i=null,l=null,u=o;do{var p=u.lane;if((yo&p)===p)l!==null&&(l=l.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var c={lane:p,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};l===null?(s=l=c,i=r):l=l.next=c,Ge.lanes|=p,go|=p}u=u.next}while(u!==null&&u!==o);l===null?i=r:l.next=s,Un(r,t.memoizedState)||(Bt=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=l,n.lastRenderedState=r}if(e=n.interleaved,e!==null){a=e;do o=a.lane,Ge.lanes|=o,go|=o,a=a.next;while(a!==e)}else a===null&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function mm(e){var t=wn(),n=t.queue;if(n===null)throw Error(U(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(a!==null){n.pending=null;var i=a=a.next;do o=e(o,i.action),i=i.next;while(i!==a);Un(o,t.memoizedState)||(Bt=!0),t.memoizedState=o,t.baseQueue===null&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function O9(){}function k9(e,t){var n=Ge,r=wn(),a=t(),o=!Un(r.memoizedState,a);if(o&&(r.memoizedState=a,Bt=!0),r=r.queue,by(A9.bind(null,n,r,e),[e]),r.getSnapshot!==t||o||ct!==null&&ct.memoizedState.tag&1){if(n.flags|=2048,Ml(9,C9.bind(null,n,r,a,t),void 0,null),ft===null)throw Error(U(349));yo&30||_9(n,t,a)}return a}function _9(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=Ge.updateQueue,t===null?(t={lastEffect:null,stores:null},Ge.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function C9(e,t,n,r){t.value=n,t.getSnapshot=r,E9(t)&&T9(e)}function A9(e,t,n){return n(function(){E9(t)&&T9(e)})}function E9(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Un(e,n)}catch{return!0}}function T9(e){var t=Ir(e,1);t!==null&&Gn(t,e,1,-1)}function Z1(e){var t=Qn();return typeof e=="function"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Nl,lastRenderedState:e},t.queue=e,e=e.dispatch=T_.bind(null,Ge,e),[t.memoizedState,e]}function Ml(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},t=Ge.updateQueue,t===null?(t={lastEffect:null,stores:null},Ge.updateQueue=t,t.lastEffect=e.next=e):(n=t.lastEffect,n===null?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e)),e}function j9(){return wn().memoizedState}function Nc(e,t,n,r){var a=Qn();Ge.flags|=e,a.memoizedState=Ml(1|t,n,void 0,r===void 0?null:r)}function $f(e,t,n,r){var a=wn();r=r===void 0?null:r;var o=void 0;if(at!==null){var i=at.memoizedState;if(o=i.destroy,r!==null&&gy(r,i.deps)){a.memoizedState=Ml(t,n,o,r);return}}Ge.flags|=e,a.memoizedState=Ml(1|t,n,o,r)}function J1(e,t){return Nc(8390656,8,e,t)}function by(e,t){return $f(2048,8,e,t)}function $9(e,t){return $f(4,2,e,t)}function N9(e,t){return $f(4,4,e,t)}function M9(e,t){if(typeof t=="function")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function R9(e,t,n){return n=n!=null?n.concat([e]):null,$f(4,4,M9.bind(null,t,e),n)}function Py(){}function I9(e,t){var n=wn();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&gy(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function D9(e,t){var n=wn();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&gy(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function L9(e,t,n){return yo&21?(Un(n,t)||(n=G5(),Ge.lanes|=n,go|=n,e.baseState=!0),t):(e.baseState&&(e.baseState=!1,Bt=!0),e.memoizedState=n)}function A_(e,t){var n=ke;ke=n!==0&&4>n?n:4,e(!0);var r=fm.transition;fm.transition={};try{e(!1),t()}finally{ke=n,fm.transition=r}}function F9(){return wn().memoizedState}function E_(e,t,n){var r=Pa(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},z9(e))B9(t,n);else if(n=b9(e,t,n,r),n!==null){var a=Dt();Gn(n,e,r,a),H9(n,t,r)}}function T_(e,t,n){var r=Pa(e),a={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(z9(e))B9(t,a);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,s=o(i,n);if(a.hasEagerState=!0,a.eagerState=s,Un(s,i)){var l=t.interleaved;l===null?(a.next=a,dy(t)):(a.next=l.next,l.next=a),t.interleaved=a;return}}catch{}finally{}n=b9(e,t,a,r),n!==null&&(a=Dt(),Gn(n,e,r,a),H9(n,t,r))}}function z9(e){var t=e.alternate;return e===Ge||t!==null&&t===Ge}function B9(e,t){ll=sp=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function H9(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Jv(e,n)}}var lp={readContext:xn,useCallback:bt,useContext:bt,useEffect:bt,useImperativeHandle:bt,useInsertionEffect:bt,useLayoutEffect:bt,useMemo:bt,useReducer:bt,useRef:bt,useState:bt,useDebugValue:bt,useDeferredValue:bt,useTransition:bt,useMutableSource:bt,useSyncExternalStore:bt,useId:bt,unstable_isNewReconciler:!1},j_={readContext:xn,useCallback:function(e,t){return Qn().memoizedState=[e,t===void 0?null:t],e},useContext:xn,useEffect:J1,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Nc(4194308,4,M9.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Nc(4194308,4,e,t)},useInsertionEffect:function(e,t){return Nc(4,2,e,t)},useMemo:function(e,t){var n=Qn();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Qn();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=E_.bind(null,Ge,e),[r.memoizedState,e]},useRef:function(e){var t=Qn();return e={current:e},t.memoizedState=e},useState:Z1,useDebugValue:Py,useDeferredValue:function(e){return Qn().memoizedState=e},useTransition:function(){var e=Z1(!1),t=e[0];return e=A_.bind(null,e[1]),Qn().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Ge,a=Qn();if(ze){if(n===void 0)throw Error(U(407));n=n()}else{if(n=t(),ft===null)throw Error(U(349));yo&30||_9(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,J1(A9.bind(null,r,o,e),[e]),r.flags|=2048,Ml(9,C9.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Qn(),t=ft.identifierPrefix;if(ze){var n=_r,r=kr;n=(r&~(1<<32-Hn(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=$l++,0<n&&(t+="H"+n.toString(32)),t+=":"}else n=C_++,t=":"+t+"r"+n.toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},$_={readContext:xn,useCallback:I9,useContext:xn,useEffect:by,useImperativeHandle:R9,useInsertionEffect:$9,useLayoutEffect:N9,useMemo:D9,useReducer:dm,useRef:j9,useState:function(){return dm(Nl)},useDebugValue:Py,useDeferredValue:function(e){var t=wn();return L9(t,at.memoizedState,e)},useTransition:function(){var e=dm(Nl)[0],t=wn().memoizedState;return[e,t]},useMutableSource:O9,useSyncExternalStore:k9,useId:F9,unstable_isNewReconciler:!1},N_={readContext:xn,useCallback:I9,useContext:xn,useEffect:by,useImperativeHandle:R9,useInsertionEffect:$9,useLayoutEffect:N9,useMemo:D9,useReducer:mm,useRef:j9,useState:function(){return mm(Nl)},useDebugValue:Py,useDeferredValue:function(e){var t=wn();return at===null?t.memoizedState=e:L9(t,at.memoizedState,e)},useTransition:function(){var e=mm(Nl)[0],t=wn().memoizedState;return[e,t]},useMutableSource:O9,useSyncExternalStore:k9,useId:F9,unstable_isNewReconciler:!1};function An(e,t){if(e&&e.defaultProps){t=Ue({},t),e=e.defaultProps;for(var n in e)t[n]===void 0&&(t[n]=e[n]);return t}return t}function Rh(e,t,n,r){t=e.memoizedState,n=n(r,t),n=n==null?t:Ue({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var Nf={isMounted:function(e){return(e=e._reactInternals)?To(e)===e:!1},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=Dt(),a=Pa(e),o=Tr(r,a);o.payload=t,n!=null&&(o.callback=n),t=wa(e,o,a),t!==null&&(Gn(t,e,a,r),jc(t,e,a))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=Dt(),a=Pa(e),o=Tr(r,a);o.tag=1,o.payload=t,n!=null&&(o.callback=n),t=wa(e,o,a),t!==null&&(Gn(t,e,a,r),jc(t,e,a))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Dt(),r=Pa(e),a=Tr(n,r);a.tag=2,t!=null&&(a.callback=t),t=wa(e,a,r),t!==null&&(Gn(t,e,r,n),jc(t,e,r))}};function ex(e,t,n,r,a,o,i){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(r,o,i):t.prototype&&t.prototype.isPureReactComponent?!_l(n,r)||!_l(a,o):!0}function G9(e,t,n){var r=!1,a=_a,o=t.contextType;return typeof o=="object"&&o!==null?o=xn(o):(a=Ut(t)?ho:Tt.current,r=t.contextTypes,o=(r=r!=null)?Ai(e,a):_a),t=new t(n,o),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=Nf,e.stateNode=t,t._reactInternals=e,r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function tx(e,t,n,r){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(n,r),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Nf.enqueueReplaceState(t,t.state,null)}function Ih(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs={},my(e);var o=t.contextType;typeof o=="object"&&o!==null?a.context=xn(o):(o=Ut(t)?ho:Tt.current,a.context=Ai(e,o)),a.state=e.memoizedState,o=t.getDerivedStateFromProps,typeof o=="function"&&(Rh(e,t,o,n),a.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof a.getSnapshotBeforeUpdate=="function"||typeof a.UNSAFE_componentWillMount!="function"&&typeof a.componentWillMount!="function"||(t=a.state,typeof a.componentWillMount=="function"&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount=="function"&&a.UNSAFE_componentWillMount(),t!==a.state&&Nf.enqueueReplaceState(a,a.state,null),op(e,n,a,r),a.state=e.memoizedState),typeof a.componentDidMount=="function"&&(e.flags|=4194308)}function $i(e,t){try{var n="",r=t;do n+=sk(r),r=r.return;while(r);var a=n}catch(o){a=`
 Error generating stack: `+o.message+`
-`+o.stack}return{value:e,source:t,stack:a,digest:null}}function hm(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Dh(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var j_=typeof WeakMap=="function"?WeakMap:Map;function H9(e,t,n){n=Tr(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){ff||(ff=!0,Vh=r),Dh(e,t)},n}function G9(e,t,n){n=Tr(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var a=t.value;n.payload=function(){return r(a)},n.callback=function(){Dh(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){Dh(e,t),typeof r!="function"&&(ba===null?ba=new Set([this]):ba.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),n}function nx(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new j_;var a=new Set;r.set(t,a)}else a=r.get(t),a===void 0&&(a=new Set,r.set(t,a));a.has(n)||(a.add(n),e=W_.bind(null,e,t,n),t.then(e,e))}function rx(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function ax(e,t,n,r,a){return e.mode&1?(e.flags|=65536,e.lanes=a,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Tr(-1,1),t.tag=2,wa(n,t,1))),n.lanes|=1),e)}var $_=Gr.ReactCurrentOwner,Bt=!1;function Nt(e,t,n,r){t.child=e===null?g9(t,null,n,r):Ti(t,e.child,n,r)}function ox(e,t,n,r,a){n=n.render;var o=t.ref;return ui(t,a),r=x0(e,t,n,r,o,a),n=w0(),e!==null&&!Bt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Dr(e,t,a)):(ze&&n&&s0(t),t.flags|=1,Nt(e,t,r,a),t.child)}function ix(e,t,n,r,a){if(e===null){var o=n.type;return typeof o=="function"&&!T0(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,U9(e,t,o,r,a)):(e=Dc(n.type,null,r,t,t.mode,a),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,!(e.lanes&a)){var i=o.memoizedProps;if(n=n.compare,n=n!==null?n:_l,n(i,r)&&e.ref===t.ref)return Dr(e,t,a)}return t.flags|=1,e=Sa(o,r),e.ref=t.ref,e.return=t,t.child=e}function U9(e,t,n,r,a){if(e!==null){var o=e.memoizedProps;if(_l(o,r)&&e.ref===t.ref)if(Bt=!1,t.pendingProps=r=o,(e.lanes&a)!==0)e.flags&131072&&(Bt=!0);else return t.lanes=e.lanes,Dr(e,t,a)}return Lh(e,t,n,r,a)}function W9(e,t,n){var r=t.pendingProps,a=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},$e(ti,Yt),Yt|=n;else{if(!(n&1073741824))return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,$e(ti,Yt),Yt|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,$e(ti,Yt),Yt|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,$e(ti,Yt),Yt|=r;return Nt(e,t,a,n),t.child}function q9(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Lh(e,t,n,r,a){var o=Ut(n)?ho:Tt.current;return o=Ci(t,o),ui(t,a),n=x0(e,t,n,r,o,a),r=w0(),e!==null&&!Bt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Dr(e,t,a)):(ze&&r&&s0(t),t.flags|=1,Nt(e,t,n,a),t.child)}function sx(e,t,n,r,a){if(Ut(n)){var o=!0;ef(t)}else o=!1;if(ui(t,a),t.stateNode===null)Mc(e,t),B9(t,n,r),Ih(t,n,r,a),r=!0;else if(e===null){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,u=n.contextType;typeof u=="object"&&u!==null?u=xn(u):(u=Ut(n)?ho:Tt.current,u=Ci(t,u));var f=n.getDerivedStateFromProps,c=typeof f=="function"||typeof i.getSnapshotBeforeUpdate=="function";c||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(s!==r||l!==u)&&tx(t,i,r,u),ta=!1;var p=t.memoizedState;i.state=p,of(t,r,i,a),l=t.memoizedState,s!==r||p!==l||Gt.current||ta?(typeof f=="function"&&(Rh(t,n,f,r),l=t.memoizedState),(s=ta||ex(t,n,s,r,p,l,u))?(c||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=u,r=s):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,w9(e,t),s=t.memoizedProps,u=t.type===t.elementType?s:Cn(t.type,s),i.props=u,c=t.pendingProps,p=i.context,l=n.contextType,typeof l=="object"&&l!==null?l=xn(l):(l=Ut(n)?ho:Tt.current,l=Ci(t,l));var d=n.getDerivedStateFromProps;(f=typeof d=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(s!==c||p!==l)&&tx(t,i,r,l),ta=!1,p=t.memoizedState,i.state=p,of(t,r,i,a);var h=t.memoizedState;s!==c||p!==h||Gt.current||ta?(typeof d=="function"&&(Rh(t,n,d,r),h=t.memoizedState),(u=ta||ex(t,n,u,r,p,h,l)||!1)?(f||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(r,h,l),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(r,h,l)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=h),i.props=r,i.state=h,i.context=l,r=u):(typeof i.componentDidUpdate!="function"||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return Fh(e,t,n,r,o,a)}function Fh(e,t,n,r,a,o){q9(e,t);var i=(t.flags&128)!==0;if(!r&&!i)return a&&q1(t,n,!1),Dr(e,t,o);r=t.stateNode,$_.current=t;var s=i&&typeof n.getDerivedStateFromError!="function"?null:r.render();return t.flags|=1,e!==null&&i?(t.child=Ti(t,e.child,null,o),t.child=Ti(t,null,s,o)):Nt(e,t,s,o),t.memoizedState=r.state,a&&q1(t,n,!0),t.child}function V9(e){var t=e.stateNode;t.pendingContext?W1(e,t.pendingContext,t.pendingContext!==t.context):t.context&&W1(e,t.context,!1),h0(e,t.containerInfo)}function lx(e,t,n,r,a){return Ei(),u0(a),t.flags|=256,Nt(e,t,n,r),t.child}var zh={dehydrated:null,treeContext:null,retryLane:0};function Bh(e){return{baseLanes:e,cachePool:null,transitions:null}}function K9(e,t,n){var r=t.pendingProps,a=He.current,o=!1,i=(t.flags&128)!==0,s;if((s=i)||(s=e!==null&&e.memoizedState===null?!1:(a&2)!==0),s?(o=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(a|=1),$e(He,a&1),e===null)return Nh(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(i=r.children,e=r.fallback,o?(r=t.mode,o=t.child,i={mode:"hidden",children:i},!(r&1)&&o!==null?(o.childLanes=0,o.pendingProps=i):o=Ip(i,r,0,null),e=co(e,r,n,null),o.return=t,e.return=t,o.sibling=e,t.child=o,t.child.memoizedState=Bh(n),t.memoizedState=zh,e):S0(t,i));if(a=e.memoizedState,a!==null&&(s=a.dehydrated,s!==null))return N_(e,t,i,r,s,a,n);if(o){o=r.fallback,i=t.mode,a=e.child,s=a.sibling;var l={mode:"hidden",children:r.children};return!(i&1)&&t.child!==a?(r=t.child,r.childLanes=0,r.pendingProps=l,t.deletions=null):(r=Sa(a,l),r.subtreeFlags=a.subtreeFlags&14680064),s!==null?o=Sa(s,o):(o=co(o,i,n,null),o.flags|=2),o.return=t,r.return=t,r.sibling=o,t.child=r,r=o,o=t.child,i=e.child.memoizedState,i=i===null?Bh(n):{baseLanes:i.baseLanes|n,cachePool:null,transitions:i.transitions},o.memoizedState=i,o.childLanes=e.childLanes&~n,t.memoizedState=zh,r}return o=e.child,e=o.sibling,r=Sa(o,{mode:"visible",children:r.children}),!(t.mode&1)&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function S0(e,t){return t=Ip({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function tc(e,t,n,r){return r!==null&&u0(r),Ti(t,e.child,null,n),e=S0(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function N_(e,t,n,r,a,o,i){if(n)return t.flags&256?(t.flags&=-257,r=hm(Error(U(422))),tc(e,t,i,r)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(o=r.fallback,a=t.mode,r=Ip({mode:"visible",children:r.children},a,0,null),o=co(o,a,i,null),o.flags|=2,r.return=t,o.return=t,r.sibling=o,t.child=r,t.mode&1&&Ti(t,e.child,null,i),t.child.memoizedState=Bh(i),t.memoizedState=zh,o);if(!(t.mode&1))return tc(e,t,i,null);if(a.data==="$!"){if(r=a.nextSibling&&a.nextSibling.dataset,r)var s=r.dgst;return r=s,o=Error(U(419)),r=hm(o,r,void 0),tc(e,t,i,r)}if(s=(i&e.childLanes)!==0,Bt||s){if(r=pt,r!==null){switch(i&-i){case 4:a=2;break;case 16:a=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}a=a&(r.suspendedLanes|i)?0:a,a!==0&&a!==o.retryLane&&(o.retryLane=a,Ir(e,a),Gn(r,e,a,-1))}return E0(),r=hm(Error(U(421))),tc(e,t,i,r)}return a.data==="$?"?(t.flags|=128,t.child=e.child,t=q_.bind(null,e),a._reactRetry=t,null):(e=o.treeContext,en=xa(a.nextSibling),nn=t,ze=!0,Rn=null,e!==null&&(dn[mn++]=kr,dn[mn++]=_r,dn[mn++]=vo,kr=e.id,_r=e.overflow,vo=t),t=S0(t,r.children),t.flags|=4096,t)}function ux(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),Mh(e.return,t,n)}function vm(e,t,n,r,a){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=a)}function X9(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(Nt(e,t,r.children,n),r=He.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&ux(e,n,t);else if(e.tag===19)ux(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if($e(He,r),!(t.mode&1))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;n!==null;)e=n.alternate,e!==null&&sf(e)===null&&(a=n),n=n.sibling;n=a,n===null?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),vm(t,!1,a,n,o);break;case"backwards":for(n=null,a=t.child,t.child=null;a!==null;){if(e=a.alternate,e!==null&&sf(e)===null){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}vm(t,!0,n,null,o);break;case"together":vm(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Mc(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Dr(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),go|=t.lanes,!(n&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(U(153));if(t.child!==null){for(e=t.child,n=Sa(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Sa(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function M_(e,t,n){switch(t.tag){case 3:V9(t),Ei();break;case 5:b9(t);break;case 1:Ut(t.type)&&ef(t);break;case 4:h0(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,a=t.memoizedProps.value;$e(rf,r._currentValue),r._currentValue=a;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?($e(He,He.current&1),t.flags|=128,null):n&t.child.childLanes?K9(e,t,n):($e(He,He.current&1),e=Dr(e,t,n),e!==null?e.sibling:null);$e(He,He.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return X9(e,t,n);t.flags|=128}if(a=t.memoizedState,a!==null&&(a.rendering=null,a.tail=null,a.lastEffect=null),$e(He,He.current),r)break;return null;case 22:case 23:return t.lanes=0,W9(e,t,n)}return Dr(e,t,n)}var Y9,Hh,Q9,Z9;Y9=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};Hh=function(){};Q9=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Qa(cr.current);var o=null;switch(n){case"input":a=ch(e,a),r=ch(e,r),o=[];break;case"select":a=Ue({},a,{value:void 0}),r=Ue({},r,{value:void 0}),o=[];break;case"textarea":a=dh(e,a),r=dh(e,r),o=[];break;default:typeof a.onClick!="function"&&typeof r.onClick=="function"&&(e.onclick=Zc)}hh(n,r);var i;n=null;for(u in a)if(!r.hasOwnProperty(u)&&a.hasOwnProperty(u)&&a[u]!=null)if(u==="style"){var s=a[u];for(i in s)s.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else u!=="dangerouslySetInnerHTML"&&u!=="children"&&u!=="suppressContentEditableWarning"&&u!=="suppressHydrationWarning"&&u!=="autoFocus"&&(xl.hasOwnProperty(u)?o||(o=[]):(o=o||[]).push(u,null));for(u in r){var l=r[u];if(s=a!=null?a[u]:void 0,r.hasOwnProperty(u)&&l!==s&&(l!=null||s!=null))if(u==="style")if(s){for(i in s)!s.hasOwnProperty(i)||l&&l.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in l)l.hasOwnProperty(i)&&s[i]!==l[i]&&(n||(n={}),n[i]=l[i])}else n||(o||(o=[]),o.push(u,n)),n=l;else u==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,s=s?s.__html:void 0,l!=null&&s!==l&&(o=o||[]).push(u,l)):u==="children"?typeof l!="string"&&typeof l!="number"||(o=o||[]).push(u,""+l):u!=="suppressContentEditableWarning"&&u!=="suppressHydrationWarning"&&(xl.hasOwnProperty(u)?(l!=null&&u==="onScroll"&&Ie("scroll",e),o||s===l||(o=[])):(o=o||[]).push(u,l))}n&&(o=o||[]).push("style",n);var u=o;(t.updateQueue=u)&&(t.flags|=4)}};Z9=function(e,t,n,r){n!==r&&(t.flags|=4)};function Ds(e,t){if(!ze)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Pt(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var a=e.child;a!==null;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags&14680064,r|=a.flags&14680064,a.return=e,a=a.sibling;else for(a=e.child;a!==null;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags,r|=a.flags,a.return=e,a=a.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function R_(e,t,n){var r=t.pendingProps;switch(l0(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Pt(t),null;case 1:return Ut(t.type)&&Jc(),Pt(t),null;case 3:return r=t.stateNode,ji(),Fe(Gt),Fe(Tt),y0(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(Ju(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Rn!==null&&(Yh(Rn),Rn=null))),Hh(e,t),Pt(t),null;case 5:v0(t);var a=Qa(jl.current);if(n=t.type,e!==null&&t.stateNode!=null)Q9(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(U(166));return Pt(t),null}if(e=Qa(cr.current),Ju(t)){r=t.stateNode,n=t.type;var o=t.memoizedProps;switch(r[nr]=t,r[El]=o,e=(t.mode&1)!==0,n){case"dialog":Ie("cancel",r),Ie("close",r);break;case"iframe":case"object":case"embed":Ie("load",r);break;case"video":case"audio":for(a=0;a<el.length;a++)Ie(el[a],r);break;case"source":Ie("error",r);break;case"img":case"image":case"link":Ie("error",r),Ie("load",r);break;case"details":Ie("toggle",r);break;case"input":g1(r,o),Ie("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!o.multiple},Ie("invalid",r);break;case"textarea":w1(r,o),Ie("invalid",r)}hh(n,o),a=null;for(var i in o)if(o.hasOwnProperty(i)){var s=o[i];i==="children"?typeof s=="string"?r.textContent!==s&&(o.suppressHydrationWarning!==!0&&Zu(r.textContent,s,e),a=["children",s]):typeof s=="number"&&r.textContent!==""+s&&(o.suppressHydrationWarning!==!0&&Zu(r.textContent,s,e),a=["children",""+s]):xl.hasOwnProperty(i)&&s!=null&&i==="onScroll"&&Ie("scroll",r)}switch(n){case"input":Uu(r),x1(r,o,!0);break;case"textarea":Uu(r),b1(r);break;case"select":case"option":break;default:typeof o.onClick=="function"&&(r.onclick=Zc)}r=a,t.updateQueue=r,r!==null&&(t.flags|=4)}else{i=a.nodeType===9?a:a.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=_5(n)),e==="http://www.w3.org/1999/xhtml"?n==="script"?(e=i.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[nr]=t,e[El]=r,Y9(e,t,!1,!1),t.stateNode=e;e:{switch(i=vh(n,r),n){case"dialog":Ie("cancel",e),Ie("close",e),a=r;break;case"iframe":case"object":case"embed":Ie("load",e),a=r;break;case"video":case"audio":for(a=0;a<el.length;a++)Ie(el[a],e);a=r;break;case"source":Ie("error",e),a=r;break;case"img":case"image":case"link":Ie("error",e),Ie("load",e),a=r;break;case"details":Ie("toggle",e),a=r;break;case"input":g1(e,r),a=ch(e,r),Ie("invalid",e);break;case"option":a=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=Ue({},r,{value:void 0}),Ie("invalid",e);break;case"textarea":w1(e,r),a=dh(e,r),Ie("invalid",e);break;default:a=r}hh(n,a),s=a;for(o in s)if(s.hasOwnProperty(o)){var l=s[o];o==="style"?E5(e,l):o==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,l!=null&&A5(e,l)):o==="children"?typeof l=="string"?(n!=="textarea"||l!=="")&&wl(e,l):typeof l=="number"&&wl(e,""+l):o!=="suppressContentEditableWarning"&&o!=="suppressHydrationWarning"&&o!=="autoFocus"&&(xl.hasOwnProperty(o)?l!=null&&o==="onScroll"&&Ie("scroll",e):l!=null&&Vy(e,o,l,i))}switch(n){case"input":Uu(e),x1(e,r,!1);break;case"textarea":Uu(e),b1(e);break;case"option":r.value!=null&&e.setAttribute("value",""+ka(r.value));break;case"select":e.multiple=!!r.multiple,o=r.value,o!=null?oi(e,!!r.multiple,o,!1):r.defaultValue!=null&&oi(e,!!r.multiple,r.defaultValue,!0);break;default:typeof a.onClick=="function"&&(e.onclick=Zc)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return Pt(t),null;case 6:if(e&&t.stateNode!=null)Z9(e,t,e.memoizedProps,r);else{if(typeof r!="string"&&t.stateNode===null)throw Error(U(166));if(n=Qa(jl.current),Qa(cr.current),Ju(t)){if(r=t.stateNode,n=t.memoizedProps,r[nr]=t,(o=r.nodeValue!==n)&&(e=nn,e!==null))switch(e.tag){case 3:Zu(r.nodeValue,n,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&Zu(r.nodeValue,n,(e.mode&1)!==0)}o&&(t.flags|=4)}else r=(n.nodeType===9?n:n.ownerDocument).createTextNode(r),r[nr]=t,t.stateNode=r}return Pt(t),null;case 13:if(Fe(He),r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(ze&&en!==null&&t.mode&1&&!(t.flags&128))v9(),Ei(),t.flags|=98560,o=!1;else if(o=Ju(t),r!==null&&r.dehydrated!==null){if(e===null){if(!o)throw Error(U(318));if(o=t.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(U(317));o[nr]=t}else Ei(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Pt(t),o=!1}else Rn!==null&&(Yh(Rn),Rn=null),o=!0;if(!o)return t.flags&65536?t:null}return t.flags&128?(t.lanes=n,t):(r=r!==null,r!==(e!==null&&e.memoizedState!==null)&&r&&(t.child.flags|=8192,t.mode&1&&(e===null||He.current&1?ot===0&&(ot=3):E0())),t.updateQueue!==null&&(t.flags|=4),Pt(t),null);case 4:return ji(),Hh(e,t),e===null&&Al(t.stateNode.containerInfo),Pt(t),null;case 10:return p0(t.type._context),Pt(t),null;case 17:return Ut(t.type)&&Jc(),Pt(t),null;case 19:if(Fe(He),o=t.memoizedState,o===null)return Pt(t),null;if(r=(t.flags&128)!==0,i=o.rendering,i===null)if(r)Ds(o,!1);else{if(ot!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(i=sf(e),i!==null){for(t.flags|=128,Ds(o,!1),r=i.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;n!==null;)o=n,e=r,o.flags&=14680066,i=o.alternate,i===null?(o.childLanes=0,o.lanes=e,o.child=null,o.subtreeFlags=0,o.memoizedProps=null,o.memoizedState=null,o.updateQueue=null,o.dependencies=null,o.stateNode=null):(o.childLanes=i.childLanes,o.lanes=i.lanes,o.child=i.child,o.subtreeFlags=0,o.deletions=null,o.memoizedProps=i.memoizedProps,o.memoizedState=i.memoizedState,o.updateQueue=i.updateQueue,o.type=i.type,e=i.dependencies,o.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return $e(He,He.current&1|2),t.child}e=e.sibling}o.tail!==null&&Ke()>Ni&&(t.flags|=128,r=!0,Ds(o,!1),t.lanes=4194304)}else{if(!r)if(e=sf(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Ds(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!ze)return Pt(t),null}else 2*Ke()-o.renderingStartTime>Ni&&n!==1073741824&&(t.flags|=128,r=!0,Ds(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Ke(),t.sibling=null,n=He.current,$e(He,r?n&1|2:n&1),t):(Pt(t),null);case 22:case 23:return C0(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Yt&1073741824&&(Pt(t),t.subtreeFlags&6&&(t.flags|=8192)):Pt(t),null;case 24:return null;case 25:return null}throw Error(U(156,t.tag))}function I_(e,t){switch(l0(t),t.tag){case 1:return Ut(t.type)&&Jc(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ji(),Fe(Gt),Fe(Tt),y0(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return v0(t),null;case 13:if(Fe(He),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(U(340));Ei()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Fe(He),null;case 4:return ji(),null;case 10:return p0(t.type._context),null;case 22:case 23:return C0(),null;case 24:return null;default:return null}}var nc=!1,_t=!1,D_=typeof WeakSet=="function"?WeakSet:Set,Y=null;function ei(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){qe(e,t,r)}else n.current=null}function Gh(e,t,n){try{n()}catch(r){qe(e,t,r)}}var cx=!1;function L_(e,t){if(_h=Xc,e=r9(),i0(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,s=-1,l=-1,u=0,f=0,c=e,p=null;t:for(;;){for(var d;c!==n||a!==0&&c.nodeType!==3||(s=i+a),c!==o||r!==0&&c.nodeType!==3||(l=i+r),c.nodeType===3&&(i+=c.nodeValue.length),(d=c.firstChild)!==null;)p=c,c=d;for(;;){if(c===e)break t;if(p===n&&++u===a&&(s=i),p===o&&++f===r&&(l=i),(d=c.nextSibling)!==null)break;c=p,p=c.parentNode}c=d}n=s===-1||l===-1?null:{start:s,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ah={focusedElem:e,selectionRange:n},Xc=!1,Y=t;Y!==null;)if(t=Y,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Y=e;else for(;Y!==null;){t=Y;try{var h=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(h!==null){var m=h.memoizedProps,g=h.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?m:Cn(t.type,m),g);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var x=t.stateNode.containerInfo;x.nodeType===1?x.textContent="":x.nodeType===9&&x.documentElement&&x.removeChild(x.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(U(163))}}catch(P){qe(t,t.return,P)}if(e=t.sibling,e!==null){e.return=t.return,Y=e;break}Y=t.return}return h=cx,cx=!1,h}function ul(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var a=r=r.next;do{if((a.tag&e)===e){var o=a.destroy;a.destroy=void 0,o!==void 0&&Gh(t,n,o)}a=a.next}while(a!==r)}}function Mp(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Uh(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function J9(e){var t=e.alternate;t!==null&&(e.alternate=null,J9(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[nr],delete t[El],delete t[Th],delete t[w_],delete t[b_])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function e6(e){return e.tag===5||e.tag===3||e.tag===4}function fx(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||e6(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Wh(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Zc));else if(r!==4&&(e=e.child,e!==null))for(Wh(e,t,n),e=e.sibling;e!==null;)Wh(e,t,n),e=e.sibling}function qh(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(qh(e,t,n),e=e.sibling;e!==null;)qh(e,t,n),e=e.sibling}var ht=null,$n=!1;function Kr(e,t,n){for(n=n.child;n!==null;)t6(e,t,n),n=n.sibling}function t6(e,t,n){if(ur&&typeof ur.onCommitFiberUnmount=="function")try{ur.onCommitFiberUnmount(_p,n)}catch{}switch(n.tag){case 5:_t||ei(n,t);case 6:var r=ht,a=$n;ht=null,Kr(e,t,n),ht=r,$n=a,ht!==null&&($n?(e=ht,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ht.removeChild(n.stateNode));break;case 18:ht!==null&&($n?(e=ht,n=n.stateNode,e.nodeType===8?um(e.parentNode,n):e.nodeType===1&&um(e,n),Ol(e)):um(ht,n.stateNode));break;case 4:r=ht,a=$n,ht=n.stateNode.containerInfo,$n=!0,Kr(e,t,n),ht=r,$n=a;break;case 0:case 11:case 14:case 15:if(!_t&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){a=r=r.next;do{var o=a,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Gh(n,t,i),a=a.next}while(a!==r)}Kr(e,t,n);break;case 1:if(!_t&&(ei(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){qe(n,t,s)}Kr(e,t,n);break;case 21:Kr(e,t,n);break;case 22:n.mode&1?(_t=(r=_t)||n.memoizedState!==null,Kr(e,t,n),_t=r):Kr(e,t,n);break;default:Kr(e,t,n)}}function px(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new D_),t.forEach(function(r){var a=V_.bind(null,e,r);n.has(r)||(n.add(r),r.then(a,a))})}}function kn(e,t){var n=t.deletions;if(n!==null)for(var r=0;r<n.length;r++){var a=n[r];try{var o=e,i=t,s=i;e:for(;s!==null;){switch(s.tag){case 5:ht=s.stateNode,$n=!1;break e;case 3:ht=s.stateNode.containerInfo,$n=!0;break e;case 4:ht=s.stateNode.containerInfo,$n=!0;break e}s=s.return}if(ht===null)throw Error(U(160));t6(o,i,a),ht=null,$n=!1;var l=a.alternate;l!==null&&(l.return=null),a.return=null}catch(u){qe(a,t,u)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)n6(t,e),t=t.sibling}function n6(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(kn(t,e),Yn(e),r&4){try{ul(3,e,e.return),Mp(3,e)}catch(m){qe(e,e.return,m)}try{ul(5,e,e.return)}catch(m){qe(e,e.return,m)}}break;case 1:kn(t,e),Yn(e),r&512&&n!==null&&ei(n,n.return);break;case 5:if(kn(t,e),Yn(e),r&512&&n!==null&&ei(n,n.return),e.flags&32){var a=e.stateNode;try{wl(a,"")}catch(m){qe(e,e.return,m)}}if(r&4&&(a=e.stateNode,a!=null)){var o=e.memoizedProps,i=n!==null?n.memoizedProps:o,s=e.type,l=e.updateQueue;if(e.updateQueue=null,l!==null)try{s==="input"&&o.type==="radio"&&o.name!=null&&O5(a,o),vh(s,i);var u=vh(s,o);for(i=0;i<l.length;i+=2){var f=l[i],c=l[i+1];f==="style"?E5(a,c):f==="dangerouslySetInnerHTML"?A5(a,c):f==="children"?wl(a,c):Vy(a,f,c,u)}switch(s){case"input":fh(a,o);break;case"textarea":k5(a,o);break;case"select":var p=a._wrapperState.wasMultiple;a._wrapperState.wasMultiple=!!o.multiple;var d=o.value;d!=null?oi(a,!!o.multiple,d,!1):p!==!!o.multiple&&(o.defaultValue!=null?oi(a,!!o.multiple,o.defaultValue,!0):oi(a,!!o.multiple,o.multiple?[]:"",!1))}a[El]=o}catch(m){qe(e,e.return,m)}}break;case 6:if(kn(t,e),Yn(e),r&4){if(e.stateNode===null)throw Error(U(162));a=e.stateNode,o=e.memoizedProps;try{a.nodeValue=o}catch(m){qe(e,e.return,m)}}break;case 3:if(kn(t,e),Yn(e),r&4&&n!==null&&n.memoizedState.isDehydrated)try{Ol(t.containerInfo)}catch(m){qe(e,e.return,m)}break;case 4:kn(t,e),Yn(e);break;case 13:kn(t,e),Yn(e),a=e.child,a.flags&8192&&(o=a.memoizedState!==null,a.stateNode.isHidden=o,!o||a.alternate!==null&&a.alternate.memoizedState!==null||(_0=Ke())),r&4&&px(e);break;case 22:if(f=n!==null&&n.memoizedState!==null,e.mode&1?(_t=(u=_t)||f,kn(t,e),_t=u):kn(t,e),Yn(e),r&8192){if(u=e.memoizedState!==null,(e.stateNode.isHidden=u)&&!f&&e.mode&1)for(Y=e,f=e.child;f!==null;){for(c=Y=f;Y!==null;){switch(p=Y,d=p.child,p.tag){case 0:case 11:case 14:case 15:ul(4,p,p.return);break;case 1:ei(p,p.return);var h=p.stateNode;if(typeof h.componentWillUnmount=="function"){r=p,n=p.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(m){qe(r,n,m)}}break;case 5:ei(p,p.return);break;case 22:if(p.memoizedState!==null){mx(c);continue}}d!==null?(d.return=p,Y=d):mx(c)}f=f.sibling}e:for(f=null,c=e;;){if(c.tag===5){if(f===null){f=c;try{a=c.stateNode,u?(o=a.style,typeof o.setProperty=="function"?o.setProperty("display","none","important"):o.display="none"):(s=c.stateNode,l=c.memoizedProps.style,i=l!=null&&l.hasOwnProperty("display")?l.display:null,s.style.display=C5("display",i))}catch(m){qe(e,e.return,m)}}}else if(c.tag===6){if(f===null)try{c.stateNode.nodeValue=u?"":c.memoizedProps}catch(m){qe(e,e.return,m)}}else if((c.tag!==22&&c.tag!==23||c.memoizedState===null||c===e)&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===e)break e;for(;c.sibling===null;){if(c.return===null||c.return===e)break e;f===c&&(f=null),c=c.return}f===c&&(f=null),c.sibling.return=c.return,c=c.sibling}}break;case 19:kn(t,e),Yn(e),r&4&&px(e);break;case 21:break;default:kn(t,e),Yn(e)}}function Yn(e){var t=e.flags;if(t&2){try{e:{for(var n=e.return;n!==null;){if(e6(n)){var r=n;break e}n=n.return}throw Error(U(160))}switch(r.tag){case 5:var a=r.stateNode;r.flags&32&&(wl(a,""),r.flags&=-33);var o=fx(e);qh(e,o,a);break;case 3:case 4:var i=r.stateNode.containerInfo,s=fx(e);Wh(e,s,i);break;default:throw Error(U(161))}}catch(l){qe(e,e.return,l)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function F_(e,t,n){Y=e,r6(e)}function r6(e,t,n){for(var r=(e.mode&1)!==0;Y!==null;){var a=Y,o=a.child;if(a.tag===22&&r){var i=a.memoizedState!==null||nc;if(!i){var s=a.alternate,l=s!==null&&s.memoizedState!==null||_t;s=nc;var u=_t;if(nc=i,(_t=l)&&!u)for(Y=a;Y!==null;)i=Y,l=i.child,i.tag===22&&i.memoizedState!==null?hx(a):l!==null?(l.return=i,Y=l):hx(a);for(;o!==null;)Y=o,r6(o),o=o.sibling;Y=a,nc=s,_t=u}dx(e)}else a.subtreeFlags&8772&&o!==null?(o.return=a,Y=o):dx(e)}}function dx(e){for(;Y!==null;){var t=Y;if(t.flags&8772){var n=t.alternate;try{if(t.flags&8772)switch(t.tag){case 0:case 11:case 15:_t||Mp(5,t);break;case 1:var r=t.stateNode;if(t.flags&4&&!_t)if(n===null)r.componentDidMount();else{var a=t.elementType===t.type?n.memoizedProps:Cn(t.type,n.memoizedProps);r.componentDidUpdate(a,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var o=t.updateQueue;o!==null&&Q1(t,o,r);break;case 3:var i=t.updateQueue;if(i!==null){if(n=null,t.child!==null)switch(t.child.tag){case 5:n=t.child.stateNode;break;case 1:n=t.child.stateNode}Q1(t,i,n)}break;case 5:var s=t.stateNode;if(n===null&&t.flags&4){n=s;var l=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break;case"img":l.src&&(n.src=l.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var u=t.alternate;if(u!==null){var f=u.memoizedState;if(f!==null){var c=f.dehydrated;c!==null&&Ol(c)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(U(163))}_t||t.flags&512&&Uh(t)}catch(p){qe(t,t.return,p)}}if(t===e){Y=null;break}if(n=t.sibling,n!==null){n.return=t.return,Y=n;break}Y=t.return}}function mx(e){for(;Y!==null;){var t=Y;if(t===e){Y=null;break}var n=t.sibling;if(n!==null){n.return=t.return,Y=n;break}Y=t.return}}function hx(e){for(;Y!==null;){var t=Y;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{Mp(4,t)}catch(l){qe(t,n,l)}break;case 1:var r=t.stateNode;if(typeof r.componentDidMount=="function"){var a=t.return;try{r.componentDidMount()}catch(l){qe(t,a,l)}}var o=t.return;try{Uh(t)}catch(l){qe(t,o,l)}break;case 5:var i=t.return;try{Uh(t)}catch(l){qe(t,i,l)}}}catch(l){qe(t,t.return,l)}if(t===e){Y=null;break}var s=t.sibling;if(s!==null){s.return=t.return,Y=s;break}Y=t.return}}var z_=Math.ceil,cf=Gr.ReactCurrentDispatcher,O0=Gr.ReactCurrentOwner,yn=Gr.ReactCurrentBatchConfig,de=0,pt=null,et=null,gt=0,Yt=0,ti=ja(0),ot=0,Rl=null,go=0,Rp=0,k0=0,cl=null,zt=null,_0=0,Ni=1/0,Pr=null,ff=!1,Vh=null,ba=null,rc=!1,pa=null,pf=0,fl=0,Kh=null,Rc=-1,Ic=0;function Dt(){return de&6?Ke():Rc!==-1?Rc:Rc=Ke()}function Pa(e){return e.mode&1?de&2&&gt!==0?gt&-gt:S_.transition!==null?(Ic===0&&(Ic=B5()),Ic):(e=ke,e!==0||(e=window.event,e=e===void 0?16:K5(e.type)),e):1}function Gn(e,t,n,r){if(50<fl)throw fl=0,Kh=null,Error(U(185));_u(e,n,r),(!(de&2)||e!==pt)&&(e===pt&&(!(de&2)&&(Rp|=n),ot===4&&aa(e,gt)),Wt(e,r),n===1&&de===0&&!(t.mode&1)&&(Ni=Ke()+500,jp&&$a()))}function Wt(e,t){var n=e.callbackNode;Sk(e,t);var r=Kc(e,e===pt?gt:0);if(r===0)n!==null&&O1(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(n!=null&&O1(n),t===1)e.tag===0?P_(vx.bind(null,e)):d9(vx.bind(null,e)),g_(function(){!(de&6)&&$a()}),n=null;else{switch(H5(r)){case 1:n=Zy;break;case 4:n=F5;break;case 16:n=Vc;break;case 536870912:n=z5;break;default:n=Vc}n=f6(n,a6.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function a6(e,t){if(Rc=-1,Ic=0,de&6)throw Error(U(327));var n=e.callbackNode;if(ci()&&e.callbackNode!==n)return null;var r=Kc(e,e===pt?gt:0);if(r===0)return null;if(r&30||r&e.expiredLanes||t)t=df(e,r);else{t=r;var a=de;de|=2;var o=i6();(pt!==e||gt!==t)&&(Pr=null,Ni=Ke()+500,uo(e,t));do try{G_();break}catch(s){o6(e,s)}while(!0);f0(),cf.current=o,de=a,et!==null?t=0:(pt=null,gt=0,t=ot)}if(t!==0){if(t===2&&(a=bh(e),a!==0&&(r=a,t=Xh(e,a))),t===1)throw n=Rl,uo(e,0),aa(e,r),Wt(e,Ke()),n;if(t===6)aa(e,r);else{if(a=e.current.alternate,!(r&30)&&!B_(a)&&(t=df(e,r),t===2&&(o=bh(e),o!==0&&(r=o,t=Xh(e,o))),t===1))throw n=Rl,uo(e,0),aa(e,r),Wt(e,Ke()),n;switch(e.finishedWork=a,e.finishedLanes=r,t){case 0:case 1:throw Error(U(345));case 2:Wa(e,zt,Pr);break;case 3:if(aa(e,r),(r&130023424)===r&&(t=_0+500-Ke(),10<t)){if(Kc(e,0)!==0)break;if(a=e.suspendedLanes,(a&r)!==r){Dt(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Eh(Wa.bind(null,e,zt,Pr),t);break}Wa(e,zt,Pr);break;case 4:if(aa(e,r),(r&4194240)===r)break;for(t=e.eventTimes,a=-1;0<r;){var i=31-Hn(r);o=1<<i,i=t[i],i>a&&(a=i),r&=~o}if(r=a,r=Ke()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*z_(r/1960))-r,10<r){e.timeoutHandle=Eh(Wa.bind(null,e,zt,Pr),r);break}Wa(e,zt,Pr);break;case 5:Wa(e,zt,Pr);break;default:throw Error(U(329))}}}return Wt(e,Ke()),e.callbackNode===n?a6.bind(null,e):null}function Xh(e,t){var n=cl;return e.current.memoizedState.isDehydrated&&(uo(e,t).flags|=256),e=df(e,t),e!==2&&(t=zt,zt=n,t!==null&&Yh(t)),e}function Yh(e){zt===null?zt=e:zt.push.apply(zt,e)}function B_(e){for(var t=e;;){if(t.flags&16384){var n=t.updateQueue;if(n!==null&&(n=n.stores,n!==null))for(var r=0;r<n.length;r++){var a=n[r],o=a.getSnapshot;a=a.value;try{if(!Un(o(),a))return!1}catch{return!1}}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function aa(e,t){for(t&=~k0,t&=~Rp,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Hn(t),r=1<<n;e[n]=-1,t&=~r}}function vx(e){if(de&6)throw Error(U(327));ci();var t=Kc(e,0);if(!(t&1))return Wt(e,Ke()),null;var n=df(e,t);if(e.tag!==0&&n===2){var r=bh(e);r!==0&&(t=r,n=Xh(e,r))}if(n===1)throw n=Rl,uo(e,0),aa(e,t),Wt(e,Ke()),n;if(n===6)throw Error(U(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Wa(e,zt,Pr),Wt(e,Ke()),null}function A0(e,t){var n=de;de|=1;try{return e(t)}finally{de=n,de===0&&(Ni=Ke()+500,jp&&$a())}}function xo(e){pa!==null&&pa.tag===0&&!(de&6)&&ci();var t=de;de|=1;var n=yn.transition,r=ke;try{if(yn.transition=null,ke=1,e)return e()}finally{ke=r,yn.transition=n,de=t,!(de&6)&&$a()}}function C0(){Yt=ti.current,Fe(ti)}function uo(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(n!==-1&&(e.timeoutHandle=-1,y_(n)),et!==null)for(n=et.return;n!==null;){var r=n;switch(l0(r),r.tag){case 1:r=r.type.childContextTypes,r!=null&&Jc();break;case 3:ji(),Fe(Gt),Fe(Tt),y0();break;case 5:v0(r);break;case 4:ji();break;case 13:Fe(He);break;case 19:Fe(He);break;case 10:p0(r.type._context);break;case 22:case 23:C0()}n=n.return}if(pt=e,et=e=Sa(e.current,null),gt=Yt=t,ot=0,Rl=null,k0=Rp=go=0,zt=cl=null,Ya!==null){for(t=0;t<Ya.length;t++)if(n=Ya[t],r=n.interleaved,r!==null){n.interleaved=null;var a=r.next,o=n.pending;if(o!==null){var i=o.next;o.next=a,r.next=i}n.pending=r}Ya=null}return e}function o6(e,t){do{var n=et;try{if(f0(),$c.current=uf,lf){for(var r=Ge.memoizedState;r!==null;){var a=r.queue;a!==null&&(a.pending=null),r=r.next}lf=!1}if(yo=0,ct=at=Ge=null,ll=!1,$l=0,O0.current=null,n===null||n.return===null){ot=1,Rl=t,et=null;break}e:{var o=e,i=n.return,s=n,l=t;if(t=gt,s.flags|=32768,l!==null&&typeof l=="object"&&typeof l.then=="function"){var u=l,f=s,c=f.tag;if(!(f.mode&1)&&(c===0||c===11||c===15)){var p=f.alternate;p?(f.updateQueue=p.updateQueue,f.memoizedState=p.memoizedState,f.lanes=p.lanes):(f.updateQueue=null,f.memoizedState=null)}var d=rx(i);if(d!==null){d.flags&=-257,ax(d,i,s,o,t),d.mode&1&&nx(o,u,t),t=d,l=u;var h=t.updateQueue;if(h===null){var m=new Set;m.add(l),t.updateQueue=m}else h.add(l);break e}else{if(!(t&1)){nx(o,u,t),E0();break e}l=Error(U(426))}}else if(ze&&s.mode&1){var g=rx(i);if(g!==null){!(g.flags&65536)&&(g.flags|=256),ax(g,i,s,o,t),u0($i(l,s));break e}}o=l=$i(l,s),ot!==4&&(ot=2),cl===null?cl=[o]:cl.push(o),o=i;do{switch(o.tag){case 3:o.flags|=65536,t&=-t,o.lanes|=t;var v=H9(o,l,t);Y1(o,v);break e;case 1:s=l;var y=o.type,x=o.stateNode;if(!(o.flags&128)&&(typeof y.getDerivedStateFromError=="function"||x!==null&&typeof x.componentDidCatch=="function"&&(ba===null||!ba.has(x)))){o.flags|=65536,t&=-t,o.lanes|=t;var P=G9(o,s,t);Y1(o,P);break e}}o=o.return}while(o!==null)}l6(n)}catch(w){t=w,et===n&&n!==null&&(et=n=n.return);continue}break}while(!0)}function i6(){var e=cf.current;return cf.current=uf,e===null?uf:e}function E0(){(ot===0||ot===3||ot===2)&&(ot=4),pt===null||!(go&268435455)&&!(Rp&268435455)||aa(pt,gt)}function df(e,t){var n=de;de|=2;var r=i6();(pt!==e||gt!==t)&&(Pr=null,uo(e,t));do try{H_();break}catch(a){o6(e,a)}while(!0);if(f0(),de=n,cf.current=r,et!==null)throw Error(U(261));return pt=null,gt=0,ot}function H_(){for(;et!==null;)s6(et)}function G_(){for(;et!==null&&!mk();)s6(et)}function s6(e){var t=c6(e.alternate,e,Yt);e.memoizedProps=e.pendingProps,t===null?l6(e):et=t,O0.current=null}function l6(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&32768){if(n=I_(n,t),n!==null){n.flags&=32767,et=n;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{ot=6,et=null;return}}else if(n=R_(n,t,Yt),n!==null){et=n;return}if(t=t.sibling,t!==null){et=t;return}et=t=e}while(t!==null);ot===0&&(ot=5)}function Wa(e,t,n){var r=ke,a=yn.transition;try{yn.transition=null,ke=1,U_(e,t,n,r)}finally{yn.transition=a,ke=r}return null}function U_(e,t,n,r){do ci();while(pa!==null);if(de&6)throw Error(U(327));n=e.finishedWork;var a=e.finishedLanes;if(n===null)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(U(177));e.callbackNode=null,e.callbackPriority=0;var o=n.lanes|n.childLanes;if(Ok(e,o),e===pt&&(et=pt=null,gt=0),!(n.subtreeFlags&2064)&&!(n.flags&2064)||rc||(rc=!0,f6(Vc,function(){return ci(),null})),o=(n.flags&15990)!==0,n.subtreeFlags&15990||o){o=yn.transition,yn.transition=null;var i=ke;ke=1;var s=de;de|=4,O0.current=null,L_(e,n),n6(n,e),c_(Ah),Xc=!!_h,Ah=_h=null,e.current=n,F_(n),hk(),de=s,ke=i,yn.transition=o}else e.current=n;if(rc&&(rc=!1,pa=e,pf=a),o=e.pendingLanes,o===0&&(ba=null),gk(n.stateNode),Wt(e,Ke()),t!==null)for(r=e.onRecoverableError,n=0;n<t.length;n++)a=t[n],r(a.value,{componentStack:a.stack,digest:a.digest});if(ff)throw ff=!1,e=Vh,Vh=null,e;return pf&1&&e.tag!==0&&ci(),o=e.pendingLanes,o&1?e===Kh?fl++:(fl=0,Kh=e):fl=0,$a(),null}function ci(){if(pa!==null){var e=H5(pf),t=yn.transition,n=ke;try{if(yn.transition=null,ke=16>e?16:e,pa===null)var r=!1;else{if(e=pa,pa=null,pf=0,de&6)throw Error(U(331));var a=de;for(de|=4,Y=e.current;Y!==null;){var o=Y,i=o.child;if(Y.flags&16){var s=o.deletions;if(s!==null){for(var l=0;l<s.length;l++){var u=s[l];for(Y=u;Y!==null;){var f=Y;switch(f.tag){case 0:case 11:case 15:ul(8,f,o)}var c=f.child;if(c!==null)c.return=f,Y=c;else for(;Y!==null;){f=Y;var p=f.sibling,d=f.return;if(J9(f),f===u){Y=null;break}if(p!==null){p.return=d,Y=p;break}Y=d}}}var h=o.alternate;if(h!==null){var m=h.child;if(m!==null){h.child=null;do{var g=m.sibling;m.sibling=null,m=g}while(m!==null)}}Y=o}}if(o.subtreeFlags&2064&&i!==null)i.return=o,Y=i;else e:for(;Y!==null;){if(o=Y,o.flags&2048)switch(o.tag){case 0:case 11:case 15:ul(9,o,o.return)}var v=o.sibling;if(v!==null){v.return=o.return,Y=v;break e}Y=o.return}}var y=e.current;for(Y=y;Y!==null;){i=Y;var x=i.child;if(i.subtreeFlags&2064&&x!==null)x.return=i,Y=x;else e:for(i=y;Y!==null;){if(s=Y,s.flags&2048)try{switch(s.tag){case 0:case 11:case 15:Mp(9,s)}}catch(w){qe(s,s.return,w)}if(s===i){Y=null;break e}var P=s.sibling;if(P!==null){P.return=s.return,Y=P;break e}Y=s.return}}if(de=a,$a(),ur&&typeof ur.onPostCommitFiberRoot=="function")try{ur.onPostCommitFiberRoot(_p,e)}catch{}r=!0}return r}finally{ke=n,yn.transition=t}}return!1}function yx(e,t,n){t=$i(n,t),t=H9(e,t,1),e=wa(e,t,1),t=Dt(),e!==null&&(_u(e,1,t),Wt(e,t))}function qe(e,t,n){if(e.tag===3)yx(e,e,n);else for(;t!==null;){if(t.tag===3){yx(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof r.componentDidCatch=="function"&&(ba===null||!ba.has(r))){e=$i(n,e),e=G9(t,e,1),t=wa(t,e,1),e=Dt(),t!==null&&(_u(t,1,e),Wt(t,e));break}}t=t.return}}function W_(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),t=Dt(),e.pingedLanes|=e.suspendedLanes&n,pt===e&&(gt&n)===n&&(ot===4||ot===3&&(gt&130023424)===gt&&500>Ke()-_0?uo(e,0):k0|=n),Wt(e,t)}function u6(e,t){t===0&&(e.mode&1?(t=Vu,Vu<<=1,!(Vu&130023424)&&(Vu=4194304)):t=1);var n=Dt();e=Ir(e,t),e!==null&&(_u(e,t,n),Wt(e,n))}function q_(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),u6(e,n)}function V_(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(U(314))}r!==null&&r.delete(t),u6(e,n)}var c6;c6=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Gt.current)Bt=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Bt=!1,M_(e,t,n);Bt=!!(e.flags&131072)}else Bt=!1,ze&&t.flags&1048576&&m9(t,nf,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Mc(e,t),e=t.pendingProps;var a=Ci(t,Tt.current);ui(t,n),a=x0(null,t,r,e,a,n);var o=w0();return t.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ut(r)?(o=!0,ef(t)):o=!1,t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,m0(t),a.updater=Np,t.stateNode=a,a._reactInternals=t,Ih(t,r,e,n),t=Fh(null,t,r,!0,o,n)):(t.tag=0,ze&&o&&s0(t),Nt(null,t,a,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Mc(e,t),e=t.pendingProps,a=r._init,r=a(r._payload),t.type=r,a=t.tag=X_(r),e=Cn(r,e),a){case 0:t=Lh(null,t,r,e,n);break e;case 1:t=sx(null,t,r,e,n);break e;case 11:t=ox(null,t,r,e,n);break e;case 14:t=ix(null,t,r,Cn(r.type,e),n);break e}throw Error(U(306,r,""))}return t;case 0:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Cn(r,a),Lh(e,t,r,a,n);case 1:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Cn(r,a),sx(e,t,r,a,n);case 3:e:{if(V9(t),e===null)throw Error(U(387));r=t.pendingProps,o=t.memoizedState,a=o.element,w9(e,t),of(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){a=$i(Error(U(423)),t),t=lx(e,t,r,n,a);break e}else if(r!==a){a=$i(Error(U(424)),t),t=lx(e,t,r,n,a);break e}else for(en=xa(t.stateNode.containerInfo.firstChild),nn=t,ze=!0,Rn=null,n=g9(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Ei(),r===a){t=Dr(e,t,n);break e}Nt(e,t,r,n)}t=t.child}return t;case 5:return b9(t),e===null&&Nh(t),r=t.type,a=t.pendingProps,o=e!==null?e.memoizedProps:null,i=a.children,Ch(r,a)?i=null:o!==null&&Ch(r,o)&&(t.flags|=32),q9(e,t),Nt(e,t,i,n),t.child;case 6:return e===null&&Nh(t),null;case 13:return K9(e,t,n);case 4:return h0(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Ti(t,null,r,n):Nt(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Cn(r,a),ox(e,t,r,a,n);case 7:return Nt(e,t,t.pendingProps,n),t.child;case 8:return Nt(e,t,t.pendingProps.children,n),t.child;case 12:return Nt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,a=t.pendingProps,o=t.memoizedProps,i=a.value,$e(rf,r._currentValue),r._currentValue=i,o!==null)if(Un(o.value,i)){if(o.children===a.children&&!Gt.current){t=Dr(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var s=o.dependencies;if(s!==null){i=o.child;for(var l=s.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=Tr(-1,n&-n),l.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var f=u.pending;f===null?l.next=l:(l.next=f.next,f.next=l),u.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),Mh(o.return,n,t),s.lanes|=n;break}l=l.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(U(341));i.lanes|=n,s=i.alternate,s!==null&&(s.lanes|=n),Mh(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}Nt(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,ui(t,n),a=xn(a),r=r(a),t.flags|=1,Nt(e,t,r,n),t.child;case 14:return r=t.type,a=Cn(r,t.pendingProps),a=Cn(r.type,a),ix(e,t,r,a,n);case 15:return U9(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Cn(r,a),Mc(e,t),t.tag=1,Ut(r)?(e=!0,ef(t)):e=!1,ui(t,n),B9(t,r,a),Ih(t,r,a,n),Fh(null,t,r,!0,e,n);case 19:return X9(e,t,n);case 22:return W9(e,t,n)}throw Error(U(156,t.tag))};function f6(e,t){return L5(e,t)}function K_(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function hn(e,t,n,r){return new K_(e,t,n,r)}function T0(e){return e=e.prototype,!(!e||!e.isReactComponent)}function X_(e){if(typeof e=="function")return T0(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Xy)return 11;if(e===Yy)return 14}return 2}function Sa(e,t){var n=e.alternate;return n===null?(n=hn(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Dc(e,t,n,r,a,o){var i=2;if(r=e,typeof e=="function")T0(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Wo:return co(n.children,a,o,t);case Ky:i=8,a|=8;break;case ih:return e=hn(12,n,t,a|2),e.elementType=ih,e.lanes=o,e;case sh:return e=hn(13,n,t,a),e.elementType=sh,e.lanes=o,e;case lh:return e=hn(19,n,t,a),e.elementType=lh,e.lanes=o,e;case b5:return Ip(n,a,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case x5:i=10;break e;case w5:i=9;break e;case Xy:i=11;break e;case Yy:i=14;break e;case ea:i=16,r=null;break e}throw Error(U(130,e==null?e:typeof e,""))}return t=hn(i,n,t,a),t.elementType=e,t.type=r,t.lanes=o,t}function co(e,t,n,r){return e=hn(7,e,r,t),e.lanes=n,e}function Ip(e,t,n,r){return e=hn(22,e,r,t),e.elementType=b5,e.lanes=n,e.stateNode={isHidden:!1},e}function ym(e,t,n){return e=hn(6,e,null,t),e.lanes=n,e}function gm(e,t,n){return t=hn(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Y_(e,t,n,r,a){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Zd(0),this.expirationTimes=Zd(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Zd(0),this.identifierPrefix=r,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function j0(e,t,n,r,a,o,i,s,l){return e=new Y_(e,t,n,s,l),t===1?(t=1,o===!0&&(t|=8)):t=0,o=hn(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},m0(o),e}function Q_(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:Uo,key:r==null?null:""+r,children:e,containerInfo:t,implementation:n}}function p6(e){if(!e)return _a;e=e._reactInternals;e:{if(To(e)!==e||e.tag!==1)throw Error(U(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Ut(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(U(171))}if(e.tag===1){var n=e.type;if(Ut(n))return p9(e,n,t)}return t}function d6(e,t,n,r,a,o,i,s,l){return e=j0(n,r,!0,e,a,o,i,s,l),e.context=p6(null),n=e.current,r=Dt(),a=Pa(n),o=Tr(r,a),o.callback=t??null,wa(n,o,a),e.current.lanes=a,_u(e,a,r),Wt(e,r),e}function Dp(e,t,n,r){var a=t.current,o=Dt(),i=Pa(a);return n=p6(n),t.context===null?t.context=n:t.pendingContext=n,t=Tr(o,i),t.payload={element:e},r=r===void 0?null:r,r!==null&&(t.callback=r),e=wa(a,t,i),e!==null&&(Gn(e,a,i,o),jc(e,a,i)),i}function mf(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function gx(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function $0(e,t){gx(e,t),(e=e.alternate)&&gx(e,t)}function Z_(){return null}var m6=typeof reportError=="function"?reportError:function(e){console.error(e)};function N0(e){this._internalRoot=e}Lp.prototype.render=N0.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(U(409));Dp(e,t,null,null)};Lp.prototype.unmount=N0.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;xo(function(){Dp(null,e,null,null)}),t[Rr]=null}};function Lp(e){this._internalRoot=e}Lp.prototype.unstable_scheduleHydration=function(e){if(e){var t=W5();e={blockedOn:null,target:e,priority:t};for(var n=0;n<ra.length&&t!==0&&t<ra[n].priority;n++);ra.splice(n,0,e),n===0&&V5(e)}};function M0(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function Fp(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function xx(){}function J_(e,t,n,r,a){if(a){if(typeof r=="function"){var o=r;r=function(){var u=mf(i);o.call(u)}}var i=d6(t,r,e,0,null,!1,!1,"",xx);return e._reactRootContainer=i,e[Rr]=i.current,Al(e.nodeType===8?e.parentNode:e),xo(),i}for(;a=e.lastChild;)e.removeChild(a);if(typeof r=="function"){var s=r;r=function(){var u=mf(l);s.call(u)}}var l=j0(e,0,!1,null,null,!1,!1,"",xx);return e._reactRootContainer=l,e[Rr]=l.current,Al(e.nodeType===8?e.parentNode:e),xo(function(){Dp(t,l,n,r)}),l}function zp(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o;if(typeof a=="function"){var s=a;a=function(){var l=mf(i);s.call(l)}}Dp(t,i,e,a)}else i=J_(n,t,e,a,r);return mf(i)}G5=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=Js(t.pendingLanes);n!==0&&(Jy(t,n|1),Wt(t,Ke()),!(de&6)&&(Ni=Ke()+500,$a()))}break;case 13:xo(function(){var r=Ir(e,1);if(r!==null){var a=Dt();Gn(r,e,1,a)}}),$0(e,1)}};e0=function(e){if(e.tag===13){var t=Ir(e,134217728);if(t!==null){var n=Dt();Gn(t,e,134217728,n)}$0(e,134217728)}};U5=function(e){if(e.tag===13){var t=Pa(e),n=Ir(e,t);if(n!==null){var r=Dt();Gn(n,e,t,r)}$0(e,t)}};W5=function(){return ke};q5=function(e,t){var n=ke;try{return ke=e,t()}finally{ke=n}};gh=function(e,t,n){switch(t){case"input":if(fh(e,n),t=n.name,n.type==="radio"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=Tp(r);if(!a)throw Error(U(90));S5(r),fh(r,a)}}}break;case"textarea":k5(e,n);break;case"select":t=n.value,t!=null&&oi(e,!!n.multiple,t,!1)}};$5=A0;N5=xo;var eA={usingClientEntryPoint:!1,Events:[Cu,Xo,Tp,T5,j5,A0]},Ls={findFiberByHostInstance:Xa,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},tA={bundleType:Ls.bundleType,version:Ls.version,rendererPackageName:Ls.rendererPackageName,rendererConfig:Ls.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Gr.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=I5(e),e===null?null:e.stateNode},findFiberByHostInstance:Ls.findFiberByHostInstance||Z_,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var ac=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ac.isDisabled&&ac.supportsFiber)try{_p=ac.inject(tA),ur=ac}catch{}}on.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=eA;on.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!M0(t))throw Error(U(200));return Q_(e,t,null,n)};on.createRoot=function(e,t){if(!M0(e))throw Error(U(299));var n=!1,r="",a=m6;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(r=t.identifierPrefix),t.onRecoverableError!==void 0&&(a=t.onRecoverableError)),t=j0(e,1,!1,null,null,n,!1,r,a),e[Rr]=t.current,Al(e.nodeType===8?e.parentNode:e),new N0(t)};on.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(U(188)):(e=Object.keys(e).join(","),Error(U(268,e)));return e=I5(t),e=e===null?null:e.stateNode,e};on.flushSync=function(e){return xo(e)};on.hydrate=function(e,t,n){if(!Fp(t))throw Error(U(200));return zp(null,e,t,!0,n)};on.hydrateRoot=function(e,t,n){if(!M0(e))throw Error(U(405));var r=n!=null&&n.hydratedSources||null,a=!1,o="",i=m6;if(n!=null&&(n.unstable_strictMode===!0&&(a=!0),n.identifierPrefix!==void 0&&(o=n.identifierPrefix),n.onRecoverableError!==void 0&&(i=n.onRecoverableError)),t=d6(t,null,e,1,n??null,a,!1,o,i),e[Rr]=t.current,Al(e),r)for(e=0;e<r.length;e++)n=r[e],a=n._getVersion,a=a(n._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[n,a]:t.mutableSourceEagerHydrationData.push(n,a);return new Lp(t)};on.render=function(e,t,n){if(!Fp(t))throw Error(U(200));return zp(null,e,t,!1,n)};on.unmountComponentAtNode=function(e){if(!Fp(e))throw Error(U(40));return e._reactRootContainer?(xo(function(){zp(null,null,e,!1,function(){e._reactRootContainer=null,e[Rr]=null})}),!0):!1};on.unstable_batchedUpdates=A0;on.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Fp(n))throw Error(U(200));if(e==null||e._reactInternals===void 0)throw Error(U(38));return zp(e,t,n,!1,r)};on.version="18.3.1-next-f1338f8080-20240426";function h6(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(h6)}catch(e){console.error(e)}}h6(),h5.exports=on;var fs=h5.exports;const nA=Ce(fs);var wx=fs;Gc.createRoot=wx.createRoot,Gc.hydrateRoot=wx.hydrateRoot;function bx(e,[t,n]){return Math.min(n,Math.max(t,e))}function pe(e,t,{checkForDefaultPrevented:n=!0}={}){return function(a){if(e==null||e(a),n===!1||!a.defaultPrevented)return t==null?void 0:t(a)}}function ps(e,t=[]){let n=[];function r(o,i){const s=k.createContext(i),l=n.length;n=[...n,i];const u=c=>{var v;const{scope:p,children:d,...h}=c,m=((v=p==null?void 0:p[e])==null?void 0:v[l])||s,g=k.useMemo(()=>h,Object.values(h));return b.jsx(m.Provider,{value:g,children:d})};u.displayName=o+"Provider";function f(c,p){var m;const d=((m=p==null?void 0:p[e])==null?void 0:m[l])||s,h=k.useContext(d);if(h)return h;if(i!==void 0)return i;throw new Error(`\`${c}\` must be used within \`${o}\``)}return[u,f]}const a=()=>{const o=n.map(i=>k.createContext(i));return function(s){const l=(s==null?void 0:s[e])||o;return k.useMemo(()=>({[`__scope${e}`]:{...s,[e]:l}}),[s,l])}};return a.scopeName=e,[r,rA(a,...t)]}function rA(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(a=>({useScope:a(),scopeName:a.scopeName}));return function(o){const i=r.reduce((s,{useScope:l,scopeName:u})=>{const c=l(o)[`__scope${u}`];return{...s,...c}},{});return k.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return n.scopeName=t.scopeName,n}function Px(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function v6(...e){return t=>{let n=!1;const r=e.map(a=>{const o=Px(a,t);return!n&&typeof o=="function"&&(n=!0),o});if(n)return()=>{for(let a=0;a<r.length;a++){const o=r[a];typeof o=="function"?o():Px(e[a],null)}}}}function Ye(...e){return k.useCallback(v6(...e),e)}function Il(e){const t=oA(e),n=k.forwardRef((r,a)=>{const{children:o,...i}=r,s=k.Children.toArray(o),l=s.find(sA);if(l){const u=l.props.children,f=s.map(c=>c===l?k.Children.count(u)>1?k.Children.only(null):k.isValidElement(u)?u.props.children:null:c);return b.jsx(t,{...i,ref:a,children:k.isValidElement(u)?k.cloneElement(u,void 0,f):null})}return b.jsx(t,{...i,ref:a,children:o})});return n.displayName=`${e}.Slot`,n}var aA=Il("Slot");function oA(e){const t=k.forwardRef((n,r)=>{const{children:a,...o}=n;if(k.isValidElement(a)){const i=uA(a),s=lA(o,a.props);return a.type!==k.Fragment&&(s.ref=r?v6(r,i):i),k.cloneElement(a,s)}return k.Children.count(a)>1?k.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var y6=Symbol("radix.slottable");function iA(e){const t=({children:n})=>b.jsx(b.Fragment,{children:n});return t.displayName=`${e}.Slottable`,t.__radixId=y6,t}function sA(e){return k.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===y6}function lA(e,t){const n={...t};for(const r in t){const a=e[r],o=t[r];/^on[A-Z]/.test(r)?a&&o?n[r]=(...s)=>{const l=o(...s);return a(...s),l}:a&&(n[r]=a):r==="style"?n[r]={...a,...o}:r==="className"&&(n[r]=[a,o].filter(Boolean).join(" "))}return{...e,...n}}function uA(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function g6(e){const t=e+"CollectionProvider",[n,r]=ps(t),[a,o]=n(t,{collectionRef:{current:null},itemMap:new Map}),i=m=>{const{scope:g,children:v}=m,y=C.useRef(null),x=C.useRef(new Map).current;return b.jsx(a,{scope:g,itemMap:x,collectionRef:y,children:v})};i.displayName=t;const s=e+"CollectionSlot",l=Il(s),u=C.forwardRef((m,g)=>{const{scope:v,children:y}=m,x=o(s,v),P=Ye(g,x.collectionRef);return b.jsx(l,{ref:P,children:y})});u.displayName=s;const f=e+"CollectionItemSlot",c="data-radix-collection-item",p=Il(f),d=C.forwardRef((m,g)=>{const{scope:v,children:y,...x}=m,P=C.useRef(null),w=Ye(g,P),S=o(f,v);return C.useEffect(()=>(S.itemMap.set(P,{ref:P,...x}),()=>void S.itemMap.delete(P))),b.jsx(p,{[c]:"",ref:w,children:y})});d.displayName=f;function h(m){const g=o(e+"CollectionConsumer",m);return C.useCallback(()=>{const y=g.collectionRef.current;if(!y)return[];const x=Array.from(y.querySelectorAll(`[${c}]`));return Array.from(g.itemMap.values()).sort((S,O)=>x.indexOf(S.ref.current)-x.indexOf(O.ref.current))},[g.collectionRef,g.itemMap])}return[{Provider:i,Slot:u,ItemSlot:d},h,r]}var cA=k.createContext(void 0);function R0(e){const t=k.useContext(cA);return e||t||"ltr"}var fA=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Ee=fA.reduce((e,t)=>{const n=Il(`Primitive.${t}`),r=k.forwardRef((a,o)=>{const{asChild:i,...s}=a,l=i?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),b.jsx(l,{...s,ref:o})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function pA(e,t){e&&fs.flushSync(()=>e.dispatchEvent(t))}function Aa(e){const t=k.useRef(e);return k.useEffect(()=>{t.current=e}),k.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function dA(e,t=globalThis==null?void 0:globalThis.document){const n=Aa(e);k.useEffect(()=>{const r=a=>{a.key==="Escape"&&n(a)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var mA="DismissableLayer",Qh="dismissableLayer.update",hA="dismissableLayer.pointerDownOutside",vA="dismissableLayer.focusOutside",Sx,x6=k.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),I0=k.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:a,onFocusOutside:o,onInteractOutside:i,onDismiss:s,...l}=e,u=k.useContext(x6),[f,c]=k.useState(null),p=(f==null?void 0:f.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,d]=k.useState({}),h=Ye(t,O=>c(O)),m=Array.from(u.layers),[g]=[...u.layersWithOutsidePointerEventsDisabled].slice(-1),v=m.indexOf(g),y=f?m.indexOf(f):-1,x=u.layersWithOutsidePointerEventsDisabled.size>0,P=y>=v,w=xA(O=>{const _=O.target,A=[...u.branches].some(j=>j.contains(_));!P||A||(a==null||a(O),i==null||i(O),O.defaultPrevented||s==null||s())},p),S=wA(O=>{const _=O.target;[...u.branches].some(j=>j.contains(_))||(o==null||o(O),i==null||i(O),O.defaultPrevented||s==null||s())},p);return dA(O=>{y===u.layers.size-1&&(r==null||r(O),!O.defaultPrevented&&s&&(O.preventDefault(),s()))},p),k.useEffect(()=>{if(f)return n&&(u.layersWithOutsidePointerEventsDisabled.size===0&&(Sx=p.body.style.pointerEvents,p.body.style.pointerEvents="none"),u.layersWithOutsidePointerEventsDisabled.add(f)),u.layers.add(f),Ox(),()=>{n&&u.layersWithOutsidePointerEventsDisabled.size===1&&(p.body.style.pointerEvents=Sx)}},[f,p,n,u]),k.useEffect(()=>()=>{f&&(u.layers.delete(f),u.layersWithOutsidePointerEventsDisabled.delete(f),Ox())},[f,u]),k.useEffect(()=>{const O=()=>d({});return document.addEventListener(Qh,O),()=>document.removeEventListener(Qh,O)},[]),b.jsx(Ee.div,{...l,ref:h,style:{pointerEvents:x?P?"auto":"none":void 0,...e.style},onFocusCapture:pe(e.onFocusCapture,S.onFocusCapture),onBlurCapture:pe(e.onBlurCapture,S.onBlurCapture),onPointerDownCapture:pe(e.onPointerDownCapture,w.onPointerDownCapture)})});I0.displayName=mA;var yA="DismissableLayerBranch",gA=k.forwardRef((e,t)=>{const n=k.useContext(x6),r=k.useRef(null),a=Ye(t,r);return k.useEffect(()=>{const o=r.current;if(o)return n.branches.add(o),()=>{n.branches.delete(o)}},[n.branches]),b.jsx(Ee.div,{...e,ref:a})});gA.displayName=yA;function xA(e,t=globalThis==null?void 0:globalThis.document){const n=Aa(e),r=k.useRef(!1),a=k.useRef(()=>{});return k.useEffect(()=>{const o=s=>{if(s.target&&!r.current){let l=function(){w6(hA,n,u,{discrete:!0})};const u={originalEvent:s};s.pointerType==="touch"?(t.removeEventListener("click",a.current),a.current=l,t.addEventListener("click",a.current,{once:!0})):l()}else t.removeEventListener("click",a.current);r.current=!1},i=window.setTimeout(()=>{t.addEventListener("pointerdown",o)},0);return()=>{window.clearTimeout(i),t.removeEventListener("pointerdown",o),t.removeEventListener("click",a.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function wA(e,t=globalThis==null?void 0:globalThis.document){const n=Aa(e),r=k.useRef(!1);return k.useEffect(()=>{const a=o=>{o.target&&!r.current&&w6(vA,n,{originalEvent:o},{discrete:!1})};return t.addEventListener("focusin",a),()=>t.removeEventListener("focusin",a)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Ox(){const e=new CustomEvent(Qh);document.dispatchEvent(e)}function w6(e,t,n,{discrete:r}){const a=n.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&a.addEventListener(e,t,{once:!0}),r?pA(a,o):a.dispatchEvent(o)}var xm=0;function bA(){k.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??kx()),document.body.insertAdjacentElement("beforeend",e[1]??kx()),xm++,()=>{xm===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),xm--}},[])}function kx(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var wm="focusScope.autoFocusOnMount",bm="focusScope.autoFocusOnUnmount",_x={bubbles:!1,cancelable:!0},PA="FocusScope",b6=k.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:a,onUnmountAutoFocus:o,...i}=e,[s,l]=k.useState(null),u=Aa(a),f=Aa(o),c=k.useRef(null),p=Ye(t,m=>l(m)),d=k.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;k.useEffect(()=>{if(r){let m=function(x){if(d.paused||!s)return;const P=x.target;s.contains(P)?c.current=P:Qr(c.current,{select:!0})},g=function(x){if(d.paused||!s)return;const P=x.relatedTarget;P!==null&&(s.contains(P)||Qr(c.current,{select:!0}))},v=function(x){if(document.activeElement===document.body)for(const w of x)w.removedNodes.length>0&&Qr(s)};document.addEventListener("focusin",m),document.addEventListener("focusout",g);const y=new MutationObserver(v);return s&&y.observe(s,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",g),y.disconnect()}}},[r,s,d.paused]),k.useEffect(()=>{if(s){Cx.add(d);const m=document.activeElement;if(!s.contains(m)){const v=new CustomEvent(wm,_x);s.addEventListener(wm,u),s.dispatchEvent(v),v.defaultPrevented||(SA(CA(P6(s)),{select:!0}),document.activeElement===m&&Qr(s))}return()=>{s.removeEventListener(wm,u),setTimeout(()=>{const v=new CustomEvent(bm,_x);s.addEventListener(bm,f),s.dispatchEvent(v),v.defaultPrevented||Qr(m??document.body,{select:!0}),s.removeEventListener(bm,f),Cx.remove(d)},0)}}},[s,u,f,d]);const h=k.useCallback(m=>{if(!n&&!r||d.paused)return;const g=m.key==="Tab"&&!m.altKey&&!m.ctrlKey&&!m.metaKey,v=document.activeElement;if(g&&v){const y=m.currentTarget,[x,P]=OA(y);x&&P?!m.shiftKey&&v===P?(m.preventDefault(),n&&Qr(x,{select:!0})):m.shiftKey&&v===x&&(m.preventDefault(),n&&Qr(P,{select:!0})):v===y&&m.preventDefault()}},[n,r,d.paused]);return b.jsx(Ee.div,{tabIndex:-1,...i,ref:p,onKeyDown:h})});b6.displayName=PA;function SA(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(Qr(r,{select:t}),document.activeElement!==n)return}function OA(e){const t=P6(e),n=Ax(t,e),r=Ax(t.reverse(),e);return[n,r]}function P6(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const a=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||a?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Ax(e,t){for(const n of e)if(!kA(n,{upTo:t}))return n}function kA(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function _A(e){return e instanceof HTMLInputElement&&"select"in e}function Qr(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&_A(e)&&t&&e.select()}}var Cx=AA();function AA(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=Ex(e,t),e.unshift(t)},remove(t){var n;e=Ex(e,t),(n=e[0])==null||n.resume()}}}function Ex(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function CA(e){return e.filter(t=>t.tagName!=="A")}var jt=globalThis!=null&&globalThis.document?k.useLayoutEffect:()=>{},EA=d5[" useId ".trim().toString()]||(()=>{}),TA=0;function Tu(e){const[t,n]=k.useState(EA());return jt(()=>{n(r=>r??String(TA++))},[e]),t?`radix-${t}`:""}const jA=["top","right","bottom","left"],Ca=Math.min,Zt=Math.max,hf=Math.round,oc=Math.floor,fr=e=>({x:e,y:e}),$A={left:"right",right:"left",bottom:"top",top:"bottom"},NA={start:"end",end:"start"};function Zh(e,t,n){return Zt(e,Ca(t,n))}function Lr(e,t){return typeof e=="function"?e(t):e}function Fr(e){return e.split("-")[0]}function ds(e){return e.split("-")[1]}function D0(e){return e==="x"?"y":"x"}function L0(e){return e==="y"?"height":"width"}function ar(e){return["top","bottom"].includes(Fr(e))?"y":"x"}function F0(e){return D0(ar(e))}function MA(e,t,n){n===void 0&&(n=!1);const r=ds(e),a=F0(e),o=L0(a);let i=a==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[o]>t.floating[o]&&(i=vf(i)),[i,vf(i)]}function RA(e){const t=vf(e);return[Jh(e),t,Jh(t)]}function Jh(e){return e.replace(/start|end/g,t=>NA[t])}function IA(e,t,n){const r=["left","right"],a=["right","left"],o=["top","bottom"],i=["bottom","top"];switch(e){case"top":case"bottom":return n?t?a:r:t?r:a;case"left":case"right":return t?o:i;default:return[]}}function DA(e,t,n,r){const a=ds(e);let o=IA(Fr(e),n==="start",r);return a&&(o=o.map(i=>i+"-"+a),t&&(o=o.concat(o.map(Jh)))),o}function vf(e){return e.replace(/left|right|bottom|top/g,t=>$A[t])}function LA(e){return{top:0,right:0,bottom:0,left:0,...e}}function S6(e){return typeof e!="number"?LA(e):{top:e,right:e,bottom:e,left:e}}function yf(e){const{x:t,y:n,width:r,height:a}=e;return{width:r,height:a,top:n,left:t,right:t+r,bottom:n+a,x:t,y:n}}function Tx(e,t,n){let{reference:r,floating:a}=e;const o=ar(t),i=F0(t),s=L0(i),l=Fr(t),u=o==="y",f=r.x+r.width/2-a.width/2,c=r.y+r.height/2-a.height/2,p=r[s]/2-a[s]/2;let d;switch(l){case"top":d={x:f,y:r.y-a.height};break;case"bottom":d={x:f,y:r.y+r.height};break;case"right":d={x:r.x+r.width,y:c};break;case"left":d={x:r.x-a.width,y:c};break;default:d={x:r.x,y:r.y}}switch(ds(t)){case"start":d[i]-=p*(n&&u?-1:1);break;case"end":d[i]+=p*(n&&u?-1:1);break}return d}const FA=async(e,t,n)=>{const{placement:r="bottom",strategy:a="absolute",middleware:o=[],platform:i}=n,s=o.filter(Boolean),l=await(i.isRTL==null?void 0:i.isRTL(t));let u=await i.getElementRects({reference:e,floating:t,strategy:a}),{x:f,y:c}=Tx(u,r,l),p=r,d={},h=0;for(let m=0;m<s.length;m++){const{name:g,fn:v}=s[m],{x:y,y:x,data:P,reset:w}=await v({x:f,y:c,initialPlacement:r,placement:p,strategy:a,middlewareData:d,rects:u,platform:i,elements:{reference:e,floating:t}});f=y??f,c=x??c,d={...d,[g]:{...d[g],...P}},w&&h<=50&&(h++,typeof w=="object"&&(w.placement&&(p=w.placement),w.rects&&(u=w.rects===!0?await i.getElementRects({reference:e,floating:t,strategy:a}):w.rects),{x:f,y:c}=Tx(u,p,l)),m=-1)}return{x:f,y:c,placement:p,strategy:a,middlewareData:d}};async function Dl(e,t){var n;t===void 0&&(t={});const{x:r,y:a,platform:o,rects:i,elements:s,strategy:l}=e,{boundary:u="clippingAncestors",rootBoundary:f="viewport",elementContext:c="floating",altBoundary:p=!1,padding:d=0}=Lr(t,e),h=S6(d),g=s[p?c==="floating"?"reference":"floating":c],v=yf(await o.getClippingRect({element:(n=await(o.isElement==null?void 0:o.isElement(g)))==null||n?g:g.contextElement||await(o.getDocumentElement==null?void 0:o.getDocumentElement(s.floating)),boundary:u,rootBoundary:f,strategy:l})),y=c==="floating"?{x:r,y:a,width:i.floating.width,height:i.floating.height}:i.reference,x=await(o.getOffsetParent==null?void 0:o.getOffsetParent(s.floating)),P=await(o.isElement==null?void 0:o.isElement(x))?await(o.getScale==null?void 0:o.getScale(x))||{x:1,y:1}:{x:1,y:1},w=yf(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:y,offsetParent:x,strategy:l}):y);return{top:(v.top-w.top+h.top)/P.y,bottom:(w.bottom-v.bottom+h.bottom)/P.y,left:(v.left-w.left+h.left)/P.x,right:(w.right-v.right+h.right)/P.x}}const zA=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:a,rects:o,platform:i,elements:s,middlewareData:l}=t,{element:u,padding:f=0}=Lr(e,t)||{};if(u==null)return{};const c=S6(f),p={x:n,y:r},d=F0(a),h=L0(d),m=await i.getDimensions(u),g=d==="y",v=g?"top":"left",y=g?"bottom":"right",x=g?"clientHeight":"clientWidth",P=o.reference[h]+o.reference[d]-p[d]-o.floating[h],w=p[d]-o.reference[d],S=await(i.getOffsetParent==null?void 0:i.getOffsetParent(u));let O=S?S[x]:0;(!O||!await(i.isElement==null?void 0:i.isElement(S)))&&(O=s.floating[x]||o.floating[h]);const _=P/2-w/2,A=O/2-m[h]/2-1,j=Ca(c[v],A),E=Ca(c[y],A),T=j,N=O-m[h]-E,M=O/2-m[h]/2+_,I=Zh(T,M,N),R=!l.arrow&&ds(a)!=null&&M!==I&&o.reference[h]/2-(M<T?j:E)-m[h]/2<0,L=R?M<T?M-T:M-N:0;return{[d]:p[d]+L,data:{[d]:I,centerOffset:M-I-L,...R&&{alignmentOffset:L}},reset:R}}}),BA=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:a,middlewareData:o,rects:i,initialPlacement:s,platform:l,elements:u}=t,{mainAxis:f=!0,crossAxis:c=!0,fallbackPlacements:p,fallbackStrategy:d="bestFit",fallbackAxisSideDirection:h="none",flipAlignment:m=!0,...g}=Lr(e,t);if((n=o.arrow)!=null&&n.alignmentOffset)return{};const v=Fr(a),y=ar(s),x=Fr(s)===s,P=await(l.isRTL==null?void 0:l.isRTL(u.floating)),w=p||(x||!m?[vf(s)]:RA(s)),S=h!=="none";!p&&S&&w.push(...DA(s,m,h,P));const O=[s,...w],_=await Dl(t,g),A=[];let j=((r=o.flip)==null?void 0:r.overflows)||[];if(f&&A.push(_[v]),c){const M=MA(a,i,P);A.push(_[M[0]],_[M[1]])}if(j=[...j,{placement:a,overflows:A}],!A.every(M=>M<=0)){var E,T;const M=(((E=o.flip)==null?void 0:E.index)||0)+1,I=O[M];if(I&&(!(c==="alignment"?y!==ar(I):!1)||j.every($=>$.overflows[0]>0&&ar($.placement)===y)))return{data:{index:M,overflows:j},reset:{placement:I}};let R=(T=j.filter(L=>L.overflows[0]<=0).sort((L,$)=>L.overflows[1]-$.overflows[1])[0])==null?void 0:T.placement;if(!R)switch(d){case"bestFit":{var N;const L=(N=j.filter($=>{if(S){const D=ar($.placement);return D===y||D==="y"}return!0}).map($=>[$.placement,$.overflows.filter(D=>D>0).reduce((D,H)=>D+H,0)]).sort(($,D)=>$[1]-D[1])[0])==null?void 0:N[0];L&&(R=L);break}case"initialPlacement":R=s;break}if(a!==R)return{reset:{placement:R}}}return{}}}};function jx(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function $x(e){return jA.some(t=>e[t]>=0)}const HA=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n}=t,{strategy:r="referenceHidden",...a}=Lr(e,t);switch(r){case"referenceHidden":{const o=await Dl(t,{...a,elementContext:"reference"}),i=jx(o,n.reference);return{data:{referenceHiddenOffsets:i,referenceHidden:$x(i)}}}case"escaped":{const o=await Dl(t,{...a,altBoundary:!0}),i=jx(o,n.floating);return{data:{escapedOffsets:i,escaped:$x(i)}}}default:return{}}}}};async function GA(e,t){const{placement:n,platform:r,elements:a}=e,o=await(r.isRTL==null?void 0:r.isRTL(a.floating)),i=Fr(n),s=ds(n),l=ar(n)==="y",u=["left","top"].includes(i)?-1:1,f=o&&l?-1:1,c=Lr(t,e);let{mainAxis:p,crossAxis:d,alignmentAxis:h}=typeof c=="number"?{mainAxis:c,crossAxis:0,alignmentAxis:null}:{mainAxis:c.mainAxis||0,crossAxis:c.crossAxis||0,alignmentAxis:c.alignmentAxis};return s&&typeof h=="number"&&(d=s==="end"?h*-1:h),l?{x:d*f,y:p*u}:{x:p*u,y:d*f}}const UA=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:a,y:o,placement:i,middlewareData:s}=t,l=await GA(t,e);return i===((n=s.offset)==null?void 0:n.placement)&&(r=s.arrow)!=null&&r.alignmentOffset?{}:{x:a+l.x,y:o+l.y,data:{...l,placement:i}}}}},WA=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:a}=t,{mainAxis:o=!0,crossAxis:i=!1,limiter:s={fn:g=>{let{x:v,y}=g;return{x:v,y}}},...l}=Lr(e,t),u={x:n,y:r},f=await Dl(t,l),c=ar(Fr(a)),p=D0(c);let d=u[p],h=u[c];if(o){const g=p==="y"?"top":"left",v=p==="y"?"bottom":"right",y=d+f[g],x=d-f[v];d=Zh(y,d,x)}if(i){const g=c==="y"?"top":"left",v=c==="y"?"bottom":"right",y=h+f[g],x=h-f[v];h=Zh(y,h,x)}const m=s.fn({...t,[p]:d,[c]:h});return{...m,data:{x:m.x-n,y:m.y-r,enabled:{[p]:o,[c]:i}}}}}},qA=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:a,rects:o,middlewareData:i}=t,{offset:s=0,mainAxis:l=!0,crossAxis:u=!0}=Lr(e,t),f={x:n,y:r},c=ar(a),p=D0(c);let d=f[p],h=f[c];const m=Lr(s,t),g=typeof m=="number"?{mainAxis:m,crossAxis:0}:{mainAxis:0,crossAxis:0,...m};if(l){const x=p==="y"?"height":"width",P=o.reference[p]-o.floating[x]+g.mainAxis,w=o.reference[p]+o.reference[x]-g.mainAxis;d<P?d=P:d>w&&(d=w)}if(u){var v,y;const x=p==="y"?"width":"height",P=["top","left"].includes(Fr(a)),w=o.reference[c]-o.floating[x]+(P&&((v=i.offset)==null?void 0:v[c])||0)+(P?0:g.crossAxis),S=o.reference[c]+o.reference[x]+(P?0:((y=i.offset)==null?void 0:y[c])||0)-(P?g.crossAxis:0);h<w?h=w:h>S&&(h=S)}return{[p]:d,[c]:h}}}},VA=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var n,r;const{placement:a,rects:o,platform:i,elements:s}=t,{apply:l=()=>{},...u}=Lr(e,t),f=await Dl(t,u),c=Fr(a),p=ds(a),d=ar(a)==="y",{width:h,height:m}=o.floating;let g,v;c==="top"||c==="bottom"?(g=c,v=p===(await(i.isRTL==null?void 0:i.isRTL(s.floating))?"start":"end")?"left":"right"):(v=c,g=p==="end"?"top":"bottom");const y=m-f.top-f.bottom,x=h-f.left-f.right,P=Ca(m-f[g],y),w=Ca(h-f[v],x),S=!t.middlewareData.shift;let O=P,_=w;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(_=x),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(O=y),S&&!p){const j=Zt(f.left,0),E=Zt(f.right,0),T=Zt(f.top,0),N=Zt(f.bottom,0);d?_=h-2*(j!==0||E!==0?j+E:Zt(f.left,f.right)):O=m-2*(T!==0||N!==0?T+N:Zt(f.top,f.bottom))}await l({...t,availableWidth:_,availableHeight:O});const A=await i.getDimensions(s.floating);return h!==A.width||m!==A.height?{reset:{rects:!0}}:{}}}};function Bp(){return typeof window<"u"}function ms(e){return O6(e)?(e.nodeName||"").toLowerCase():"#document"}function rn(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function yr(e){var t;return(t=(O6(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function O6(e){return Bp()?e instanceof Node||e instanceof rn(e).Node:!1}function Wn(e){return Bp()?e instanceof Element||e instanceof rn(e).Element:!1}function hr(e){return Bp()?e instanceof HTMLElement||e instanceof rn(e).HTMLElement:!1}function Nx(e){return!Bp()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof rn(e).ShadowRoot}function ju(e){const{overflow:t,overflowX:n,overflowY:r,display:a}=qn(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(a)}function KA(e){return["table","td","th"].includes(ms(e))}function Hp(e){return[":popover-open",":modal"].some(t=>{try{return e.matches(t)}catch{return!1}})}function z0(e){const t=B0(),n=Wn(e)?qn(e):e;return["transform","translate","scale","rotate","perspective"].some(r=>n[r]?n[r]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||["transform","translate","scale","rotate","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function XA(e){let t=Ea(e);for(;hr(t)&&!Mi(t);){if(z0(t))return t;if(Hp(t))return null;t=Ea(t)}return null}function B0(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Mi(e){return["html","body","#document"].includes(ms(e))}function qn(e){return rn(e).getComputedStyle(e)}function Gp(e){return Wn(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ea(e){if(ms(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Nx(e)&&e.host||yr(e);return Nx(t)?t.host:t}function k6(e){const t=Ea(e);return Mi(t)?e.ownerDocument?e.ownerDocument.body:e.body:hr(t)&&ju(t)?t:k6(t)}function Ll(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const a=k6(e),o=a===((r=e.ownerDocument)==null?void 0:r.body),i=rn(a);if(o){const s=ev(i);return t.concat(i,i.visualViewport||[],ju(a)?a:[],s&&n?Ll(s):[])}return t.concat(a,Ll(a,[],n))}function ev(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function _6(e){const t=qn(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const a=hr(e),o=a?e.offsetWidth:n,i=a?e.offsetHeight:r,s=hf(n)!==o||hf(r)!==i;return s&&(n=o,r=i),{width:n,height:r,$:s}}function H0(e){return Wn(e)?e:e.contextElement}function fi(e){const t=H0(e);if(!hr(t))return fr(1);const n=t.getBoundingClientRect(),{width:r,height:a,$:o}=_6(t);let i=(o?hf(n.width):n.width)/r,s=(o?hf(n.height):n.height)/a;return(!i||!Number.isFinite(i))&&(i=1),(!s||!Number.isFinite(s))&&(s=1),{x:i,y:s}}const YA=fr(0);function A6(e){const t=rn(e);return!B0()||!t.visualViewport?YA:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function QA(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==rn(e)?!1:t}function wo(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const a=e.getBoundingClientRect(),o=H0(e);let i=fr(1);t&&(r?Wn(r)&&(i=fi(r)):i=fi(e));const s=QA(o,n,r)?A6(o):fr(0);let l=(a.left+s.x)/i.x,u=(a.top+s.y)/i.y,f=a.width/i.x,c=a.height/i.y;if(o){const p=rn(o),d=r&&Wn(r)?rn(r):r;let h=p,m=ev(h);for(;m&&r&&d!==h;){const g=fi(m),v=m.getBoundingClientRect(),y=qn(m),x=v.left+(m.clientLeft+parseFloat(y.paddingLeft))*g.x,P=v.top+(m.clientTop+parseFloat(y.paddingTop))*g.y;l*=g.x,u*=g.y,f*=g.x,c*=g.y,l+=x,u+=P,h=rn(m),m=ev(h)}}return yf({width:f,height:c,x:l,y:u})}function G0(e,t){const n=Gp(e).scrollLeft;return t?t.left+n:wo(yr(e)).left+n}function C6(e,t,n){n===void 0&&(n=!1);const r=e.getBoundingClientRect(),a=r.left+t.scrollLeft-(n?0:G0(e,r)),o=r.top+t.scrollTop;return{x:a,y:o}}function ZA(e){let{elements:t,rect:n,offsetParent:r,strategy:a}=e;const o=a==="fixed",i=yr(r),s=t?Hp(t.floating):!1;if(r===i||s&&o)return n;let l={scrollLeft:0,scrollTop:0},u=fr(1);const f=fr(0),c=hr(r);if((c||!c&&!o)&&((ms(r)!=="body"||ju(i))&&(l=Gp(r)),hr(r))){const d=wo(r);u=fi(r),f.x=d.x+r.clientLeft,f.y=d.y+r.clientTop}const p=i&&!c&&!o?C6(i,l,!0):fr(0);return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-l.scrollLeft*u.x+f.x+p.x,y:n.y*u.y-l.scrollTop*u.y+f.y+p.y}}function JA(e){return Array.from(e.getClientRects())}function eC(e){const t=yr(e),n=Gp(e),r=e.ownerDocument.body,a=Zt(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),o=Zt(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let i=-n.scrollLeft+G0(e);const s=-n.scrollTop;return qn(r).direction==="rtl"&&(i+=Zt(t.clientWidth,r.clientWidth)-a),{width:a,height:o,x:i,y:s}}function tC(e,t){const n=rn(e),r=yr(e),a=n.visualViewport;let o=r.clientWidth,i=r.clientHeight,s=0,l=0;if(a){o=a.width,i=a.height;const u=B0();(!u||u&&t==="fixed")&&(s=a.offsetLeft,l=a.offsetTop)}return{width:o,height:i,x:s,y:l}}function nC(e,t){const n=wo(e,!0,t==="fixed"),r=n.top+e.clientTop,a=n.left+e.clientLeft,o=hr(e)?fi(e):fr(1),i=e.clientWidth*o.x,s=e.clientHeight*o.y,l=a*o.x,u=r*o.y;return{width:i,height:s,x:l,y:u}}function Mx(e,t,n){let r;if(t==="viewport")r=tC(e,n);else if(t==="document")r=eC(yr(e));else if(Wn(t))r=nC(t,n);else{const a=A6(e);r={x:t.x-a.x,y:t.y-a.y,width:t.width,height:t.height}}return yf(r)}function E6(e,t){const n=Ea(e);return n===t||!Wn(n)||Mi(n)?!1:qn(n).position==="fixed"||E6(n,t)}function rC(e,t){const n=t.get(e);if(n)return n;let r=Ll(e,[],!1).filter(s=>Wn(s)&&ms(s)!=="body"),a=null;const o=qn(e).position==="fixed";let i=o?Ea(e):e;for(;Wn(i)&&!Mi(i);){const s=qn(i),l=z0(i);!l&&s.position==="fixed"&&(a=null),(o?!l&&!a:!l&&s.position==="static"&&!!a&&["absolute","fixed"].includes(a.position)||ju(i)&&!l&&E6(e,i))?r=r.filter(f=>f!==i):a=s,i=Ea(i)}return t.set(e,r),r}function aC(e){let{element:t,boundary:n,rootBoundary:r,strategy:a}=e;const i=[...n==="clippingAncestors"?Hp(t)?[]:rC(t,this._c):[].concat(n),r],s=i[0],l=i.reduce((u,f)=>{const c=Mx(t,f,a);return u.top=Zt(c.top,u.top),u.right=Ca(c.right,u.right),u.bottom=Ca(c.bottom,u.bottom),u.left=Zt(c.left,u.left),u},Mx(t,s,a));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}}function oC(e){const{width:t,height:n}=_6(e);return{width:t,height:n}}function iC(e,t,n){const r=hr(t),a=yr(t),o=n==="fixed",i=wo(e,!0,o,t);let s={scrollLeft:0,scrollTop:0};const l=fr(0);function u(){l.x=G0(a)}if(r||!r&&!o)if((ms(t)!=="body"||ju(a))&&(s=Gp(t)),r){const d=wo(t,!0,o,t);l.x=d.x+t.clientLeft,l.y=d.y+t.clientTop}else a&&u();o&&!r&&a&&u();const f=a&&!r&&!o?C6(a,s):fr(0),c=i.left+s.scrollLeft-l.x-f.x,p=i.top+s.scrollTop-l.y-f.y;return{x:c,y:p,width:i.width,height:i.height}}function Pm(e){return qn(e).position==="static"}function Rx(e,t){if(!hr(e)||qn(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return yr(e)===n&&(n=n.ownerDocument.body),n}function T6(e,t){const n=rn(e);if(Hp(e))return n;if(!hr(e)){let a=Ea(e);for(;a&&!Mi(a);){if(Wn(a)&&!Pm(a))return a;a=Ea(a)}return n}let r=Rx(e,t);for(;r&&KA(r)&&Pm(r);)r=Rx(r,t);return r&&Mi(r)&&Pm(r)&&!z0(r)?n:r||XA(e)||n}const sC=async function(e){const t=this.getOffsetParent||T6,n=this.getDimensions,r=await n(e.floating);return{reference:iC(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function lC(e){return qn(e).direction==="rtl"}const uC={convertOffsetParentRelativeRectToViewportRelativeRect:ZA,getDocumentElement:yr,getClippingRect:aC,getOffsetParent:T6,getElementRects:sC,getClientRects:JA,getDimensions:oC,getScale:fi,isElement:Wn,isRTL:lC};function j6(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function cC(e,t){let n=null,r;const a=yr(e);function o(){var s;clearTimeout(r),(s=n)==null||s.disconnect(),n=null}function i(s,l){s===void 0&&(s=!1),l===void 0&&(l=1),o();const u=e.getBoundingClientRect(),{left:f,top:c,width:p,height:d}=u;if(s||t(),!p||!d)return;const h=oc(c),m=oc(a.clientWidth-(f+p)),g=oc(a.clientHeight-(c+d)),v=oc(f),x={rootMargin:-h+"px "+-m+"px "+-g+"px "+-v+"px",threshold:Zt(0,Ca(1,l))||1};let P=!0;function w(S){const O=S[0].intersectionRatio;if(O!==l){if(!P)return i();O?i(!1,O):r=setTimeout(()=>{i(!1,1e-7)},1e3)}O===1&&!j6(u,e.getBoundingClientRect())&&i(),P=!1}try{n=new IntersectionObserver(w,{...x,root:a.ownerDocument})}catch{n=new IntersectionObserver(w,x)}n.observe(e)}return i(!0),o}function fC(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:a=!0,ancestorResize:o=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:l=!1}=r,u=H0(e),f=a||o?[...u?Ll(u):[],...Ll(t)]:[];f.forEach(v=>{a&&v.addEventListener("scroll",n,{passive:!0}),o&&v.addEventListener("resize",n)});const c=u&&s?cC(u,n):null;let p=-1,d=null;i&&(d=new ResizeObserver(v=>{let[y]=v;y&&y.target===u&&d&&(d.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var x;(x=d)==null||x.observe(t)})),n()}),u&&!l&&d.observe(u),d.observe(t));let h,m=l?wo(e):null;l&&g();function g(){const v=wo(e);m&&!j6(m,v)&&n(),m=v,h=requestAnimationFrame(g)}return n(),()=>{var v;f.forEach(y=>{a&&y.removeEventListener("scroll",n),o&&y.removeEventListener("resize",n)}),c==null||c(),(v=d)==null||v.disconnect(),d=null,l&&cancelAnimationFrame(h)}}const pC=UA,dC=WA,mC=BA,hC=VA,vC=HA,Ix=zA,yC=qA,gC=(e,t,n)=>{const r=new Map,a={platform:uC,...n},o={...a.platform,_c:r};return FA(e,t,{...a,platform:o})};var xC=typeof document<"u",wC=function(){},Lc=xC?k.useLayoutEffect:wC;function gf(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,a;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!gf(e[r],t[r]))return!1;return!0}if(a=Object.keys(e),n=a.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,a[r]))return!1;for(r=n;r--!==0;){const o=a[r];if(!(o==="_owner"&&e.$$typeof)&&!gf(e[o],t[o]))return!1}return!0}return e!==e&&t!==t}function $6(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Dx(e,t){const n=$6(e);return Math.round(t*n)/n}function Sm(e){const t=k.useRef(e);return Lc(()=>{t.current=e}),t}function bC(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:a,elements:{reference:o,floating:i}={},transform:s=!0,whileElementsMounted:l,open:u}=e,[f,c]=k.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[p,d]=k.useState(r);gf(p,r)||d(r);const[h,m]=k.useState(null),[g,v]=k.useState(null),y=k.useCallback($=>{$!==S.current&&(S.current=$,m($))},[]),x=k.useCallback($=>{$!==O.current&&(O.current=$,v($))},[]),P=o||h,w=i||g,S=k.useRef(null),O=k.useRef(null),_=k.useRef(f),A=l!=null,j=Sm(l),E=Sm(a),T=Sm(u),N=k.useCallback(()=>{if(!S.current||!O.current)return;const $={placement:t,strategy:n,middleware:p};E.current&&($.platform=E.current),gC(S.current,O.current,$).then(D=>{const H={...D,isPositioned:T.current!==!1};M.current&&!gf(_.current,H)&&(_.current=H,fs.flushSync(()=>{c(H)}))})},[p,t,n,E,T]);Lc(()=>{u===!1&&_.current.isPositioned&&(_.current.isPositioned=!1,c($=>({...$,isPositioned:!1})))},[u]);const M=k.useRef(!1);Lc(()=>(M.current=!0,()=>{M.current=!1}),[]),Lc(()=>{if(P&&(S.current=P),w&&(O.current=w),P&&w){if(j.current)return j.current(P,w,N);N()}},[P,w,N,j,A]);const I=k.useMemo(()=>({reference:S,floating:O,setReference:y,setFloating:x}),[y,x]),R=k.useMemo(()=>({reference:P,floating:w}),[P,w]),L=k.useMemo(()=>{const $={position:n,left:0,top:0};if(!R.floating)return $;const D=Dx(R.floating,f.x),H=Dx(R.floating,f.y);return s?{...$,transform:"translate("+D+"px, "+H+"px)",...$6(R.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:D,top:H}},[n,s,R.floating,f.x,f.y]);return k.useMemo(()=>({...f,update:N,refs:I,elements:R,floatingStyles:L}),[f,N,I,R,L])}const PC=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:r,padding:a}=typeof e=="function"?e(n):e;return r&&t(r)?r.current!=null?Ix({element:r.current,padding:a}).fn(n):{}:r?Ix({element:r,padding:a}).fn(n):{}}}},SC=(e,t)=>({...pC(e),options:[e,t]}),OC=(e,t)=>({...dC(e),options:[e,t]}),kC=(e,t)=>({...yC(e),options:[e,t]}),_C=(e,t)=>({...mC(e),options:[e,t]}),AC=(e,t)=>({...hC(e),options:[e,t]}),CC=(e,t)=>({...vC(e),options:[e,t]}),EC=(e,t)=>({...PC(e),options:[e,t]});var TC="Arrow",N6=k.forwardRef((e,t)=>{const{children:n,width:r=10,height:a=5,...o}=e;return b.jsx(Ee.svg,{...o,ref:t,width:r,height:a,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:b.jsx("polygon",{points:"0,0 30,0 15,10"})})});N6.displayName=TC;var jC=N6;function $C(e){const[t,n]=k.useState(void 0);return jt(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const r=new ResizeObserver(a=>{if(!Array.isArray(a)||!a.length)return;const o=a[0];let i,s;if("borderBoxSize"in o){const l=o.borderBoxSize,u=Array.isArray(l)?l[0]:l;i=u.inlineSize,s=u.blockSize}else i=e.offsetWidth,s=e.offsetHeight;n({width:i,height:s})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}else n(void 0)},[e]),t}var U0="Popper",[M6,Up]=ps(U0),[NC,R6]=M6(U0),I6=e=>{const{__scopePopper:t,children:n}=e,[r,a]=k.useState(null);return b.jsx(NC,{scope:t,anchor:r,onAnchorChange:a,children:n})};I6.displayName=U0;var D6="PopperAnchor",L6=k.forwardRef((e,t)=>{const{__scopePopper:n,virtualRef:r,...a}=e,o=R6(D6,n),i=k.useRef(null),s=Ye(t,i);return k.useEffect(()=>{o.onAnchorChange((r==null?void 0:r.current)||i.current)}),r?null:b.jsx(Ee.div,{...a,ref:s})});L6.displayName=D6;var W0="PopperContent",[MC,RC]=M6(W0),F6=k.forwardRef((e,t)=>{var J,le,q,K,X,F;const{__scopePopper:n,side:r="bottom",sideOffset:a=0,align:o="center",alignOffset:i=0,arrowPadding:s=0,avoidCollisions:l=!0,collisionBoundary:u=[],collisionPadding:f=0,sticky:c="partial",hideWhenDetached:p=!1,updatePositionStrategy:d="optimized",onPlaced:h,...m}=e,g=R6(W0,n),[v,y]=k.useState(null),x=Ye(t,fe=>y(fe)),[P,w]=k.useState(null),S=$C(P),O=(S==null?void 0:S.width)??0,_=(S==null?void 0:S.height)??0,A=r+(o!=="center"?"-"+o:""),j=typeof f=="number"?f:{top:0,right:0,bottom:0,left:0,...f},E=Array.isArray(u)?u:[u],T=E.length>0,N={padding:j,boundary:E.filter(DC),altBoundary:T},{refs:M,floatingStyles:I,placement:R,isPositioned:L,middlewareData:$}=bC({strategy:"fixed",placement:A,whileElementsMounted:(...fe)=>fC(...fe,{animationFrame:d==="always"}),elements:{reference:g.anchor},middleware:[SC({mainAxis:a+_,alignmentAxis:i}),l&&OC({mainAxis:!0,crossAxis:!1,limiter:c==="partial"?kC():void 0,...N}),l&&_C({...N}),AC({...N,apply:({elements:fe,rects:ne,availableWidth:Ne,availableHeight:Me})=>{const{width:Ze,height:Xn}=ne.reference,On=fe.floating.style;On.setProperty("--radix-popper-available-width",`${Ne}px`),On.setProperty("--radix-popper-available-height",`${Me}px`),On.setProperty("--radix-popper-anchor-width",`${Ze}px`),On.setProperty("--radix-popper-anchor-height",`${Xn}px`)}}),P&&EC({element:P,padding:s}),LC({arrowWidth:O,arrowHeight:_}),p&&CC({strategy:"referenceHidden",...N})]}),[D,H]=H6(R),W=Aa(h);jt(()=>{L&&(W==null||W())},[L,W]);const G=(J=$.arrow)==null?void 0:J.x,Z=(le=$.arrow)==null?void 0:le.y,ie=((q=$.arrow)==null?void 0:q.centerOffset)!==0,[ve,Pe]=k.useState();return jt(()=>{v&&Pe(window.getComputedStyle(v).zIndex)},[v]),b.jsx("div",{ref:M.setFloating,"data-radix-popper-content-wrapper":"",style:{...I,transform:L?I.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:ve,"--radix-popper-transform-origin":[(K=$.transformOrigin)==null?void 0:K.x,(X=$.transformOrigin)==null?void 0:X.y].join(" "),...((F=$.hide)==null?void 0:F.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:b.jsx(MC,{scope:n,placedSide:D,onArrowChange:w,arrowX:G,arrowY:Z,shouldHideArrow:ie,children:b.jsx(Ee.div,{"data-side":D,"data-align":H,...m,ref:x,style:{...m.style,animation:L?void 0:"none"}})})})});F6.displayName=W0;var z6="PopperArrow",IC={top:"bottom",right:"left",bottom:"top",left:"right"},B6=k.forwardRef(function(t,n){const{__scopePopper:r,...a}=t,o=RC(z6,r),i=IC[o.placedSide];return b.jsx("span",{ref:o.onArrowChange,style:{position:"absolute",left:o.arrowX,top:o.arrowY,[i]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[o.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[o.placedSide],visibility:o.shouldHideArrow?"hidden":void 0},children:b.jsx(jC,{...a,ref:n,style:{...a.style,display:"block"}})})});B6.displayName=z6;function DC(e){return e!==null}var LC=e=>({name:"transformOrigin",options:e,fn(t){var g,v,y;const{placement:n,rects:r,middlewareData:a}=t,i=((g=a.arrow)==null?void 0:g.centerOffset)!==0,s=i?0:e.arrowWidth,l=i?0:e.arrowHeight,[u,f]=H6(n),c={start:"0%",center:"50%",end:"100%"}[f],p=(((v=a.arrow)==null?void 0:v.x)??0)+s/2,d=(((y=a.arrow)==null?void 0:y.y)??0)+l/2;let h="",m="";return u==="bottom"?(h=i?c:`${p}px`,m=`${-l}px`):u==="top"?(h=i?c:`${p}px`,m=`${r.floating.height+l}px`):u==="right"?(h=`${-l}px`,m=i?c:`${d}px`):u==="left"&&(h=`${r.floating.width+l}px`,m=i?c:`${d}px`),{data:{x:h,y:m}}}});function H6(e){const[t,n="center"]=e.split("-");return[t,n]}var FC=I6,G6=L6,U6=F6,W6=B6,zC="Portal",q6=k.forwardRef((e,t)=>{var s;const{container:n,...r}=e,[a,o]=k.useState(!1);jt(()=>o(!0),[]);const i=n||a&&((s=globalThis==null?void 0:globalThis.document)==null?void 0:s.body);return i?nA.createPortal(b.jsx(Ee.div,{...r,ref:t}),i):null});q6.displayName=zC;var BC=d5[" useInsertionEffect ".trim().toString()]||jt;function xf({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[a,o,i]=HC({defaultProp:t,onChange:n}),s=e!==void 0,l=s?e:a;{const f=k.useRef(e!==void 0);k.useEffect(()=>{const c=f.current;c!==s&&console.warn(`${r} is changing from ${c?"controlled":"uncontrolled"} to ${s?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),f.current=s},[s,r])}const u=k.useCallback(f=>{var c;if(s){const p=GC(f)?f(e):f;p!==e&&((c=i.current)==null||c.call(i,p))}else o(f)},[s,e,o,i]);return[l,u]}function HC({defaultProp:e,onChange:t}){const[n,r]=k.useState(e),a=k.useRef(n),o=k.useRef(t);return BC(()=>{o.current=t},[t]),k.useEffect(()=>{var i;a.current!==n&&((i=o.current)==null||i.call(o,n),a.current=n)},[n,a]),[n,r,o]}function GC(e){return typeof e=="function"}function UC(e){const t=k.useRef({value:e,previous:e});return k.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var V6=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),WC="VisuallyHidden",K6=k.forwardRef((e,t)=>b.jsx(Ee.span,{...e,ref:t,style:{...V6,...e.style}}));K6.displayName=WC;var qC=K6,VC=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Do=new WeakMap,ic=new WeakMap,sc={},Om=0,X6=function(e){return e&&(e.host||X6(e.parentNode))},KC=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=X6(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},XC=function(e,t,n,r){var a=KC(t,Array.isArray(e)?e:[e]);sc[n]||(sc[n]=new WeakMap);var o=sc[n],i=[],s=new Set,l=new Set(a),u=function(c){!c||s.has(c)||(s.add(c),u(c.parentNode))};a.forEach(u);var f=function(c){!c||l.has(c)||Array.prototype.forEach.call(c.children,function(p){if(s.has(p))f(p);else try{var d=p.getAttribute(r),h=d!==null&&d!=="false",m=(Do.get(p)||0)+1,g=(o.get(p)||0)+1;Do.set(p,m),o.set(p,g),i.push(p),m===1&&h&&ic.set(p,!0),g===1&&p.setAttribute(n,"true"),h||p.setAttribute(r,"true")}catch(v){console.error("aria-hidden: cannot operate on ",p,v)}})};return f(t),s.clear(),Om++,function(){i.forEach(function(c){var p=Do.get(c)-1,d=o.get(c)-1;Do.set(c,p),o.set(c,d),p||(ic.has(c)||c.removeAttribute(r),ic.delete(c)),d||c.removeAttribute(n)}),Om--,Om||(Do=new WeakMap,Do=new WeakMap,ic=new WeakMap,sc={})}},YC=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),a=VC(e);return a?(r.push.apply(r,Array.from(a.querySelectorAll("[aria-live], script"))),XC(r,a,n,"aria-hidden")):function(){return null}},rr=function(){return rr=Object.assign||function(t){for(var n,r=1,a=arguments.length;r<a;r++){n=arguments[r];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},rr.apply(this,arguments)};function Y6(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n}function QC(e,t,n){if(n||arguments.length===2)for(var r=0,a=t.length,o;r<a;r++)(o||!(r in t))&&(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))}var Fc="right-scroll-bar-position",zc="width-before-scroll-bar",ZC="with-scroll-bars-hidden",JC="--removed-body-scroll-bar-size";function km(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function eE(e,t){var n=k.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var a=n.value;a!==r&&(n.value=r,n.callback(r,a))}}}})[0];return n.callback=t,n.facade}var tE=typeof window<"u"?k.useLayoutEffect:k.useEffect,Lx=new WeakMap;function nE(e,t){var n=eE(null,function(r){return e.forEach(function(a){return km(a,r)})});return tE(function(){var r=Lx.get(n);if(r){var a=new Set(r),o=new Set(e),i=n.current;a.forEach(function(s){o.has(s)||km(s,null)}),o.forEach(function(s){a.has(s)||km(s,i)})}Lx.set(n,e)},[e]),n}function rE(e){return e}function aE(e,t){t===void 0&&(t=rE);var n=[],r=!1,a={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(o){var i=t(o,r);return n.push(i),function(){n=n.filter(function(s){return s!==i})}},assignSyncMedium:function(o){for(r=!0;n.length;){var i=n;n=[],i.forEach(o)}n={push:function(s){return o(s)},filter:function(){return n}}},assignMedium:function(o){r=!0;var i=[];if(n.length){var s=n;n=[],s.forEach(o),i=n}var l=function(){var f=i;i=[],f.forEach(o)},u=function(){return Promise.resolve().then(l)};u(),n={push:function(f){i.push(f),u()},filter:function(f){return i=i.filter(f),n}}}};return a}function oE(e){e===void 0&&(e={});var t=aE(null);return t.options=rr({async:!0,ssr:!1},e),t}var Q6=function(e){var t=e.sideCar,n=Y6(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return k.createElement(r,rr({},n))};Q6.isSideCarExport=!0;function iE(e,t){return e.useMedium(t),Q6}var Z6=oE(),_m=function(){},Wp=k.forwardRef(function(e,t){var n=k.useRef(null),r=k.useState({onScrollCapture:_m,onWheelCapture:_m,onTouchMoveCapture:_m}),a=r[0],o=r[1],i=e.forwardProps,s=e.children,l=e.className,u=e.removeScrollBar,f=e.enabled,c=e.shards,p=e.sideCar,d=e.noRelative,h=e.noIsolation,m=e.inert,g=e.allowPinchZoom,v=e.as,y=v===void 0?"div":v,x=e.gapMode,P=Y6(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),w=p,S=nE([n,t]),O=rr(rr({},P),a);return k.createElement(k.Fragment,null,f&&k.createElement(w,{sideCar:Z6,removeScrollBar:u,shards:c,noRelative:d,noIsolation:h,inert:m,setCallbacks:o,allowPinchZoom:!!g,lockRef:n,gapMode:x}),i?k.cloneElement(k.Children.only(s),rr(rr({},O),{ref:S})):k.createElement(y,rr({},O,{className:l,ref:S}),s))});Wp.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};Wp.classNames={fullWidth:zc,zeroRight:Fc};var sE=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function lE(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=sE();return t&&e.setAttribute("nonce",t),e}function uE(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function cE(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var fE=function(){var e=0,t=null;return{add:function(n){e==0&&(t=lE())&&(uE(t,n),cE(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},pE=function(){var e=fE();return function(t,n){k.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},J6=function(){var e=pE(),t=function(n){var r=n.styles,a=n.dynamic;return e(r,a),null};return t},dE={left:0,top:0,right:0,gap:0},Am=function(e){return parseInt(e||"",10)||0},mE=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],a=t[e==="padding"?"paddingRight":"marginRight"];return[Am(n),Am(r),Am(a)]},hE=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return dE;var t=mE(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},vE=J6(),pi="data-scroll-locked",yE=function(e,t,n,r){var a=e.left,o=e.top,i=e.right,s=e.gap;return n===void 0&&(n="margin"),`
-  .`.concat(ZC,` {
+`+o.stack}return{value:e,source:t,stack:a,digest:null}}function hm(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Dh(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var M_=typeof WeakMap=="function"?WeakMap:Map;function U9(e,t,n){n=Tr(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){cp||(cp=!0,Vh=r),Dh(e,t)},n}function W9(e,t,n){n=Tr(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var a=t.value;n.payload=function(){return r(a)},n.callback=function(){Dh(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){Dh(e,t),typeof r!="function"&&(ba===null?ba=new Set([this]):ba.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),n}function nx(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new M_;var a=new Set;r.set(t,a)}else a=r.get(t),a===void 0&&(a=new Set,r.set(t,a));a.has(n)||(a.add(n),e=K_.bind(null,e,t,n),t.then(e,e))}function rx(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function ax(e,t,n,r,a){return e.mode&1?(e.flags|=65536,e.lanes=a,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Tr(-1,1),t.tag=2,wa(n,t,1))),n.lanes|=1),e)}var R_=Gr.ReactCurrentOwner,Bt=!1;function Nt(e,t,n,r){t.child=e===null?w9(t,null,n,r):Ti(t,e.child,n,r)}function ox(e,t,n,r,a){n=n.render;var o=t.ref;return ui(t,a),r=xy(e,t,n,r,o,a),n=wy(),e!==null&&!Bt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Dr(e,t,a)):(ze&&n&&sy(t),t.flags|=1,Nt(e,t,r,a),t.child)}function ix(e,t,n,r,a){if(e===null){var o=n.type;return typeof o=="function"&&!Ty(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,q9(e,t,o,r,a)):(e=Dc(n.type,null,r,t,t.mode,a),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,!(e.lanes&a)){var i=o.memoizedProps;if(n=n.compare,n=n!==null?n:_l,n(i,r)&&e.ref===t.ref)return Dr(e,t,a)}return t.flags|=1,e=Sa(o,r),e.ref=t.ref,e.return=t,t.child=e}function q9(e,t,n,r,a){if(e!==null){var o=e.memoizedProps;if(_l(o,r)&&e.ref===t.ref)if(Bt=!1,t.pendingProps=r=o,(e.lanes&a)!==0)e.flags&131072&&(Bt=!0);else return t.lanes=e.lanes,Dr(e,t,a)}return Lh(e,t,n,r,a)}function V9(e,t,n){var r=t.pendingProps,a=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},$e(ti,Yt),Yt|=n;else{if(!(n&1073741824))return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,$e(ti,Yt),Yt|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,$e(ti,Yt),Yt|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,$e(ti,Yt),Yt|=r;return Nt(e,t,a,n),t.child}function K9(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Lh(e,t,n,r,a){var o=Ut(n)?ho:Tt.current;return o=Ai(t,o),ui(t,a),n=xy(e,t,n,r,o,a),r=wy(),e!==null&&!Bt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Dr(e,t,a)):(ze&&r&&sy(t),t.flags|=1,Nt(e,t,n,a),t.child)}function sx(e,t,n,r,a){if(Ut(n)){var o=!0;ep(t)}else o=!1;if(ui(t,a),t.stateNode===null)Mc(e,t),G9(t,n,r),Ih(t,n,r,a),r=!0;else if(e===null){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,u=n.contextType;typeof u=="object"&&u!==null?u=xn(u):(u=Ut(n)?ho:Tt.current,u=Ai(t,u));var p=n.getDerivedStateFromProps,c=typeof p=="function"||typeof i.getSnapshotBeforeUpdate=="function";c||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(s!==r||l!==u)&&tx(t,i,r,u),ta=!1;var f=t.memoizedState;i.state=f,op(t,r,i,a),l=t.memoizedState,s!==r||f!==l||Gt.current||ta?(typeof p=="function"&&(Rh(t,n,p,r),l=t.memoizedState),(s=ta||ex(t,n,s,r,f,l,u))?(c||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=u,r=s):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,P9(e,t),s=t.memoizedProps,u=t.type===t.elementType?s:An(t.type,s),i.props=u,c=t.pendingProps,f=i.context,l=n.contextType,typeof l=="object"&&l!==null?l=xn(l):(l=Ut(n)?ho:Tt.current,l=Ai(t,l));var d=n.getDerivedStateFromProps;(p=typeof d=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(s!==c||f!==l)&&tx(t,i,r,l),ta=!1,f=t.memoizedState,i.state=f,op(t,r,i,a);var h=t.memoizedState;s!==c||f!==h||Gt.current||ta?(typeof d=="function"&&(Rh(t,n,d,r),h=t.memoizedState),(u=ta||ex(t,n,u,r,f,h,l)||!1)?(p||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(r,h,l),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(r,h,l)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=h),i.props=r,i.state=h,i.context=l,r=u):(typeof i.componentDidUpdate!="function"||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return Fh(e,t,n,r,o,a)}function Fh(e,t,n,r,a,o){K9(e,t);var i=(t.flags&128)!==0;if(!r&&!i)return a&&q1(t,n,!1),Dr(e,t,o);r=t.stateNode,R_.current=t;var s=i&&typeof n.getDerivedStateFromError!="function"?null:r.render();return t.flags|=1,e!==null&&i?(t.child=Ti(t,e.child,null,o),t.child=Ti(t,null,s,o)):Nt(e,t,s,o),t.memoizedState=r.state,a&&q1(t,n,!0),t.child}function X9(e){var t=e.stateNode;t.pendingContext?W1(e,t.pendingContext,t.pendingContext!==t.context):t.context&&W1(e,t.context,!1),hy(e,t.containerInfo)}function lx(e,t,n,r,a){return Ei(),uy(a),t.flags|=256,Nt(e,t,n,r),t.child}var zh={dehydrated:null,treeContext:null,retryLane:0};function Bh(e){return{baseLanes:e,cachePool:null,transitions:null}}function Y9(e,t,n){var r=t.pendingProps,a=He.current,o=!1,i=(t.flags&128)!==0,s;if((s=i)||(s=e!==null&&e.memoizedState===null?!1:(a&2)!==0),s?(o=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(a|=1),$e(He,a&1),e===null)return Nh(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(i=r.children,e=r.fallback,o?(r=t.mode,o=t.child,i={mode:"hidden",children:i},!(r&1)&&o!==null?(o.childLanes=0,o.pendingProps=i):o=If(i,r,0,null),e=co(e,r,n,null),o.return=t,e.return=t,o.sibling=e,t.child=o,t.child.memoizedState=Bh(n),t.memoizedState=zh,e):Sy(t,i));if(a=e.memoizedState,a!==null&&(s=a.dehydrated,s!==null))return I_(e,t,i,r,s,a,n);if(o){o=r.fallback,i=t.mode,a=e.child,s=a.sibling;var l={mode:"hidden",children:r.children};return!(i&1)&&t.child!==a?(r=t.child,r.childLanes=0,r.pendingProps=l,t.deletions=null):(r=Sa(a,l),r.subtreeFlags=a.subtreeFlags&14680064),s!==null?o=Sa(s,o):(o=co(o,i,n,null),o.flags|=2),o.return=t,r.return=t,r.sibling=o,t.child=r,r=o,o=t.child,i=e.child.memoizedState,i=i===null?Bh(n):{baseLanes:i.baseLanes|n,cachePool:null,transitions:i.transitions},o.memoizedState=i,o.childLanes=e.childLanes&~n,t.memoizedState=zh,r}return o=e.child,e=o.sibling,r=Sa(o,{mode:"visible",children:r.children}),!(t.mode&1)&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function Sy(e,t){return t=If({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function tc(e,t,n,r){return r!==null&&uy(r),Ti(t,e.child,null,n),e=Sy(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function I_(e,t,n,r,a,o,i){if(n)return t.flags&256?(t.flags&=-257,r=hm(Error(U(422))),tc(e,t,i,r)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(o=r.fallback,a=t.mode,r=If({mode:"visible",children:r.children},a,0,null),o=co(o,a,i,null),o.flags|=2,r.return=t,o.return=t,r.sibling=o,t.child=r,t.mode&1&&Ti(t,e.child,null,i),t.child.memoizedState=Bh(i),t.memoizedState=zh,o);if(!(t.mode&1))return tc(e,t,i,null);if(a.data==="$!"){if(r=a.nextSibling&&a.nextSibling.dataset,r)var s=r.dgst;return r=s,o=Error(U(419)),r=hm(o,r,void 0),tc(e,t,i,r)}if(s=(i&e.childLanes)!==0,Bt||s){if(r=ft,r!==null){switch(i&-i){case 4:a=2;break;case 16:a=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}a=a&(r.suspendedLanes|i)?0:a,a!==0&&a!==o.retryLane&&(o.retryLane=a,Ir(e,a),Gn(r,e,a,-1))}return Ey(),r=hm(Error(U(421))),tc(e,t,i,r)}return a.data==="$?"?(t.flags|=128,t.child=e.child,t=X_.bind(null,e),a._reactRetry=t,null):(e=o.treeContext,en=xa(a.nextSibling),nn=t,ze=!0,Rn=null,e!==null&&(dn[mn++]=kr,dn[mn++]=_r,dn[mn++]=vo,kr=e.id,_r=e.overflow,vo=t),t=Sy(t,r.children),t.flags|=4096,t)}function ux(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),Mh(e.return,t,n)}function vm(e,t,n,r,a){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=a)}function Q9(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(Nt(e,t,r.children,n),r=He.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&ux(e,n,t);else if(e.tag===19)ux(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if($e(He,r),!(t.mode&1))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;n!==null;)e=n.alternate,e!==null&&ip(e)===null&&(a=n),n=n.sibling;n=a,n===null?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),vm(t,!1,a,n,o);break;case"backwards":for(n=null,a=t.child,t.child=null;a!==null;){if(e=a.alternate,e!==null&&ip(e)===null){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}vm(t,!0,n,null,o);break;case"together":vm(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Mc(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Dr(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),go|=t.lanes,!(n&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(U(153));if(t.child!==null){for(e=t.child,n=Sa(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Sa(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function D_(e,t,n){switch(t.tag){case 3:X9(t),Ei();break;case 5:S9(t);break;case 1:Ut(t.type)&&ep(t);break;case 4:hy(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,a=t.memoizedProps.value;$e(rp,r._currentValue),r._currentValue=a;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?($e(He,He.current&1),t.flags|=128,null):n&t.child.childLanes?Y9(e,t,n):($e(He,He.current&1),e=Dr(e,t,n),e!==null?e.sibling:null);$e(He,He.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return Q9(e,t,n);t.flags|=128}if(a=t.memoizedState,a!==null&&(a.rendering=null,a.tail=null,a.lastEffect=null),$e(He,He.current),r)break;return null;case 22:case 23:return t.lanes=0,V9(e,t,n)}return Dr(e,t,n)}var Z9,Hh,J9,e6;Z9=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};Hh=function(){};J9=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Qa(cr.current);var o=null;switch(n){case"input":a=ch(e,a),r=ch(e,r),o=[];break;case"select":a=Ue({},a,{value:void 0}),r=Ue({},r,{value:void 0}),o=[];break;case"textarea":a=dh(e,a),r=dh(e,r),o=[];break;default:typeof a.onClick!="function"&&typeof r.onClick=="function"&&(e.onclick=Zc)}hh(n,r);var i;n=null;for(u in a)if(!r.hasOwnProperty(u)&&a.hasOwnProperty(u)&&a[u]!=null)if(u==="style"){var s=a[u];for(i in s)s.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else u!=="dangerouslySetInnerHTML"&&u!=="children"&&u!=="suppressContentEditableWarning"&&u!=="suppressHydrationWarning"&&u!=="autoFocus"&&(xl.hasOwnProperty(u)?o||(o=[]):(o=o||[]).push(u,null));for(u in r){var l=r[u];if(s=a!=null?a[u]:void 0,r.hasOwnProperty(u)&&l!==s&&(l!=null||s!=null))if(u==="style")if(s){for(i in s)!s.hasOwnProperty(i)||l&&l.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in l)l.hasOwnProperty(i)&&s[i]!==l[i]&&(n||(n={}),n[i]=l[i])}else n||(o||(o=[]),o.push(u,n)),n=l;else u==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,s=s?s.__html:void 0,l!=null&&s!==l&&(o=o||[]).push(u,l)):u==="children"?typeof l!="string"&&typeof l!="number"||(o=o||[]).push(u,""+l):u!=="suppressContentEditableWarning"&&u!=="suppressHydrationWarning"&&(xl.hasOwnProperty(u)?(l!=null&&u==="onScroll"&&Ie("scroll",e),o||s===l||(o=[])):(o=o||[]).push(u,l))}n&&(o=o||[]).push("style",n);var u=o;(t.updateQueue=u)&&(t.flags|=4)}};e6=function(e,t,n,r){n!==r&&(t.flags|=4)};function Ds(e,t){if(!ze)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Pt(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var a=e.child;a!==null;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags&14680064,r|=a.flags&14680064,a.return=e,a=a.sibling;else for(a=e.child;a!==null;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags,r|=a.flags,a.return=e,a=a.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function L_(e,t,n){var r=t.pendingProps;switch(ly(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Pt(t),null;case 1:return Ut(t.type)&&Jc(),Pt(t),null;case 3:return r=t.stateNode,ji(),Fe(Gt),Fe(Tt),yy(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(Ju(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Rn!==null&&(Yh(Rn),Rn=null))),Hh(e,t),Pt(t),null;case 5:vy(t);var a=Qa(jl.current);if(n=t.type,e!==null&&t.stateNode!=null)J9(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(U(166));return Pt(t),null}if(e=Qa(cr.current),Ju(t)){r=t.stateNode,n=t.type;var o=t.memoizedProps;switch(r[nr]=t,r[El]=o,e=(t.mode&1)!==0,n){case"dialog":Ie("cancel",r),Ie("close",r);break;case"iframe":case"object":case"embed":Ie("load",r);break;case"video":case"audio":for(a=0;a<el.length;a++)Ie(el[a],r);break;case"source":Ie("error",r);break;case"img":case"image":case"link":Ie("error",r),Ie("load",r);break;case"details":Ie("toggle",r);break;case"input":g1(r,o),Ie("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!o.multiple},Ie("invalid",r);break;case"textarea":w1(r,o),Ie("invalid",r)}hh(n,o),a=null;for(var i in o)if(o.hasOwnProperty(i)){var s=o[i];i==="children"?typeof s=="string"?r.textContent!==s&&(o.suppressHydrationWarning!==!0&&Zu(r.textContent,s,e),a=["children",s]):typeof s=="number"&&r.textContent!==""+s&&(o.suppressHydrationWarning!==!0&&Zu(r.textContent,s,e),a=["children",""+s]):xl.hasOwnProperty(i)&&s!=null&&i==="onScroll"&&Ie("scroll",r)}switch(n){case"input":Uu(r),x1(r,o,!0);break;case"textarea":Uu(r),b1(r);break;case"select":case"option":break;default:typeof o.onClick=="function"&&(r.onclick=Zc)}r=a,t.updateQueue=r,r!==null&&(t.flags|=4)}else{i=a.nodeType===9?a:a.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=A5(n)),e==="http://www.w3.org/1999/xhtml"?n==="script"?(e=i.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[nr]=t,e[El]=r,Z9(e,t,!1,!1),t.stateNode=e;e:{switch(i=vh(n,r),n){case"dialog":Ie("cancel",e),Ie("close",e),a=r;break;case"iframe":case"object":case"embed":Ie("load",e),a=r;break;case"video":case"audio":for(a=0;a<el.length;a++)Ie(el[a],e);a=r;break;case"source":Ie("error",e),a=r;break;case"img":case"image":case"link":Ie("error",e),Ie("load",e),a=r;break;case"details":Ie("toggle",e),a=r;break;case"input":g1(e,r),a=ch(e,r),Ie("invalid",e);break;case"option":a=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=Ue({},r,{value:void 0}),Ie("invalid",e);break;case"textarea":w1(e,r),a=dh(e,r),Ie("invalid",e);break;default:a=r}hh(n,a),s=a;for(o in s)if(s.hasOwnProperty(o)){var l=s[o];o==="style"?j5(e,l):o==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,l!=null&&E5(e,l)):o==="children"?typeof l=="string"?(n!=="textarea"||l!=="")&&wl(e,l):typeof l=="number"&&wl(e,""+l):o!=="suppressContentEditableWarning"&&o!=="suppressHydrationWarning"&&o!=="autoFocus"&&(xl.hasOwnProperty(o)?l!=null&&o==="onScroll"&&Ie("scroll",e):l!=null&&Vv(e,o,l,i))}switch(n){case"input":Uu(e),x1(e,r,!1);break;case"textarea":Uu(e),b1(e);break;case"option":r.value!=null&&e.setAttribute("value",""+ka(r.value));break;case"select":e.multiple=!!r.multiple,o=r.value,o!=null?oi(e,!!r.multiple,o,!1):r.defaultValue!=null&&oi(e,!!r.multiple,r.defaultValue,!0);break;default:typeof a.onClick=="function"&&(e.onclick=Zc)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return Pt(t),null;case 6:if(e&&t.stateNode!=null)e6(e,t,e.memoizedProps,r);else{if(typeof r!="string"&&t.stateNode===null)throw Error(U(166));if(n=Qa(jl.current),Qa(cr.current),Ju(t)){if(r=t.stateNode,n=t.memoizedProps,r[nr]=t,(o=r.nodeValue!==n)&&(e=nn,e!==null))switch(e.tag){case 3:Zu(r.nodeValue,n,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&Zu(r.nodeValue,n,(e.mode&1)!==0)}o&&(t.flags|=4)}else r=(n.nodeType===9?n:n.ownerDocument).createTextNode(r),r[nr]=t,t.stateNode=r}return Pt(t),null;case 13:if(Fe(He),r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(ze&&en!==null&&t.mode&1&&!(t.flags&128))g9(),Ei(),t.flags|=98560,o=!1;else if(o=Ju(t),r!==null&&r.dehydrated!==null){if(e===null){if(!o)throw Error(U(318));if(o=t.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(U(317));o[nr]=t}else Ei(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Pt(t),o=!1}else Rn!==null&&(Yh(Rn),Rn=null),o=!0;if(!o)return t.flags&65536?t:null}return t.flags&128?(t.lanes=n,t):(r=r!==null,r!==(e!==null&&e.memoizedState!==null)&&r&&(t.child.flags|=8192,t.mode&1&&(e===null||He.current&1?ot===0&&(ot=3):Ey())),t.updateQueue!==null&&(t.flags|=4),Pt(t),null);case 4:return ji(),Hh(e,t),e===null&&Cl(t.stateNode.containerInfo),Pt(t),null;case 10:return fy(t.type._context),Pt(t),null;case 17:return Ut(t.type)&&Jc(),Pt(t),null;case 19:if(Fe(He),o=t.memoizedState,o===null)return Pt(t),null;if(r=(t.flags&128)!==0,i=o.rendering,i===null)if(r)Ds(o,!1);else{if(ot!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(i=ip(e),i!==null){for(t.flags|=128,Ds(o,!1),r=i.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;n!==null;)o=n,e=r,o.flags&=14680066,i=o.alternate,i===null?(o.childLanes=0,o.lanes=e,o.child=null,o.subtreeFlags=0,o.memoizedProps=null,o.memoizedState=null,o.updateQueue=null,o.dependencies=null,o.stateNode=null):(o.childLanes=i.childLanes,o.lanes=i.lanes,o.child=i.child,o.subtreeFlags=0,o.deletions=null,o.memoizedProps=i.memoizedProps,o.memoizedState=i.memoizedState,o.updateQueue=i.updateQueue,o.type=i.type,e=i.dependencies,o.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return $e(He,He.current&1|2),t.child}e=e.sibling}o.tail!==null&&Ke()>Ni&&(t.flags|=128,r=!0,Ds(o,!1),t.lanes=4194304)}else{if(!r)if(e=ip(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Ds(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!ze)return Pt(t),null}else 2*Ke()-o.renderingStartTime>Ni&&n!==1073741824&&(t.flags|=128,r=!0,Ds(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Ke(),t.sibling=null,n=He.current,$e(He,r?n&1|2:n&1),t):(Pt(t),null);case 22:case 23:return Ay(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Yt&1073741824&&(Pt(t),t.subtreeFlags&6&&(t.flags|=8192)):Pt(t),null;case 24:return null;case 25:return null}throw Error(U(156,t.tag))}function F_(e,t){switch(ly(t),t.tag){case 1:return Ut(t.type)&&Jc(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ji(),Fe(Gt),Fe(Tt),yy(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return vy(t),null;case 13:if(Fe(He),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(U(340));Ei()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Fe(He),null;case 4:return ji(),null;case 10:return fy(t.type._context),null;case 22:case 23:return Ay(),null;case 24:return null;default:return null}}var nc=!1,_t=!1,z_=typeof WeakSet=="function"?WeakSet:Set,Y=null;function ei(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){qe(e,t,r)}else n.current=null}function Gh(e,t,n){try{n()}catch(r){qe(e,t,r)}}var cx=!1;function B_(e,t){if(_h=Xc,e=o9(),iy(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,s=-1,l=-1,u=0,p=0,c=e,f=null;t:for(;;){for(var d;c!==n||a!==0&&c.nodeType!==3||(s=i+a),c!==o||r!==0&&c.nodeType!==3||(l=i+r),c.nodeType===3&&(i+=c.nodeValue.length),(d=c.firstChild)!==null;)f=c,c=d;for(;;){if(c===e)break t;if(f===n&&++u===a&&(s=i),f===o&&++p===r&&(l=i),(d=c.nextSibling)!==null)break;c=f,f=c.parentNode}c=d}n=s===-1||l===-1?null:{start:s,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ch={focusedElem:e,selectionRange:n},Xc=!1,Y=t;Y!==null;)if(t=Y,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Y=e;else for(;Y!==null;){t=Y;try{var h=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(h!==null){var m=h.memoizedProps,g=h.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?m:An(t.type,m),g);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var x=t.stateNode.containerInfo;x.nodeType===1?x.textContent="":x.nodeType===9&&x.documentElement&&x.removeChild(x.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(U(163))}}catch(P){qe(t,t.return,P)}if(e=t.sibling,e!==null){e.return=t.return,Y=e;break}Y=t.return}return h=cx,cx=!1,h}function ul(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var a=r=r.next;do{if((a.tag&e)===e){var o=a.destroy;a.destroy=void 0,o!==void 0&&Gh(t,n,o)}a=a.next}while(a!==r)}}function Mf(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Uh(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function t6(e){var t=e.alternate;t!==null&&(e.alternate=null,t6(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[nr],delete t[El],delete t[Th],delete t[S_],delete t[O_])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function n6(e){return e.tag===5||e.tag===3||e.tag===4}function px(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||n6(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Wh(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Zc));else if(r!==4&&(e=e.child,e!==null))for(Wh(e,t,n),e=e.sibling;e!==null;)Wh(e,t,n),e=e.sibling}function qh(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(qh(e,t,n),e=e.sibling;e!==null;)qh(e,t,n),e=e.sibling}var ht=null,$n=!1;function Kr(e,t,n){for(n=n.child;n!==null;)r6(e,t,n),n=n.sibling}function r6(e,t,n){if(ur&&typeof ur.onCommitFiberUnmount=="function")try{ur.onCommitFiberUnmount(_f,n)}catch{}switch(n.tag){case 5:_t||ei(n,t);case 6:var r=ht,a=$n;ht=null,Kr(e,t,n),ht=r,$n=a,ht!==null&&($n?(e=ht,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ht.removeChild(n.stateNode));break;case 18:ht!==null&&($n?(e=ht,n=n.stateNode,e.nodeType===8?um(e.parentNode,n):e.nodeType===1&&um(e,n),Ol(e)):um(ht,n.stateNode));break;case 4:r=ht,a=$n,ht=n.stateNode.containerInfo,$n=!0,Kr(e,t,n),ht=r,$n=a;break;case 0:case 11:case 14:case 15:if(!_t&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){a=r=r.next;do{var o=a,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Gh(n,t,i),a=a.next}while(a!==r)}Kr(e,t,n);break;case 1:if(!_t&&(ei(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){qe(n,t,s)}Kr(e,t,n);break;case 21:Kr(e,t,n);break;case 22:n.mode&1?(_t=(r=_t)||n.memoizedState!==null,Kr(e,t,n),_t=r):Kr(e,t,n);break;default:Kr(e,t,n)}}function fx(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new z_),t.forEach(function(r){var a=Y_.bind(null,e,r);n.has(r)||(n.add(r),r.then(a,a))})}}function kn(e,t){var n=t.deletions;if(n!==null)for(var r=0;r<n.length;r++){var a=n[r];try{var o=e,i=t,s=i;e:for(;s!==null;){switch(s.tag){case 5:ht=s.stateNode,$n=!1;break e;case 3:ht=s.stateNode.containerInfo,$n=!0;break e;case 4:ht=s.stateNode.containerInfo,$n=!0;break e}s=s.return}if(ht===null)throw Error(U(160));r6(o,i,a),ht=null,$n=!1;var l=a.alternate;l!==null&&(l.return=null),a.return=null}catch(u){qe(a,t,u)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)a6(t,e),t=t.sibling}function a6(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(kn(t,e),Yn(e),r&4){try{ul(3,e,e.return),Mf(3,e)}catch(m){qe(e,e.return,m)}try{ul(5,e,e.return)}catch(m){qe(e,e.return,m)}}break;case 1:kn(t,e),Yn(e),r&512&&n!==null&&ei(n,n.return);break;case 5:if(kn(t,e),Yn(e),r&512&&n!==null&&ei(n,n.return),e.flags&32){var a=e.stateNode;try{wl(a,"")}catch(m){qe(e,e.return,m)}}if(r&4&&(a=e.stateNode,a!=null)){var o=e.memoizedProps,i=n!==null?n.memoizedProps:o,s=e.type,l=e.updateQueue;if(e.updateQueue=null,l!==null)try{s==="input"&&o.type==="radio"&&o.name!=null&&_5(a,o),vh(s,i);var u=vh(s,o);for(i=0;i<l.length;i+=2){var p=l[i],c=l[i+1];p==="style"?j5(a,c):p==="dangerouslySetInnerHTML"?E5(a,c):p==="children"?wl(a,c):Vv(a,p,c,u)}switch(s){case"input":ph(a,o);break;case"textarea":C5(a,o);break;case"select":var f=a._wrapperState.wasMultiple;a._wrapperState.wasMultiple=!!o.multiple;var d=o.value;d!=null?oi(a,!!o.multiple,d,!1):f!==!!o.multiple&&(o.defaultValue!=null?oi(a,!!o.multiple,o.defaultValue,!0):oi(a,!!o.multiple,o.multiple?[]:"",!1))}a[El]=o}catch(m){qe(e,e.return,m)}}break;case 6:if(kn(t,e),Yn(e),r&4){if(e.stateNode===null)throw Error(U(162));a=e.stateNode,o=e.memoizedProps;try{a.nodeValue=o}catch(m){qe(e,e.return,m)}}break;case 3:if(kn(t,e),Yn(e),r&4&&n!==null&&n.memoizedState.isDehydrated)try{Ol(t.containerInfo)}catch(m){qe(e,e.return,m)}break;case 4:kn(t,e),Yn(e);break;case 13:kn(t,e),Yn(e),a=e.child,a.flags&8192&&(o=a.memoizedState!==null,a.stateNode.isHidden=o,!o||a.alternate!==null&&a.alternate.memoizedState!==null||(_y=Ke())),r&4&&fx(e);break;case 22:if(p=n!==null&&n.memoizedState!==null,e.mode&1?(_t=(u=_t)||p,kn(t,e),_t=u):kn(t,e),Yn(e),r&8192){if(u=e.memoizedState!==null,(e.stateNode.isHidden=u)&&!p&&e.mode&1)for(Y=e,p=e.child;p!==null;){for(c=Y=p;Y!==null;){switch(f=Y,d=f.child,f.tag){case 0:case 11:case 14:case 15:ul(4,f,f.return);break;case 1:ei(f,f.return);var h=f.stateNode;if(typeof h.componentWillUnmount=="function"){r=f,n=f.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(m){qe(r,n,m)}}break;case 5:ei(f,f.return);break;case 22:if(f.memoizedState!==null){mx(c);continue}}d!==null?(d.return=f,Y=d):mx(c)}p=p.sibling}e:for(p=null,c=e;;){if(c.tag===5){if(p===null){p=c;try{a=c.stateNode,u?(o=a.style,typeof o.setProperty=="function"?o.setProperty("display","none","important"):o.display="none"):(s=c.stateNode,l=c.memoizedProps.style,i=l!=null&&l.hasOwnProperty("display")?l.display:null,s.style.display=T5("display",i))}catch(m){qe(e,e.return,m)}}}else if(c.tag===6){if(p===null)try{c.stateNode.nodeValue=u?"":c.memoizedProps}catch(m){qe(e,e.return,m)}}else if((c.tag!==22&&c.tag!==23||c.memoizedState===null||c===e)&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===e)break e;for(;c.sibling===null;){if(c.return===null||c.return===e)break e;p===c&&(p=null),c=c.return}p===c&&(p=null),c.sibling.return=c.return,c=c.sibling}}break;case 19:kn(t,e),Yn(e),r&4&&fx(e);break;case 21:break;default:kn(t,e),Yn(e)}}function Yn(e){var t=e.flags;if(t&2){try{e:{for(var n=e.return;n!==null;){if(n6(n)){var r=n;break e}n=n.return}throw Error(U(160))}switch(r.tag){case 5:var a=r.stateNode;r.flags&32&&(wl(a,""),r.flags&=-33);var o=px(e);qh(e,o,a);break;case 3:case 4:var i=r.stateNode.containerInfo,s=px(e);Wh(e,s,i);break;default:throw Error(U(161))}}catch(l){qe(e,e.return,l)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function H_(e,t,n){Y=e,o6(e)}function o6(e,t,n){for(var r=(e.mode&1)!==0;Y!==null;){var a=Y,o=a.child;if(a.tag===22&&r){var i=a.memoizedState!==null||nc;if(!i){var s=a.alternate,l=s!==null&&s.memoizedState!==null||_t;s=nc;var u=_t;if(nc=i,(_t=l)&&!u)for(Y=a;Y!==null;)i=Y,l=i.child,i.tag===22&&i.memoizedState!==null?hx(a):l!==null?(l.return=i,Y=l):hx(a);for(;o!==null;)Y=o,o6(o),o=o.sibling;Y=a,nc=s,_t=u}dx(e)}else a.subtreeFlags&8772&&o!==null?(o.return=a,Y=o):dx(e)}}function dx(e){for(;Y!==null;){var t=Y;if(t.flags&8772){var n=t.alternate;try{if(t.flags&8772)switch(t.tag){case 0:case 11:case 15:_t||Mf(5,t);break;case 1:var r=t.stateNode;if(t.flags&4&&!_t)if(n===null)r.componentDidMount();else{var a=t.elementType===t.type?n.memoizedProps:An(t.type,n.memoizedProps);r.componentDidUpdate(a,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var o=t.updateQueue;o!==null&&Q1(t,o,r);break;case 3:var i=t.updateQueue;if(i!==null){if(n=null,t.child!==null)switch(t.child.tag){case 5:n=t.child.stateNode;break;case 1:n=t.child.stateNode}Q1(t,i,n)}break;case 5:var s=t.stateNode;if(n===null&&t.flags&4){n=s;var l=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break;case"img":l.src&&(n.src=l.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var u=t.alternate;if(u!==null){var p=u.memoizedState;if(p!==null){var c=p.dehydrated;c!==null&&Ol(c)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(U(163))}_t||t.flags&512&&Uh(t)}catch(f){qe(t,t.return,f)}}if(t===e){Y=null;break}if(n=t.sibling,n!==null){n.return=t.return,Y=n;break}Y=t.return}}function mx(e){for(;Y!==null;){var t=Y;if(t===e){Y=null;break}var n=t.sibling;if(n!==null){n.return=t.return,Y=n;break}Y=t.return}}function hx(e){for(;Y!==null;){var t=Y;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{Mf(4,t)}catch(l){qe(t,n,l)}break;case 1:var r=t.stateNode;if(typeof r.componentDidMount=="function"){var a=t.return;try{r.componentDidMount()}catch(l){qe(t,a,l)}}var o=t.return;try{Uh(t)}catch(l){qe(t,o,l)}break;case 5:var i=t.return;try{Uh(t)}catch(l){qe(t,i,l)}}}catch(l){qe(t,t.return,l)}if(t===e){Y=null;break}var s=t.sibling;if(s!==null){s.return=t.return,Y=s;break}Y=t.return}}var G_=Math.ceil,up=Gr.ReactCurrentDispatcher,Oy=Gr.ReactCurrentOwner,yn=Gr.ReactCurrentBatchConfig,de=0,ft=null,et=null,gt=0,Yt=0,ti=ja(0),ot=0,Rl=null,go=0,Rf=0,ky=0,cl=null,zt=null,_y=0,Ni=1/0,Pr=null,cp=!1,Vh=null,ba=null,rc=!1,fa=null,pp=0,pl=0,Kh=null,Rc=-1,Ic=0;function Dt(){return de&6?Ke():Rc!==-1?Rc:Rc=Ke()}function Pa(e){return e.mode&1?de&2&&gt!==0?gt&-gt:__.transition!==null?(Ic===0&&(Ic=G5()),Ic):(e=ke,e!==0||(e=window.event,e=e===void 0?16:Y5(e.type)),e):1}function Gn(e,t,n,r){if(50<pl)throw pl=0,Kh=null,Error(U(185));_u(e,n,r),(!(de&2)||e!==ft)&&(e===ft&&(!(de&2)&&(Rf|=n),ot===4&&aa(e,gt)),Wt(e,r),n===1&&de===0&&!(t.mode&1)&&(Ni=Ke()+500,jf&&$a()))}function Wt(e,t){var n=e.callbackNode;_k(e,t);var r=Kc(e,e===ft?gt:0);if(r===0)n!==null&&O1(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(n!=null&&O1(n),t===1)e.tag===0?k_(vx.bind(null,e)):h9(vx.bind(null,e)),b_(function(){!(de&6)&&$a()}),n=null;else{switch(U5(r)){case 1:n=Zv;break;case 4:n=B5;break;case 16:n=Vc;break;case 536870912:n=H5;break;default:n=Vc}n=d6(n,i6.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function i6(e,t){if(Rc=-1,Ic=0,de&6)throw Error(U(327));var n=e.callbackNode;if(ci()&&e.callbackNode!==n)return null;var r=Kc(e,e===ft?gt:0);if(r===0)return null;if(r&30||r&e.expiredLanes||t)t=fp(e,r);else{t=r;var a=de;de|=2;var o=l6();(ft!==e||gt!==t)&&(Pr=null,Ni=Ke()+500,uo(e,t));do try{q_();break}catch(s){s6(e,s)}while(!0);py(),up.current=o,de=a,et!==null?t=0:(ft=null,gt=0,t=ot)}if(t!==0){if(t===2&&(a=bh(e),a!==0&&(r=a,t=Xh(e,a))),t===1)throw n=Rl,uo(e,0),aa(e,r),Wt(e,Ke()),n;if(t===6)aa(e,r);else{if(a=e.current.alternate,!(r&30)&&!U_(a)&&(t=fp(e,r),t===2&&(o=bh(e),o!==0&&(r=o,t=Xh(e,o))),t===1))throw n=Rl,uo(e,0),aa(e,r),Wt(e,Ke()),n;switch(e.finishedWork=a,e.finishedLanes=r,t){case 0:case 1:throw Error(U(345));case 2:Wa(e,zt,Pr);break;case 3:if(aa(e,r),(r&130023424)===r&&(t=_y+500-Ke(),10<t)){if(Kc(e,0)!==0)break;if(a=e.suspendedLanes,(a&r)!==r){Dt(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Eh(Wa.bind(null,e,zt,Pr),t);break}Wa(e,zt,Pr);break;case 4:if(aa(e,r),(r&4194240)===r)break;for(t=e.eventTimes,a=-1;0<r;){var i=31-Hn(r);o=1<<i,i=t[i],i>a&&(a=i),r&=~o}if(r=a,r=Ke()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*G_(r/1960))-r,10<r){e.timeoutHandle=Eh(Wa.bind(null,e,zt,Pr),r);break}Wa(e,zt,Pr);break;case 5:Wa(e,zt,Pr);break;default:throw Error(U(329))}}}return Wt(e,Ke()),e.callbackNode===n?i6.bind(null,e):null}function Xh(e,t){var n=cl;return e.current.memoizedState.isDehydrated&&(uo(e,t).flags|=256),e=fp(e,t),e!==2&&(t=zt,zt=n,t!==null&&Yh(t)),e}function Yh(e){zt===null?zt=e:zt.push.apply(zt,e)}function U_(e){for(var t=e;;){if(t.flags&16384){var n=t.updateQueue;if(n!==null&&(n=n.stores,n!==null))for(var r=0;r<n.length;r++){var a=n[r],o=a.getSnapshot;a=a.value;try{if(!Un(o(),a))return!1}catch{return!1}}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function aa(e,t){for(t&=~ky,t&=~Rf,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Hn(t),r=1<<n;e[n]=-1,t&=~r}}function vx(e){if(de&6)throw Error(U(327));ci();var t=Kc(e,0);if(!(t&1))return Wt(e,Ke()),null;var n=fp(e,t);if(e.tag!==0&&n===2){var r=bh(e);r!==0&&(t=r,n=Xh(e,r))}if(n===1)throw n=Rl,uo(e,0),aa(e,t),Wt(e,Ke()),n;if(n===6)throw Error(U(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Wa(e,zt,Pr),Wt(e,Ke()),null}function Cy(e,t){var n=de;de|=1;try{return e(t)}finally{de=n,de===0&&(Ni=Ke()+500,jf&&$a())}}function xo(e){fa!==null&&fa.tag===0&&!(de&6)&&ci();var t=de;de|=1;var n=yn.transition,r=ke;try{if(yn.transition=null,ke=1,e)return e()}finally{ke=r,yn.transition=n,de=t,!(de&6)&&$a()}}function Ay(){Yt=ti.current,Fe(ti)}function uo(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(n!==-1&&(e.timeoutHandle=-1,w_(n)),et!==null)for(n=et.return;n!==null;){var r=n;switch(ly(r),r.tag){case 1:r=r.type.childContextTypes,r!=null&&Jc();break;case 3:ji(),Fe(Gt),Fe(Tt),yy();break;case 5:vy(r);break;case 4:ji();break;case 13:Fe(He);break;case 19:Fe(He);break;case 10:fy(r.type._context);break;case 22:case 23:Ay()}n=n.return}if(ft=e,et=e=Sa(e.current,null),gt=Yt=t,ot=0,Rl=null,ky=Rf=go=0,zt=cl=null,Ya!==null){for(t=0;t<Ya.length;t++)if(n=Ya[t],r=n.interleaved,r!==null){n.interleaved=null;var a=r.next,o=n.pending;if(o!==null){var i=o.next;o.next=a,r.next=i}n.pending=r}Ya=null}return e}function s6(e,t){do{var n=et;try{if(py(),$c.current=lp,sp){for(var r=Ge.memoizedState;r!==null;){var a=r.queue;a!==null&&(a.pending=null),r=r.next}sp=!1}if(yo=0,ct=at=Ge=null,ll=!1,$l=0,Oy.current=null,n===null||n.return===null){ot=1,Rl=t,et=null;break}e:{var o=e,i=n.return,s=n,l=t;if(t=gt,s.flags|=32768,l!==null&&typeof l=="object"&&typeof l.then=="function"){var u=l,p=s,c=p.tag;if(!(p.mode&1)&&(c===0||c===11||c===15)){var f=p.alternate;f?(p.updateQueue=f.updateQueue,p.memoizedState=f.memoizedState,p.lanes=f.lanes):(p.updateQueue=null,p.memoizedState=null)}var d=rx(i);if(d!==null){d.flags&=-257,ax(d,i,s,o,t),d.mode&1&&nx(o,u,t),t=d,l=u;var h=t.updateQueue;if(h===null){var m=new Set;m.add(l),t.updateQueue=m}else h.add(l);break e}else{if(!(t&1)){nx(o,u,t),Ey();break e}l=Error(U(426))}}else if(ze&&s.mode&1){var g=rx(i);if(g!==null){!(g.flags&65536)&&(g.flags|=256),ax(g,i,s,o,t),uy($i(l,s));break e}}o=l=$i(l,s),ot!==4&&(ot=2),cl===null?cl=[o]:cl.push(o),o=i;do{switch(o.tag){case 3:o.flags|=65536,t&=-t,o.lanes|=t;var v=U9(o,l,t);Y1(o,v);break e;case 1:s=l;var y=o.type,x=o.stateNode;if(!(o.flags&128)&&(typeof y.getDerivedStateFromError=="function"||x!==null&&typeof x.componentDidCatch=="function"&&(ba===null||!ba.has(x)))){o.flags|=65536,t&=-t,o.lanes|=t;var P=W9(o,s,t);Y1(o,P);break e}}o=o.return}while(o!==null)}c6(n)}catch(w){t=w,et===n&&n!==null&&(et=n=n.return);continue}break}while(!0)}function l6(){var e=up.current;return up.current=lp,e===null?lp:e}function Ey(){(ot===0||ot===3||ot===2)&&(ot=4),ft===null||!(go&268435455)&&!(Rf&268435455)||aa(ft,gt)}function fp(e,t){var n=de;de|=2;var r=l6();(ft!==e||gt!==t)&&(Pr=null,uo(e,t));do try{W_();break}catch(a){s6(e,a)}while(!0);if(py(),de=n,up.current=r,et!==null)throw Error(U(261));return ft=null,gt=0,ot}function W_(){for(;et!==null;)u6(et)}function q_(){for(;et!==null&&!yk();)u6(et)}function u6(e){var t=f6(e.alternate,e,Yt);e.memoizedProps=e.pendingProps,t===null?c6(e):et=t,Oy.current=null}function c6(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&32768){if(n=F_(n,t),n!==null){n.flags&=32767,et=n;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{ot=6,et=null;return}}else if(n=L_(n,t,Yt),n!==null){et=n;return}if(t=t.sibling,t!==null){et=t;return}et=t=e}while(t!==null);ot===0&&(ot=5)}function Wa(e,t,n){var r=ke,a=yn.transition;try{yn.transition=null,ke=1,V_(e,t,n,r)}finally{yn.transition=a,ke=r}return null}function V_(e,t,n,r){do ci();while(fa!==null);if(de&6)throw Error(U(327));n=e.finishedWork;var a=e.finishedLanes;if(n===null)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(U(177));e.callbackNode=null,e.callbackPriority=0;var o=n.lanes|n.childLanes;if(Ck(e,o),e===ft&&(et=ft=null,gt=0),!(n.subtreeFlags&2064)&&!(n.flags&2064)||rc||(rc=!0,d6(Vc,function(){return ci(),null})),o=(n.flags&15990)!==0,n.subtreeFlags&15990||o){o=yn.transition,yn.transition=null;var i=ke;ke=1;var s=de;de|=4,Oy.current=null,B_(e,n),a6(n,e),d_(Ch),Xc=!!_h,Ch=_h=null,e.current=n,H_(n),gk(),de=s,ke=i,yn.transition=o}else e.current=n;if(rc&&(rc=!1,fa=e,pp=a),o=e.pendingLanes,o===0&&(ba=null),bk(n.stateNode),Wt(e,Ke()),t!==null)for(r=e.onRecoverableError,n=0;n<t.length;n++)a=t[n],r(a.value,{componentStack:a.stack,digest:a.digest});if(cp)throw cp=!1,e=Vh,Vh=null,e;return pp&1&&e.tag!==0&&ci(),o=e.pendingLanes,o&1?e===Kh?pl++:(pl=0,Kh=e):pl=0,$a(),null}function ci(){if(fa!==null){var e=U5(pp),t=yn.transition,n=ke;try{if(yn.transition=null,ke=16>e?16:e,fa===null)var r=!1;else{if(e=fa,fa=null,pp=0,de&6)throw Error(U(331));var a=de;for(de|=4,Y=e.current;Y!==null;){var o=Y,i=o.child;if(Y.flags&16){var s=o.deletions;if(s!==null){for(var l=0;l<s.length;l++){var u=s[l];for(Y=u;Y!==null;){var p=Y;switch(p.tag){case 0:case 11:case 15:ul(8,p,o)}var c=p.child;if(c!==null)c.return=p,Y=c;else for(;Y!==null;){p=Y;var f=p.sibling,d=p.return;if(t6(p),p===u){Y=null;break}if(f!==null){f.return=d,Y=f;break}Y=d}}}var h=o.alternate;if(h!==null){var m=h.child;if(m!==null){h.child=null;do{var g=m.sibling;m.sibling=null,m=g}while(m!==null)}}Y=o}}if(o.subtreeFlags&2064&&i!==null)i.return=o,Y=i;else e:for(;Y!==null;){if(o=Y,o.flags&2048)switch(o.tag){case 0:case 11:case 15:ul(9,o,o.return)}var v=o.sibling;if(v!==null){v.return=o.return,Y=v;break e}Y=o.return}}var y=e.current;for(Y=y;Y!==null;){i=Y;var x=i.child;if(i.subtreeFlags&2064&&x!==null)x.return=i,Y=x;else e:for(i=y;Y!==null;){if(s=Y,s.flags&2048)try{switch(s.tag){case 0:case 11:case 15:Mf(9,s)}}catch(w){qe(s,s.return,w)}if(s===i){Y=null;break e}var P=s.sibling;if(P!==null){P.return=s.return,Y=P;break e}Y=s.return}}if(de=a,$a(),ur&&typeof ur.onPostCommitFiberRoot=="function")try{ur.onPostCommitFiberRoot(_f,e)}catch{}r=!0}return r}finally{ke=n,yn.transition=t}}return!1}function yx(e,t,n){t=$i(n,t),t=U9(e,t,1),e=wa(e,t,1),t=Dt(),e!==null&&(_u(e,1,t),Wt(e,t))}function qe(e,t,n){if(e.tag===3)yx(e,e,n);else for(;t!==null;){if(t.tag===3){yx(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof r.componentDidCatch=="function"&&(ba===null||!ba.has(r))){e=$i(n,e),e=W9(t,e,1),t=wa(t,e,1),e=Dt(),t!==null&&(_u(t,1,e),Wt(t,e));break}}t=t.return}}function K_(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),t=Dt(),e.pingedLanes|=e.suspendedLanes&n,ft===e&&(gt&n)===n&&(ot===4||ot===3&&(gt&130023424)===gt&&500>Ke()-_y?uo(e,0):ky|=n),Wt(e,t)}function p6(e,t){t===0&&(e.mode&1?(t=Vu,Vu<<=1,!(Vu&130023424)&&(Vu=4194304)):t=1);var n=Dt();e=Ir(e,t),e!==null&&(_u(e,t,n),Wt(e,n))}function X_(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),p6(e,n)}function Y_(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(U(314))}r!==null&&r.delete(t),p6(e,n)}var f6;f6=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Gt.current)Bt=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Bt=!1,D_(e,t,n);Bt=!!(e.flags&131072)}else Bt=!1,ze&&t.flags&1048576&&v9(t,np,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Mc(e,t),e=t.pendingProps;var a=Ai(t,Tt.current);ui(t,n),a=xy(null,t,r,e,a,n);var o=wy();return t.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ut(r)?(o=!0,ep(t)):o=!1,t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,my(t),a.updater=Nf,t.stateNode=a,a._reactInternals=t,Ih(t,r,e,n),t=Fh(null,t,r,!0,o,n)):(t.tag=0,ze&&o&&sy(t),Nt(null,t,a,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Mc(e,t),e=t.pendingProps,a=r._init,r=a(r._payload),t.type=r,a=t.tag=Z_(r),e=An(r,e),a){case 0:t=Lh(null,t,r,e,n);break e;case 1:t=sx(null,t,r,e,n);break e;case 11:t=ox(null,t,r,e,n);break e;case 14:t=ix(null,t,r,An(r.type,e),n);break e}throw Error(U(306,r,""))}return t;case 0:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:An(r,a),Lh(e,t,r,a,n);case 1:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:An(r,a),sx(e,t,r,a,n);case 3:e:{if(X9(t),e===null)throw Error(U(387));r=t.pendingProps,o=t.memoizedState,a=o.element,P9(e,t),op(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){a=$i(Error(U(423)),t),t=lx(e,t,r,n,a);break e}else if(r!==a){a=$i(Error(U(424)),t),t=lx(e,t,r,n,a);break e}else for(en=xa(t.stateNode.containerInfo.firstChild),nn=t,ze=!0,Rn=null,n=w9(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Ei(),r===a){t=Dr(e,t,n);break e}Nt(e,t,r,n)}t=t.child}return t;case 5:return S9(t),e===null&&Nh(t),r=t.type,a=t.pendingProps,o=e!==null?e.memoizedProps:null,i=a.children,Ah(r,a)?i=null:o!==null&&Ah(r,o)&&(t.flags|=32),K9(e,t),Nt(e,t,i,n),t.child;case 6:return e===null&&Nh(t),null;case 13:return Y9(e,t,n);case 4:return hy(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Ti(t,null,r,n):Nt(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:An(r,a),ox(e,t,r,a,n);case 7:return Nt(e,t,t.pendingProps,n),t.child;case 8:return Nt(e,t,t.pendingProps.children,n),t.child;case 12:return Nt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,a=t.pendingProps,o=t.memoizedProps,i=a.value,$e(rp,r._currentValue),r._currentValue=i,o!==null)if(Un(o.value,i)){if(o.children===a.children&&!Gt.current){t=Dr(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var s=o.dependencies;if(s!==null){i=o.child;for(var l=s.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=Tr(-1,n&-n),l.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var p=u.pending;p===null?l.next=l:(l.next=p.next,p.next=l),u.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),Mh(o.return,n,t),s.lanes|=n;break}l=l.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(U(341));i.lanes|=n,s=i.alternate,s!==null&&(s.lanes|=n),Mh(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}Nt(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,ui(t,n),a=xn(a),r=r(a),t.flags|=1,Nt(e,t,r,n),t.child;case 14:return r=t.type,a=An(r,t.pendingProps),a=An(r.type,a),ix(e,t,r,a,n);case 15:return q9(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:An(r,a),Mc(e,t),t.tag=1,Ut(r)?(e=!0,ep(t)):e=!1,ui(t,n),G9(t,r,a),Ih(t,r,a,n),Fh(null,t,r,!0,e,n);case 19:return Q9(e,t,n);case 22:return V9(e,t,n)}throw Error(U(156,t.tag))};function d6(e,t){return z5(e,t)}function Q_(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function hn(e,t,n,r){return new Q_(e,t,n,r)}function Ty(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Z_(e){if(typeof e=="function")return Ty(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Xv)return 11;if(e===Yv)return 14}return 2}function Sa(e,t){var n=e.alternate;return n===null?(n=hn(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Dc(e,t,n,r,a,o){var i=2;if(r=e,typeof e=="function")Ty(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Wo:return co(n.children,a,o,t);case Kv:i=8,a|=8;break;case ih:return e=hn(12,n,t,a|2),e.elementType=ih,e.lanes=o,e;case sh:return e=hn(13,n,t,a),e.elementType=sh,e.lanes=o,e;case lh:return e=hn(19,n,t,a),e.elementType=lh,e.lanes=o,e;case S5:return If(n,a,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case b5:i=10;break e;case P5:i=9;break e;case Xv:i=11;break e;case Yv:i=14;break e;case ea:i=16,r=null;break e}throw Error(U(130,e==null?e:typeof e,""))}return t=hn(i,n,t,a),t.elementType=e,t.type=r,t.lanes=o,t}function co(e,t,n,r){return e=hn(7,e,r,t),e.lanes=n,e}function If(e,t,n,r){return e=hn(22,e,r,t),e.elementType=S5,e.lanes=n,e.stateNode={isHidden:!1},e}function ym(e,t,n){return e=hn(6,e,null,t),e.lanes=n,e}function gm(e,t,n){return t=hn(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function J_(e,t,n,r,a){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Zd(0),this.expirationTimes=Zd(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Zd(0),this.identifierPrefix=r,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function jy(e,t,n,r,a,o,i,s,l){return e=new J_(e,t,n,s,l),t===1?(t=1,o===!0&&(t|=8)):t=0,o=hn(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},my(o),e}function eC(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:Uo,key:r==null?null:""+r,children:e,containerInfo:t,implementation:n}}function m6(e){if(!e)return _a;e=e._reactInternals;e:{if(To(e)!==e||e.tag!==1)throw Error(U(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Ut(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(U(171))}if(e.tag===1){var n=e.type;if(Ut(n))return m9(e,n,t)}return t}function h6(e,t,n,r,a,o,i,s,l){return e=jy(n,r,!0,e,a,o,i,s,l),e.context=m6(null),n=e.current,r=Dt(),a=Pa(n),o=Tr(r,a),o.callback=t??null,wa(n,o,a),e.current.lanes=a,_u(e,a,r),Wt(e,r),e}function Df(e,t,n,r){var a=t.current,o=Dt(),i=Pa(a);return n=m6(n),t.context===null?t.context=n:t.pendingContext=n,t=Tr(o,i),t.payload={element:e},r=r===void 0?null:r,r!==null&&(t.callback=r),e=wa(a,t,i),e!==null&&(Gn(e,a,i,o),jc(e,a,i)),i}function dp(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function gx(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function $y(e,t){gx(e,t),(e=e.alternate)&&gx(e,t)}function tC(){return null}var v6=typeof reportError=="function"?reportError:function(e){console.error(e)};function Ny(e){this._internalRoot=e}Lf.prototype.render=Ny.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(U(409));Df(e,t,null,null)};Lf.prototype.unmount=Ny.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;xo(function(){Df(null,e,null,null)}),t[Rr]=null}};function Lf(e){this._internalRoot=e}Lf.prototype.unstable_scheduleHydration=function(e){if(e){var t=V5();e={blockedOn:null,target:e,priority:t};for(var n=0;n<ra.length&&t!==0&&t<ra[n].priority;n++);ra.splice(n,0,e),n===0&&X5(e)}};function My(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function Ff(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function xx(){}function nC(e,t,n,r,a){if(a){if(typeof r=="function"){var o=r;r=function(){var u=dp(i);o.call(u)}}var i=h6(t,r,e,0,null,!1,!1,"",xx);return e._reactRootContainer=i,e[Rr]=i.current,Cl(e.nodeType===8?e.parentNode:e),xo(),i}for(;a=e.lastChild;)e.removeChild(a);if(typeof r=="function"){var s=r;r=function(){var u=dp(l);s.call(u)}}var l=jy(e,0,!1,null,null,!1,!1,"",xx);return e._reactRootContainer=l,e[Rr]=l.current,Cl(e.nodeType===8?e.parentNode:e),xo(function(){Df(t,l,n,r)}),l}function zf(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o;if(typeof a=="function"){var s=a;a=function(){var l=dp(i);s.call(l)}}Df(t,i,e,a)}else i=nC(n,t,e,a,r);return dp(i)}W5=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=Js(t.pendingLanes);n!==0&&(Jv(t,n|1),Wt(t,Ke()),!(de&6)&&(Ni=Ke()+500,$a()))}break;case 13:xo(function(){var r=Ir(e,1);if(r!==null){var a=Dt();Gn(r,e,1,a)}}),$y(e,1)}};ey=function(e){if(e.tag===13){var t=Ir(e,134217728);if(t!==null){var n=Dt();Gn(t,e,134217728,n)}$y(e,134217728)}};q5=function(e){if(e.tag===13){var t=Pa(e),n=Ir(e,t);if(n!==null){var r=Dt();Gn(n,e,t,r)}$y(e,t)}};V5=function(){return ke};K5=function(e,t){var n=ke;try{return ke=e,t()}finally{ke=n}};gh=function(e,t,n){switch(t){case"input":if(ph(e,n),t=n.name,n.type==="radio"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=Tf(r);if(!a)throw Error(U(90));k5(r),ph(r,a)}}}break;case"textarea":C5(e,n);break;case"select":t=n.value,t!=null&&oi(e,!!n.multiple,t,!1)}};M5=Cy;R5=xo;var rC={usingClientEntryPoint:!1,Events:[Au,Xo,Tf,$5,N5,Cy]},Ls={findFiberByHostInstance:Xa,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},aC={bundleType:Ls.bundleType,version:Ls.version,rendererPackageName:Ls.rendererPackageName,rendererConfig:Ls.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Gr.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=L5(e),e===null?null:e.stateNode},findFiberByHostInstance:Ls.findFiberByHostInstance||tC,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var ac=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ac.isDisabled&&ac.supportsFiber)try{_f=ac.inject(aC),ur=ac}catch{}}on.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=rC;on.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!My(t))throw Error(U(200));return eC(e,t,null,n)};on.createRoot=function(e,t){if(!My(e))throw Error(U(299));var n=!1,r="",a=v6;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(r=t.identifierPrefix),t.onRecoverableError!==void 0&&(a=t.onRecoverableError)),t=jy(e,1,!1,null,null,n,!1,r,a),e[Rr]=t.current,Cl(e.nodeType===8?e.parentNode:e),new Ny(t)};on.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(U(188)):(e=Object.keys(e).join(","),Error(U(268,e)));return e=L5(t),e=e===null?null:e.stateNode,e};on.flushSync=function(e){return xo(e)};on.hydrate=function(e,t,n){if(!Ff(t))throw Error(U(200));return zf(null,e,t,!0,n)};on.hydrateRoot=function(e,t,n){if(!My(e))throw Error(U(405));var r=n!=null&&n.hydratedSources||null,a=!1,o="",i=v6;if(n!=null&&(n.unstable_strictMode===!0&&(a=!0),n.identifierPrefix!==void 0&&(o=n.identifierPrefix),n.onRecoverableError!==void 0&&(i=n.onRecoverableError)),t=h6(t,null,e,1,n??null,a,!1,o,i),e[Rr]=t.current,Cl(e),r)for(e=0;e<r.length;e++)n=r[e],a=n._getVersion,a=a(n._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[n,a]:t.mutableSourceEagerHydrationData.push(n,a);return new Lf(t)};on.render=function(e,t,n){if(!Ff(t))throw Error(U(200));return zf(null,e,t,!1,n)};on.unmountComponentAtNode=function(e){if(!Ff(e))throw Error(U(40));return e._reactRootContainer?(xo(function(){zf(null,null,e,!1,function(){e._reactRootContainer=null,e[Rr]=null})}),!0):!1};on.unstable_batchedUpdates=Cy;on.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Ff(n))throw Error(U(200));if(e==null||e._reactInternals===void 0)throw Error(U(38));return zf(e,t,n,!1,r)};on.version="18.3.1-next-f1338f8080-20240426";function y6(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(y6)}catch(e){console.error(e)}}y6(),y5.exports=on;var ps=y5.exports;const oC=Ae(ps);var wx=ps;Gc.createRoot=wx.createRoot,Gc.hydrateRoot=wx.hydrateRoot;function bx(e,[t,n]){return Math.min(n,Math.max(t,e))}function fe(e,t,{checkForDefaultPrevented:n=!0}={}){return function(a){if(e==null||e(a),n===!1||!a.defaultPrevented)return t==null?void 0:t(a)}}function fs(e,t=[]){let n=[];function r(o,i){const s=k.createContext(i),l=n.length;n=[...n,i];const u=c=>{var v;const{scope:f,children:d,...h}=c,m=((v=f==null?void 0:f[e])==null?void 0:v[l])||s,g=k.useMemo(()=>h,Object.values(h));return b.jsx(m.Provider,{value:g,children:d})};u.displayName=o+"Provider";function p(c,f){var m;const d=((m=f==null?void 0:f[e])==null?void 0:m[l])||s,h=k.useContext(d);if(h)return h;if(i!==void 0)return i;throw new Error(`\`${c}\` must be used within \`${o}\``)}return[u,p]}const a=()=>{const o=n.map(i=>k.createContext(i));return function(s){const l=(s==null?void 0:s[e])||o;return k.useMemo(()=>({[`__scope${e}`]:{...s,[e]:l}}),[s,l])}};return a.scopeName=e,[r,iC(a,...t)]}function iC(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(a=>({useScope:a(),scopeName:a.scopeName}));return function(o){const i=r.reduce((s,{useScope:l,scopeName:u})=>{const c=l(o)[`__scope${u}`];return{...s,...c}},{});return k.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return n.scopeName=t.scopeName,n}function Px(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function g6(...e){return t=>{let n=!1;const r=e.map(a=>{const o=Px(a,t);return!n&&typeof o=="function"&&(n=!0),o});if(n)return()=>{for(let a=0;a<r.length;a++){const o=r[a];typeof o=="function"?o():Px(e[a],null)}}}}function Ye(...e){return k.useCallback(g6(...e),e)}function Il(e){const t=lC(e),n=k.forwardRef((r,a)=>{const{children:o,...i}=r,s=k.Children.toArray(o),l=s.find(cC);if(l){const u=l.props.children,p=s.map(c=>c===l?k.Children.count(u)>1?k.Children.only(null):k.isValidElement(u)?u.props.children:null:c);return b.jsx(t,{...i,ref:a,children:k.isValidElement(u)?k.cloneElement(u,void 0,p):null})}return b.jsx(t,{...i,ref:a,children:o})});return n.displayName=`${e}.Slot`,n}var sC=Il("Slot");function lC(e){const t=k.forwardRef((n,r)=>{const{children:a,...o}=n;if(k.isValidElement(a)){const i=fC(a),s=pC(o,a.props);return a.type!==k.Fragment&&(s.ref=r?g6(r,i):i),k.cloneElement(a,s)}return k.Children.count(a)>1?k.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var x6=Symbol("radix.slottable");function uC(e){const t=({children:n})=>b.jsx(b.Fragment,{children:n});return t.displayName=`${e}.Slottable`,t.__radixId=x6,t}function cC(e){return k.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===x6}function pC(e,t){const n={...t};for(const r in t){const a=e[r],o=t[r];/^on[A-Z]/.test(r)?a&&o?n[r]=(...s)=>{const l=o(...s);return a(...s),l}:a&&(n[r]=a):r==="style"?n[r]={...a,...o}:r==="className"&&(n[r]=[a,o].filter(Boolean).join(" "))}return{...e,...n}}function fC(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function w6(e){const t=e+"CollectionProvider",[n,r]=fs(t),[a,o]=n(t,{collectionRef:{current:null},itemMap:new Map}),i=m=>{const{scope:g,children:v}=m,y=A.useRef(null),x=A.useRef(new Map).current;return b.jsx(a,{scope:g,itemMap:x,collectionRef:y,children:v})};i.displayName=t;const s=e+"CollectionSlot",l=Il(s),u=A.forwardRef((m,g)=>{const{scope:v,children:y}=m,x=o(s,v),P=Ye(g,x.collectionRef);return b.jsx(l,{ref:P,children:y})});u.displayName=s;const p=e+"CollectionItemSlot",c="data-radix-collection-item",f=Il(p),d=A.forwardRef((m,g)=>{const{scope:v,children:y,...x}=m,P=A.useRef(null),w=Ye(g,P),S=o(p,v);return A.useEffect(()=>(S.itemMap.set(P,{ref:P,...x}),()=>void S.itemMap.delete(P))),b.jsx(f,{[c]:"",ref:w,children:y})});d.displayName=p;function h(m){const g=o(e+"CollectionConsumer",m);return A.useCallback(()=>{const y=g.collectionRef.current;if(!y)return[];const x=Array.from(y.querySelectorAll(`[${c}]`));return Array.from(g.itemMap.values()).sort((S,O)=>x.indexOf(S.ref.current)-x.indexOf(O.ref.current))},[g.collectionRef,g.itemMap])}return[{Provider:i,Slot:u,ItemSlot:d},h,r]}var dC=k.createContext(void 0);function Ry(e){const t=k.useContext(dC);return e||t||"ltr"}var mC=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Ee=mC.reduce((e,t)=>{const n=Il(`Primitive.${t}`),r=k.forwardRef((a,o)=>{const{asChild:i,...s}=a,l=i?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),b.jsx(l,{...s,ref:o})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function hC(e,t){e&&ps.flushSync(()=>e.dispatchEvent(t))}function Ca(e){const t=k.useRef(e);return k.useEffect(()=>{t.current=e}),k.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function vC(e,t=globalThis==null?void 0:globalThis.document){const n=Ca(e);k.useEffect(()=>{const r=a=>{a.key==="Escape"&&n(a)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var yC="DismissableLayer",Qh="dismissableLayer.update",gC="dismissableLayer.pointerDownOutside",xC="dismissableLayer.focusOutside",Sx,b6=k.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Iy=k.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:a,onFocusOutside:o,onInteractOutside:i,onDismiss:s,...l}=e,u=k.useContext(b6),[p,c]=k.useState(null),f=(p==null?void 0:p.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,d]=k.useState({}),h=Ye(t,O=>c(O)),m=Array.from(u.layers),[g]=[...u.layersWithOutsidePointerEventsDisabled].slice(-1),v=m.indexOf(g),y=p?m.indexOf(p):-1,x=u.layersWithOutsidePointerEventsDisabled.size>0,P=y>=v,w=PC(O=>{const _=O.target,C=[...u.branches].some(j=>j.contains(_));!P||C||(a==null||a(O),i==null||i(O),O.defaultPrevented||s==null||s())},f),S=SC(O=>{const _=O.target;[...u.branches].some(j=>j.contains(_))||(o==null||o(O),i==null||i(O),O.defaultPrevented||s==null||s())},f);return vC(O=>{y===u.layers.size-1&&(r==null||r(O),!O.defaultPrevented&&s&&(O.preventDefault(),s()))},f),k.useEffect(()=>{if(p)return n&&(u.layersWithOutsidePointerEventsDisabled.size===0&&(Sx=f.body.style.pointerEvents,f.body.style.pointerEvents="none"),u.layersWithOutsidePointerEventsDisabled.add(p)),u.layers.add(p),Ox(),()=>{n&&u.layersWithOutsidePointerEventsDisabled.size===1&&(f.body.style.pointerEvents=Sx)}},[p,f,n,u]),k.useEffect(()=>()=>{p&&(u.layers.delete(p),u.layersWithOutsidePointerEventsDisabled.delete(p),Ox())},[p,u]),k.useEffect(()=>{const O=()=>d({});return document.addEventListener(Qh,O),()=>document.removeEventListener(Qh,O)},[]),b.jsx(Ee.div,{...l,ref:h,style:{pointerEvents:x?P?"auto":"none":void 0,...e.style},onFocusCapture:fe(e.onFocusCapture,S.onFocusCapture),onBlurCapture:fe(e.onBlurCapture,S.onBlurCapture),onPointerDownCapture:fe(e.onPointerDownCapture,w.onPointerDownCapture)})});Iy.displayName=yC;var wC="DismissableLayerBranch",bC=k.forwardRef((e,t)=>{const n=k.useContext(b6),r=k.useRef(null),a=Ye(t,r);return k.useEffect(()=>{const o=r.current;if(o)return n.branches.add(o),()=>{n.branches.delete(o)}},[n.branches]),b.jsx(Ee.div,{...e,ref:a})});bC.displayName=wC;function PC(e,t=globalThis==null?void 0:globalThis.document){const n=Ca(e),r=k.useRef(!1),a=k.useRef(()=>{});return k.useEffect(()=>{const o=s=>{if(s.target&&!r.current){let l=function(){P6(gC,n,u,{discrete:!0})};const u={originalEvent:s};s.pointerType==="touch"?(t.removeEventListener("click",a.current),a.current=l,t.addEventListener("click",a.current,{once:!0})):l()}else t.removeEventListener("click",a.current);r.current=!1},i=window.setTimeout(()=>{t.addEventListener("pointerdown",o)},0);return()=>{window.clearTimeout(i),t.removeEventListener("pointerdown",o),t.removeEventListener("click",a.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function SC(e,t=globalThis==null?void 0:globalThis.document){const n=Ca(e),r=k.useRef(!1);return k.useEffect(()=>{const a=o=>{o.target&&!r.current&&P6(xC,n,{originalEvent:o},{discrete:!1})};return t.addEventListener("focusin",a),()=>t.removeEventListener("focusin",a)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Ox(){const e=new CustomEvent(Qh);document.dispatchEvent(e)}function P6(e,t,n,{discrete:r}){const a=n.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&a.addEventListener(e,t,{once:!0}),r?hC(a,o):a.dispatchEvent(o)}var xm=0;function OC(){k.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??kx()),document.body.insertAdjacentElement("beforeend",e[1]??kx()),xm++,()=>{xm===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),xm--}},[])}function kx(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var wm="focusScope.autoFocusOnMount",bm="focusScope.autoFocusOnUnmount",_x={bubbles:!1,cancelable:!0},kC="FocusScope",S6=k.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:a,onUnmountAutoFocus:o,...i}=e,[s,l]=k.useState(null),u=Ca(a),p=Ca(o),c=k.useRef(null),f=Ye(t,m=>l(m)),d=k.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;k.useEffect(()=>{if(r){let m=function(x){if(d.paused||!s)return;const P=x.target;s.contains(P)?c.current=P:Qr(c.current,{select:!0})},g=function(x){if(d.paused||!s)return;const P=x.relatedTarget;P!==null&&(s.contains(P)||Qr(c.current,{select:!0}))},v=function(x){if(document.activeElement===document.body)for(const w of x)w.removedNodes.length>0&&Qr(s)};document.addEventListener("focusin",m),document.addEventListener("focusout",g);const y=new MutationObserver(v);return s&&y.observe(s,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",g),y.disconnect()}}},[r,s,d.paused]),k.useEffect(()=>{if(s){Ax.add(d);const m=document.activeElement;if(!s.contains(m)){const v=new CustomEvent(wm,_x);s.addEventListener(wm,u),s.dispatchEvent(v),v.defaultPrevented||(_C(jC(O6(s)),{select:!0}),document.activeElement===m&&Qr(s))}return()=>{s.removeEventListener(wm,u),setTimeout(()=>{const v=new CustomEvent(bm,_x);s.addEventListener(bm,p),s.dispatchEvent(v),v.defaultPrevented||Qr(m??document.body,{select:!0}),s.removeEventListener(bm,p),Ax.remove(d)},0)}}},[s,u,p,d]);const h=k.useCallback(m=>{if(!n&&!r||d.paused)return;const g=m.key==="Tab"&&!m.altKey&&!m.ctrlKey&&!m.metaKey,v=document.activeElement;if(g&&v){const y=m.currentTarget,[x,P]=CC(y);x&&P?!m.shiftKey&&v===P?(m.preventDefault(),n&&Qr(x,{select:!0})):m.shiftKey&&v===x&&(m.preventDefault(),n&&Qr(P,{select:!0})):v===y&&m.preventDefault()}},[n,r,d.paused]);return b.jsx(Ee.div,{tabIndex:-1,...i,ref:f,onKeyDown:h})});S6.displayName=kC;function _C(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(Qr(r,{select:t}),document.activeElement!==n)return}function CC(e){const t=O6(e),n=Cx(t,e),r=Cx(t.reverse(),e);return[n,r]}function O6(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const a=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||a?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Cx(e,t){for(const n of e)if(!AC(n,{upTo:t}))return n}function AC(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function EC(e){return e instanceof HTMLInputElement&&"select"in e}function Qr(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&EC(e)&&t&&e.select()}}var Ax=TC();function TC(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=Ex(e,t),e.unshift(t)},remove(t){var n;e=Ex(e,t),(n=e[0])==null||n.resume()}}}function Ex(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function jC(e){return e.filter(t=>t.tagName!=="A")}var jt=globalThis!=null&&globalThis.document?k.useLayoutEffect:()=>{},$C=h5[" useId ".trim().toString()]||(()=>{}),NC=0;function Tu(e){const[t,n]=k.useState($C());return jt(()=>{n(r=>r??String(NC++))},[e]),t?`radix-${t}`:""}const MC=["top","right","bottom","left"],Aa=Math.min,Zt=Math.max,mp=Math.round,oc=Math.floor,pr=e=>({x:e,y:e}),RC={left:"right",right:"left",bottom:"top",top:"bottom"},IC={start:"end",end:"start"};function Zh(e,t,n){return Zt(e,Aa(t,n))}function Lr(e,t){return typeof e=="function"?e(t):e}function Fr(e){return e.split("-")[0]}function ds(e){return e.split("-")[1]}function Dy(e){return e==="x"?"y":"x"}function Ly(e){return e==="y"?"height":"width"}const DC=new Set(["top","bottom"]);function ar(e){return DC.has(Fr(e))?"y":"x"}function Fy(e){return Dy(ar(e))}function LC(e,t,n){n===void 0&&(n=!1);const r=ds(e),a=Fy(e),o=Ly(a);let i=a==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[o]>t.floating[o]&&(i=hp(i)),[i,hp(i)]}function FC(e){const t=hp(e);return[Jh(e),t,Jh(t)]}function Jh(e){return e.replace(/start|end/g,t=>IC[t])}const Tx=["left","right"],jx=["right","left"],zC=["top","bottom"],BC=["bottom","top"];function HC(e,t,n){switch(e){case"top":case"bottom":return n?t?jx:Tx:t?Tx:jx;case"left":case"right":return t?zC:BC;default:return[]}}function GC(e,t,n,r){const a=ds(e);let o=HC(Fr(e),n==="start",r);return a&&(o=o.map(i=>i+"-"+a),t&&(o=o.concat(o.map(Jh)))),o}function hp(e){return e.replace(/left|right|bottom|top/g,t=>RC[t])}function UC(e){return{top:0,right:0,bottom:0,left:0,...e}}function k6(e){return typeof e!="number"?UC(e):{top:e,right:e,bottom:e,left:e}}function vp(e){const{x:t,y:n,width:r,height:a}=e;return{width:r,height:a,top:n,left:t,right:t+r,bottom:n+a,x:t,y:n}}function $x(e,t,n){let{reference:r,floating:a}=e;const o=ar(t),i=Fy(t),s=Ly(i),l=Fr(t),u=o==="y",p=r.x+r.width/2-a.width/2,c=r.y+r.height/2-a.height/2,f=r[s]/2-a[s]/2;let d;switch(l){case"top":d={x:p,y:r.y-a.height};break;case"bottom":d={x:p,y:r.y+r.height};break;case"right":d={x:r.x+r.width,y:c};break;case"left":d={x:r.x-a.width,y:c};break;default:d={x:r.x,y:r.y}}switch(ds(t)){case"start":d[i]-=f*(n&&u?-1:1);break;case"end":d[i]+=f*(n&&u?-1:1);break}return d}const WC=async(e,t,n)=>{const{placement:r="bottom",strategy:a="absolute",middleware:o=[],platform:i}=n,s=o.filter(Boolean),l=await(i.isRTL==null?void 0:i.isRTL(t));let u=await i.getElementRects({reference:e,floating:t,strategy:a}),{x:p,y:c}=$x(u,r,l),f=r,d={},h=0;for(let m=0;m<s.length;m++){const{name:g,fn:v}=s[m],{x:y,y:x,data:P,reset:w}=await v({x:p,y:c,initialPlacement:r,placement:f,strategy:a,middlewareData:d,rects:u,platform:i,elements:{reference:e,floating:t}});p=y??p,c=x??c,d={...d,[g]:{...d[g],...P}},w&&h<=50&&(h++,typeof w=="object"&&(w.placement&&(f=w.placement),w.rects&&(u=w.rects===!0?await i.getElementRects({reference:e,floating:t,strategy:a}):w.rects),{x:p,y:c}=$x(u,f,l)),m=-1)}return{x:p,y:c,placement:f,strategy:a,middlewareData:d}};async function Dl(e,t){var n;t===void 0&&(t={});const{x:r,y:a,platform:o,rects:i,elements:s,strategy:l}=e,{boundary:u="clippingAncestors",rootBoundary:p="viewport",elementContext:c="floating",altBoundary:f=!1,padding:d=0}=Lr(t,e),h=k6(d),g=s[f?c==="floating"?"reference":"floating":c],v=vp(await o.getClippingRect({element:(n=await(o.isElement==null?void 0:o.isElement(g)))==null||n?g:g.contextElement||await(o.getDocumentElement==null?void 0:o.getDocumentElement(s.floating)),boundary:u,rootBoundary:p,strategy:l})),y=c==="floating"?{x:r,y:a,width:i.floating.width,height:i.floating.height}:i.reference,x=await(o.getOffsetParent==null?void 0:o.getOffsetParent(s.floating)),P=await(o.isElement==null?void 0:o.isElement(x))?await(o.getScale==null?void 0:o.getScale(x))||{x:1,y:1}:{x:1,y:1},w=vp(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:y,offsetParent:x,strategy:l}):y);return{top:(v.top-w.top+h.top)/P.y,bottom:(w.bottom-v.bottom+h.bottom)/P.y,left:(v.left-w.left+h.left)/P.x,right:(w.right-v.right+h.right)/P.x}}const qC=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:a,rects:o,platform:i,elements:s,middlewareData:l}=t,{element:u,padding:p=0}=Lr(e,t)||{};if(u==null)return{};const c=k6(p),f={x:n,y:r},d=Fy(a),h=Ly(d),m=await i.getDimensions(u),g=d==="y",v=g?"top":"left",y=g?"bottom":"right",x=g?"clientHeight":"clientWidth",P=o.reference[h]+o.reference[d]-f[d]-o.floating[h],w=f[d]-o.reference[d],S=await(i.getOffsetParent==null?void 0:i.getOffsetParent(u));let O=S?S[x]:0;(!O||!await(i.isElement==null?void 0:i.isElement(S)))&&(O=s.floating[x]||o.floating[h]);const _=P/2-w/2,C=O/2-m[h]/2-1,j=Aa(c[v],C),E=Aa(c[y],C),T=j,N=O-m[h]-E,M=O/2-m[h]/2+_,I=Zh(T,M,N),R=!l.arrow&&ds(a)!=null&&M!==I&&o.reference[h]/2-(M<T?j:E)-m[h]/2<0,L=R?M<T?M-T:M-N:0;return{[d]:f[d]+L,data:{[d]:I,centerOffset:M-I-L,...R&&{alignmentOffset:L}},reset:R}}}),VC=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:a,middlewareData:o,rects:i,initialPlacement:s,platform:l,elements:u}=t,{mainAxis:p=!0,crossAxis:c=!0,fallbackPlacements:f,fallbackStrategy:d="bestFit",fallbackAxisSideDirection:h="none",flipAlignment:m=!0,...g}=Lr(e,t);if((n=o.arrow)!=null&&n.alignmentOffset)return{};const v=Fr(a),y=ar(s),x=Fr(s)===s,P=await(l.isRTL==null?void 0:l.isRTL(u.floating)),w=f||(x||!m?[hp(s)]:FC(s)),S=h!=="none";!f&&S&&w.push(...GC(s,m,h,P));const O=[s,...w],_=await Dl(t,g),C=[];let j=((r=o.flip)==null?void 0:r.overflows)||[];if(p&&C.push(_[v]),c){const M=LC(a,i,P);C.push(_[M[0]],_[M[1]])}if(j=[...j,{placement:a,overflows:C}],!C.every(M=>M<=0)){var E,T;const M=(((E=o.flip)==null?void 0:E.index)||0)+1,I=O[M];if(I&&(!(c==="alignment"?y!==ar(I):!1)||j.every($=>$.overflows[0]>0&&ar($.placement)===y)))return{data:{index:M,overflows:j},reset:{placement:I}};let R=(T=j.filter(L=>L.overflows[0]<=0).sort((L,$)=>L.overflows[1]-$.overflows[1])[0])==null?void 0:T.placement;if(!R)switch(d){case"bestFit":{var N;const L=(N=j.filter($=>{if(S){const D=ar($.placement);return D===y||D==="y"}return!0}).map($=>[$.placement,$.overflows.filter(D=>D>0).reduce((D,H)=>D+H,0)]).sort(($,D)=>$[1]-D[1])[0])==null?void 0:N[0];L&&(R=L);break}case"initialPlacement":R=s;break}if(a!==R)return{reset:{placement:R}}}return{}}}};function Nx(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Mx(e){return MC.some(t=>e[t]>=0)}const KC=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n}=t,{strategy:r="referenceHidden",...a}=Lr(e,t);switch(r){case"referenceHidden":{const o=await Dl(t,{...a,elementContext:"reference"}),i=Nx(o,n.reference);return{data:{referenceHiddenOffsets:i,referenceHidden:Mx(i)}}}case"escaped":{const o=await Dl(t,{...a,altBoundary:!0}),i=Nx(o,n.floating);return{data:{escapedOffsets:i,escaped:Mx(i)}}}default:return{}}}}},_6=new Set(["left","top"]);async function XC(e,t){const{placement:n,platform:r,elements:a}=e,o=await(r.isRTL==null?void 0:r.isRTL(a.floating)),i=Fr(n),s=ds(n),l=ar(n)==="y",u=_6.has(i)?-1:1,p=o&&l?-1:1,c=Lr(t,e);let{mainAxis:f,crossAxis:d,alignmentAxis:h}=typeof c=="number"?{mainAxis:c,crossAxis:0,alignmentAxis:null}:{mainAxis:c.mainAxis||0,crossAxis:c.crossAxis||0,alignmentAxis:c.alignmentAxis};return s&&typeof h=="number"&&(d=s==="end"?h*-1:h),l?{x:d*p,y:f*u}:{x:f*u,y:d*p}}const YC=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:a,y:o,placement:i,middlewareData:s}=t,l=await XC(t,e);return i===((n=s.offset)==null?void 0:n.placement)&&(r=s.arrow)!=null&&r.alignmentOffset?{}:{x:a+l.x,y:o+l.y,data:{...l,placement:i}}}}},QC=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:a}=t,{mainAxis:o=!0,crossAxis:i=!1,limiter:s={fn:g=>{let{x:v,y}=g;return{x:v,y}}},...l}=Lr(e,t),u={x:n,y:r},p=await Dl(t,l),c=ar(Fr(a)),f=Dy(c);let d=u[f],h=u[c];if(o){const g=f==="y"?"top":"left",v=f==="y"?"bottom":"right",y=d+p[g],x=d-p[v];d=Zh(y,d,x)}if(i){const g=c==="y"?"top":"left",v=c==="y"?"bottom":"right",y=h+p[g],x=h-p[v];h=Zh(y,h,x)}const m=s.fn({...t,[f]:d,[c]:h});return{...m,data:{x:m.x-n,y:m.y-r,enabled:{[f]:o,[c]:i}}}}}},ZC=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:a,rects:o,middlewareData:i}=t,{offset:s=0,mainAxis:l=!0,crossAxis:u=!0}=Lr(e,t),p={x:n,y:r},c=ar(a),f=Dy(c);let d=p[f],h=p[c];const m=Lr(s,t),g=typeof m=="number"?{mainAxis:m,crossAxis:0}:{mainAxis:0,crossAxis:0,...m};if(l){const x=f==="y"?"height":"width",P=o.reference[f]-o.floating[x]+g.mainAxis,w=o.reference[f]+o.reference[x]-g.mainAxis;d<P?d=P:d>w&&(d=w)}if(u){var v,y;const x=f==="y"?"width":"height",P=_6.has(Fr(a)),w=o.reference[c]-o.floating[x]+(P&&((v=i.offset)==null?void 0:v[c])||0)+(P?0:g.crossAxis),S=o.reference[c]+o.reference[x]+(P?0:((y=i.offset)==null?void 0:y[c])||0)-(P?g.crossAxis:0);h<w?h=w:h>S&&(h=S)}return{[f]:d,[c]:h}}}},JC=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var n,r;const{placement:a,rects:o,platform:i,elements:s}=t,{apply:l=()=>{},...u}=Lr(e,t),p=await Dl(t,u),c=Fr(a),f=ds(a),d=ar(a)==="y",{width:h,height:m}=o.floating;let g,v;c==="top"||c==="bottom"?(g=c,v=f===(await(i.isRTL==null?void 0:i.isRTL(s.floating))?"start":"end")?"left":"right"):(v=c,g=f==="end"?"top":"bottom");const y=m-p.top-p.bottom,x=h-p.left-p.right,P=Aa(m-p[g],y),w=Aa(h-p[v],x),S=!t.middlewareData.shift;let O=P,_=w;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(_=x),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(O=y),S&&!f){const j=Zt(p.left,0),E=Zt(p.right,0),T=Zt(p.top,0),N=Zt(p.bottom,0);d?_=h-2*(j!==0||E!==0?j+E:Zt(p.left,p.right)):O=m-2*(T!==0||N!==0?T+N:Zt(p.top,p.bottom))}await l({...t,availableWidth:_,availableHeight:O});const C=await i.getDimensions(s.floating);return h!==C.width||m!==C.height?{reset:{rects:!0}}:{}}}};function Bf(){return typeof window<"u"}function ms(e){return C6(e)?(e.nodeName||"").toLowerCase():"#document"}function rn(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function yr(e){var t;return(t=(C6(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function C6(e){return Bf()?e instanceof Node||e instanceof rn(e).Node:!1}function Wn(e){return Bf()?e instanceof Element||e instanceof rn(e).Element:!1}function hr(e){return Bf()?e instanceof HTMLElement||e instanceof rn(e).HTMLElement:!1}function Rx(e){return!Bf()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof rn(e).ShadowRoot}const eA=new Set(["inline","contents"]);function ju(e){const{overflow:t,overflowX:n,overflowY:r,display:a}=qn(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!eA.has(a)}const tA=new Set(["table","td","th"]);function nA(e){return tA.has(ms(e))}const rA=[":popover-open",":modal"];function Hf(e){return rA.some(t=>{try{return e.matches(t)}catch{return!1}})}const aA=["transform","translate","scale","rotate","perspective"],oA=["transform","translate","scale","rotate","perspective","filter"],iA=["paint","layout","strict","content"];function zy(e){const t=By(),n=Wn(e)?qn(e):e;return aA.some(r=>n[r]?n[r]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||oA.some(r=>(n.willChange||"").includes(r))||iA.some(r=>(n.contain||"").includes(r))}function sA(e){let t=Ea(e);for(;hr(t)&&!Mi(t);){if(zy(t))return t;if(Hf(t))return null;t=Ea(t)}return null}function By(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const lA=new Set(["html","body","#document"]);function Mi(e){return lA.has(ms(e))}function qn(e){return rn(e).getComputedStyle(e)}function Gf(e){return Wn(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ea(e){if(ms(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Rx(e)&&e.host||yr(e);return Rx(t)?t.host:t}function A6(e){const t=Ea(e);return Mi(t)?e.ownerDocument?e.ownerDocument.body:e.body:hr(t)&&ju(t)?t:A6(t)}function Ll(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const a=A6(e),o=a===((r=e.ownerDocument)==null?void 0:r.body),i=rn(a);if(o){const s=e0(i);return t.concat(i,i.visualViewport||[],ju(a)?a:[],s&&n?Ll(s):[])}return t.concat(a,Ll(a,[],n))}function e0(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function E6(e){const t=qn(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const a=hr(e),o=a?e.offsetWidth:n,i=a?e.offsetHeight:r,s=mp(n)!==o||mp(r)!==i;return s&&(n=o,r=i),{width:n,height:r,$:s}}function Hy(e){return Wn(e)?e:e.contextElement}function pi(e){const t=Hy(e);if(!hr(t))return pr(1);const n=t.getBoundingClientRect(),{width:r,height:a,$:o}=E6(t);let i=(o?mp(n.width):n.width)/r,s=(o?mp(n.height):n.height)/a;return(!i||!Number.isFinite(i))&&(i=1),(!s||!Number.isFinite(s))&&(s=1),{x:i,y:s}}const uA=pr(0);function T6(e){const t=rn(e);return!By()||!t.visualViewport?uA:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function cA(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==rn(e)?!1:t}function wo(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const a=e.getBoundingClientRect(),o=Hy(e);let i=pr(1);t&&(r?Wn(r)&&(i=pi(r)):i=pi(e));const s=cA(o,n,r)?T6(o):pr(0);let l=(a.left+s.x)/i.x,u=(a.top+s.y)/i.y,p=a.width/i.x,c=a.height/i.y;if(o){const f=rn(o),d=r&&Wn(r)?rn(r):r;let h=f,m=e0(h);for(;m&&r&&d!==h;){const g=pi(m),v=m.getBoundingClientRect(),y=qn(m),x=v.left+(m.clientLeft+parseFloat(y.paddingLeft))*g.x,P=v.top+(m.clientTop+parseFloat(y.paddingTop))*g.y;l*=g.x,u*=g.y,p*=g.x,c*=g.y,l+=x,u+=P,h=rn(m),m=e0(h)}}return vp({width:p,height:c,x:l,y:u})}function Gy(e,t){const n=Gf(e).scrollLeft;return t?t.left+n:wo(yr(e)).left+n}function j6(e,t,n){n===void 0&&(n=!1);const r=e.getBoundingClientRect(),a=r.left+t.scrollLeft-(n?0:Gy(e,r)),o=r.top+t.scrollTop;return{x:a,y:o}}function pA(e){let{elements:t,rect:n,offsetParent:r,strategy:a}=e;const o=a==="fixed",i=yr(r),s=t?Hf(t.floating):!1;if(r===i||s&&o)return n;let l={scrollLeft:0,scrollTop:0},u=pr(1);const p=pr(0),c=hr(r);if((c||!c&&!o)&&((ms(r)!=="body"||ju(i))&&(l=Gf(r)),hr(r))){const d=wo(r);u=pi(r),p.x=d.x+r.clientLeft,p.y=d.y+r.clientTop}const f=i&&!c&&!o?j6(i,l,!0):pr(0);return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-l.scrollLeft*u.x+p.x+f.x,y:n.y*u.y-l.scrollTop*u.y+p.y+f.y}}function fA(e){return Array.from(e.getClientRects())}function dA(e){const t=yr(e),n=Gf(e),r=e.ownerDocument.body,a=Zt(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),o=Zt(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let i=-n.scrollLeft+Gy(e);const s=-n.scrollTop;return qn(r).direction==="rtl"&&(i+=Zt(t.clientWidth,r.clientWidth)-a),{width:a,height:o,x:i,y:s}}function mA(e,t){const n=rn(e),r=yr(e),a=n.visualViewport;let o=r.clientWidth,i=r.clientHeight,s=0,l=0;if(a){o=a.width,i=a.height;const u=By();(!u||u&&t==="fixed")&&(s=a.offsetLeft,l=a.offsetTop)}return{width:o,height:i,x:s,y:l}}const hA=new Set(["absolute","fixed"]);function vA(e,t){const n=wo(e,!0,t==="fixed"),r=n.top+e.clientTop,a=n.left+e.clientLeft,o=hr(e)?pi(e):pr(1),i=e.clientWidth*o.x,s=e.clientHeight*o.y,l=a*o.x,u=r*o.y;return{width:i,height:s,x:l,y:u}}function Ix(e,t,n){let r;if(t==="viewport")r=mA(e,n);else if(t==="document")r=dA(yr(e));else if(Wn(t))r=vA(t,n);else{const a=T6(e);r={x:t.x-a.x,y:t.y-a.y,width:t.width,height:t.height}}return vp(r)}function $6(e,t){const n=Ea(e);return n===t||!Wn(n)||Mi(n)?!1:qn(n).position==="fixed"||$6(n,t)}function yA(e,t){const n=t.get(e);if(n)return n;let r=Ll(e,[],!1).filter(s=>Wn(s)&&ms(s)!=="body"),a=null;const o=qn(e).position==="fixed";let i=o?Ea(e):e;for(;Wn(i)&&!Mi(i);){const s=qn(i),l=zy(i);!l&&s.position==="fixed"&&(a=null),(o?!l&&!a:!l&&s.position==="static"&&!!a&&hA.has(a.position)||ju(i)&&!l&&$6(e,i))?r=r.filter(p=>p!==i):a=s,i=Ea(i)}return t.set(e,r),r}function gA(e){let{element:t,boundary:n,rootBoundary:r,strategy:a}=e;const i=[...n==="clippingAncestors"?Hf(t)?[]:yA(t,this._c):[].concat(n),r],s=i[0],l=i.reduce((u,p)=>{const c=Ix(t,p,a);return u.top=Zt(c.top,u.top),u.right=Aa(c.right,u.right),u.bottom=Aa(c.bottom,u.bottom),u.left=Zt(c.left,u.left),u},Ix(t,s,a));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}}function xA(e){const{width:t,height:n}=E6(e);return{width:t,height:n}}function wA(e,t,n){const r=hr(t),a=yr(t),o=n==="fixed",i=wo(e,!0,o,t);let s={scrollLeft:0,scrollTop:0};const l=pr(0);function u(){l.x=Gy(a)}if(r||!r&&!o)if((ms(t)!=="body"||ju(a))&&(s=Gf(t)),r){const d=wo(t,!0,o,t);l.x=d.x+t.clientLeft,l.y=d.y+t.clientTop}else a&&u();o&&!r&&a&&u();const p=a&&!r&&!o?j6(a,s):pr(0),c=i.left+s.scrollLeft-l.x-p.x,f=i.top+s.scrollTop-l.y-p.y;return{x:c,y:f,width:i.width,height:i.height}}function Pm(e){return qn(e).position==="static"}function Dx(e,t){if(!hr(e)||qn(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return yr(e)===n&&(n=n.ownerDocument.body),n}function N6(e,t){const n=rn(e);if(Hf(e))return n;if(!hr(e)){let a=Ea(e);for(;a&&!Mi(a);){if(Wn(a)&&!Pm(a))return a;a=Ea(a)}return n}let r=Dx(e,t);for(;r&&nA(r)&&Pm(r);)r=Dx(r,t);return r&&Mi(r)&&Pm(r)&&!zy(r)?n:r||sA(e)||n}const bA=async function(e){const t=this.getOffsetParent||N6,n=this.getDimensions,r=await n(e.floating);return{reference:wA(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function PA(e){return qn(e).direction==="rtl"}const SA={convertOffsetParentRelativeRectToViewportRelativeRect:pA,getDocumentElement:yr,getClippingRect:gA,getOffsetParent:N6,getElementRects:bA,getClientRects:fA,getDimensions:xA,getScale:pi,isElement:Wn,isRTL:PA};function M6(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function OA(e,t){let n=null,r;const a=yr(e);function o(){var s;clearTimeout(r),(s=n)==null||s.disconnect(),n=null}function i(s,l){s===void 0&&(s=!1),l===void 0&&(l=1),o();const u=e.getBoundingClientRect(),{left:p,top:c,width:f,height:d}=u;if(s||t(),!f||!d)return;const h=oc(c),m=oc(a.clientWidth-(p+f)),g=oc(a.clientHeight-(c+d)),v=oc(p),x={rootMargin:-h+"px "+-m+"px "+-g+"px "+-v+"px",threshold:Zt(0,Aa(1,l))||1};let P=!0;function w(S){const O=S[0].intersectionRatio;if(O!==l){if(!P)return i();O?i(!1,O):r=setTimeout(()=>{i(!1,1e-7)},1e3)}O===1&&!M6(u,e.getBoundingClientRect())&&i(),P=!1}try{n=new IntersectionObserver(w,{...x,root:a.ownerDocument})}catch{n=new IntersectionObserver(w,x)}n.observe(e)}return i(!0),o}function kA(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:a=!0,ancestorResize:o=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:l=!1}=r,u=Hy(e),p=a||o?[...u?Ll(u):[],...Ll(t)]:[];p.forEach(v=>{a&&v.addEventListener("scroll",n,{passive:!0}),o&&v.addEventListener("resize",n)});const c=u&&s?OA(u,n):null;let f=-1,d=null;i&&(d=new ResizeObserver(v=>{let[y]=v;y&&y.target===u&&d&&(d.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var x;(x=d)==null||x.observe(t)})),n()}),u&&!l&&d.observe(u),d.observe(t));let h,m=l?wo(e):null;l&&g();function g(){const v=wo(e);m&&!M6(m,v)&&n(),m=v,h=requestAnimationFrame(g)}return n(),()=>{var v;p.forEach(y=>{a&&y.removeEventListener("scroll",n),o&&y.removeEventListener("resize",n)}),c==null||c(),(v=d)==null||v.disconnect(),d=null,l&&cancelAnimationFrame(h)}}const _A=YC,CA=QC,AA=VC,EA=JC,TA=KC,Lx=qC,jA=ZC,$A=(e,t,n)=>{const r=new Map,a={platform:SA,...n},o={...a.platform,_c:r};return WC(e,t,{...a,platform:o})};var NA=typeof document<"u",MA=function(){},Lc=NA?k.useLayoutEffect:MA;function yp(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,a;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!yp(e[r],t[r]))return!1;return!0}if(a=Object.keys(e),n=a.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,a[r]))return!1;for(r=n;r--!==0;){const o=a[r];if(!(o==="_owner"&&e.$$typeof)&&!yp(e[o],t[o]))return!1}return!0}return e!==e&&t!==t}function R6(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Fx(e,t){const n=R6(e);return Math.round(t*n)/n}function Sm(e){const t=k.useRef(e);return Lc(()=>{t.current=e}),t}function RA(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:a,elements:{reference:o,floating:i}={},transform:s=!0,whileElementsMounted:l,open:u}=e,[p,c]=k.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,d]=k.useState(r);yp(f,r)||d(r);const[h,m]=k.useState(null),[g,v]=k.useState(null),y=k.useCallback($=>{$!==S.current&&(S.current=$,m($))},[]),x=k.useCallback($=>{$!==O.current&&(O.current=$,v($))},[]),P=o||h,w=i||g,S=k.useRef(null),O=k.useRef(null),_=k.useRef(p),C=l!=null,j=Sm(l),E=Sm(a),T=Sm(u),N=k.useCallback(()=>{if(!S.current||!O.current)return;const $={placement:t,strategy:n,middleware:f};E.current&&($.platform=E.current),$A(S.current,O.current,$).then(D=>{const H={...D,isPositioned:T.current!==!1};M.current&&!yp(_.current,H)&&(_.current=H,ps.flushSync(()=>{c(H)}))})},[f,t,n,E,T]);Lc(()=>{u===!1&&_.current.isPositioned&&(_.current.isPositioned=!1,c($=>({...$,isPositioned:!1})))},[u]);const M=k.useRef(!1);Lc(()=>(M.current=!0,()=>{M.current=!1}),[]),Lc(()=>{if(P&&(S.current=P),w&&(O.current=w),P&&w){if(j.current)return j.current(P,w,N);N()}},[P,w,N,j,C]);const I=k.useMemo(()=>({reference:S,floating:O,setReference:y,setFloating:x}),[y,x]),R=k.useMemo(()=>({reference:P,floating:w}),[P,w]),L=k.useMemo(()=>{const $={position:n,left:0,top:0};if(!R.floating)return $;const D=Fx(R.floating,p.x),H=Fx(R.floating,p.y);return s?{...$,transform:"translate("+D+"px, "+H+"px)",...R6(R.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:D,top:H}},[n,s,R.floating,p.x,p.y]);return k.useMemo(()=>({...p,update:N,refs:I,elements:R,floatingStyles:L}),[p,N,I,R,L])}const IA=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:r,padding:a}=typeof e=="function"?e(n):e;return r&&t(r)?r.current!=null?Lx({element:r.current,padding:a}).fn(n):{}:r?Lx({element:r,padding:a}).fn(n):{}}}},DA=(e,t)=>({..._A(e),options:[e,t]}),LA=(e,t)=>({...CA(e),options:[e,t]}),FA=(e,t)=>({...jA(e),options:[e,t]}),zA=(e,t)=>({...AA(e),options:[e,t]}),BA=(e,t)=>({...EA(e),options:[e,t]}),HA=(e,t)=>({...TA(e),options:[e,t]}),GA=(e,t)=>({...IA(e),options:[e,t]});var UA="Arrow",I6=k.forwardRef((e,t)=>{const{children:n,width:r=10,height:a=5,...o}=e;return b.jsx(Ee.svg,{...o,ref:t,width:r,height:a,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:b.jsx("polygon",{points:"0,0 30,0 15,10"})})});I6.displayName=UA;var WA=I6;function qA(e){const[t,n]=k.useState(void 0);return jt(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const r=new ResizeObserver(a=>{if(!Array.isArray(a)||!a.length)return;const o=a[0];let i,s;if("borderBoxSize"in o){const l=o.borderBoxSize,u=Array.isArray(l)?l[0]:l;i=u.inlineSize,s=u.blockSize}else i=e.offsetWidth,s=e.offsetHeight;n({width:i,height:s})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}else n(void 0)},[e]),t}var Uy="Popper",[D6,Uf]=fs(Uy),[VA,L6]=D6(Uy),F6=e=>{const{__scopePopper:t,children:n}=e,[r,a]=k.useState(null);return b.jsx(VA,{scope:t,anchor:r,onAnchorChange:a,children:n})};F6.displayName=Uy;var z6="PopperAnchor",B6=k.forwardRef((e,t)=>{const{__scopePopper:n,virtualRef:r,...a}=e,o=L6(z6,n),i=k.useRef(null),s=Ye(t,i);return k.useEffect(()=>{o.onAnchorChange((r==null?void 0:r.current)||i.current)}),r?null:b.jsx(Ee.div,{...a,ref:s})});B6.displayName=z6;var Wy="PopperContent",[KA,XA]=D6(Wy),H6=k.forwardRef((e,t)=>{var J,le,q,K,X,F;const{__scopePopper:n,side:r="bottom",sideOffset:a=0,align:o="center",alignOffset:i=0,arrowPadding:s=0,avoidCollisions:l=!0,collisionBoundary:u=[],collisionPadding:p=0,sticky:c="partial",hideWhenDetached:f=!1,updatePositionStrategy:d="optimized",onPlaced:h,...m}=e,g=L6(Wy,n),[v,y]=k.useState(null),x=Ye(t,pe=>y(pe)),[P,w]=k.useState(null),S=qA(P),O=(S==null?void 0:S.width)??0,_=(S==null?void 0:S.height)??0,C=r+(o!=="center"?"-"+o:""),j=typeof p=="number"?p:{top:0,right:0,bottom:0,left:0,...p},E=Array.isArray(u)?u:[u],T=E.length>0,N={padding:j,boundary:E.filter(QA),altBoundary:T},{refs:M,floatingStyles:I,placement:R,isPositioned:L,middlewareData:$}=RA({strategy:"fixed",placement:C,whileElementsMounted:(...pe)=>kA(...pe,{animationFrame:d==="always"}),elements:{reference:g.anchor},middleware:[DA({mainAxis:a+_,alignmentAxis:i}),l&&LA({mainAxis:!0,crossAxis:!1,limiter:c==="partial"?FA():void 0,...N}),l&&zA({...N}),BA({...N,apply:({elements:pe,rects:ne,availableWidth:Ne,availableHeight:Me})=>{const{width:Ze,height:Xn}=ne.reference,On=pe.floating.style;On.setProperty("--radix-popper-available-width",`${Ne}px`),On.setProperty("--radix-popper-available-height",`${Me}px`),On.setProperty("--radix-popper-anchor-width",`${Ze}px`),On.setProperty("--radix-popper-anchor-height",`${Xn}px`)}}),P&&GA({element:P,padding:s}),ZA({arrowWidth:O,arrowHeight:_}),f&&HA({strategy:"referenceHidden",...N})]}),[D,H]=W6(R),W=Ca(h);jt(()=>{L&&(W==null||W())},[L,W]);const G=(J=$.arrow)==null?void 0:J.x,Z=(le=$.arrow)==null?void 0:le.y,ie=((q=$.arrow)==null?void 0:q.centerOffset)!==0,[ve,Pe]=k.useState();return jt(()=>{v&&Pe(window.getComputedStyle(v).zIndex)},[v]),b.jsx("div",{ref:M.setFloating,"data-radix-popper-content-wrapper":"",style:{...I,transform:L?I.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:ve,"--radix-popper-transform-origin":[(K=$.transformOrigin)==null?void 0:K.x,(X=$.transformOrigin)==null?void 0:X.y].join(" "),...((F=$.hide)==null?void 0:F.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:b.jsx(KA,{scope:n,placedSide:D,onArrowChange:w,arrowX:G,arrowY:Z,shouldHideArrow:ie,children:b.jsx(Ee.div,{"data-side":D,"data-align":H,...m,ref:x,style:{...m.style,animation:L?void 0:"none"}})})})});H6.displayName=Wy;var G6="PopperArrow",YA={top:"bottom",right:"left",bottom:"top",left:"right"},U6=k.forwardRef(function(t,n){const{__scopePopper:r,...a}=t,o=XA(G6,r),i=YA[o.placedSide];return b.jsx("span",{ref:o.onArrowChange,style:{position:"absolute",left:o.arrowX,top:o.arrowY,[i]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[o.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[o.placedSide],visibility:o.shouldHideArrow?"hidden":void 0},children:b.jsx(WA,{...a,ref:n,style:{...a.style,display:"block"}})})});U6.displayName=G6;function QA(e){return e!==null}var ZA=e=>({name:"transformOrigin",options:e,fn(t){var g,v,y;const{placement:n,rects:r,middlewareData:a}=t,i=((g=a.arrow)==null?void 0:g.centerOffset)!==0,s=i?0:e.arrowWidth,l=i?0:e.arrowHeight,[u,p]=W6(n),c={start:"0%",center:"50%",end:"100%"}[p],f=(((v=a.arrow)==null?void 0:v.x)??0)+s/2,d=(((y=a.arrow)==null?void 0:y.y)??0)+l/2;let h="",m="";return u==="bottom"?(h=i?c:`${f}px`,m=`${-l}px`):u==="top"?(h=i?c:`${f}px`,m=`${r.floating.height+l}px`):u==="right"?(h=`${-l}px`,m=i?c:`${d}px`):u==="left"&&(h=`${r.floating.width+l}px`,m=i?c:`${d}px`),{data:{x:h,y:m}}}});function W6(e){const[t,n="center"]=e.split("-");return[t,n]}var JA=F6,q6=B6,V6=H6,K6=U6,eE="Portal",X6=k.forwardRef((e,t)=>{var s;const{container:n,...r}=e,[a,o]=k.useState(!1);jt(()=>o(!0),[]);const i=n||a&&((s=globalThis==null?void 0:globalThis.document)==null?void 0:s.body);return i?oC.createPortal(b.jsx(Ee.div,{...r,ref:t}),i):null});X6.displayName=eE;var tE=h5[" useInsertionEffect ".trim().toString()]||jt;function gp({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[a,o,i]=nE({defaultProp:t,onChange:n}),s=e!==void 0,l=s?e:a;{const p=k.useRef(e!==void 0);k.useEffect(()=>{const c=p.current;c!==s&&console.warn(`${r} is changing from ${c?"controlled":"uncontrolled"} to ${s?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),p.current=s},[s,r])}const u=k.useCallback(p=>{var c;if(s){const f=rE(p)?p(e):p;f!==e&&((c=i.current)==null||c.call(i,f))}else o(p)},[s,e,o,i]);return[l,u]}function nE({defaultProp:e,onChange:t}){const[n,r]=k.useState(e),a=k.useRef(n),o=k.useRef(t);return tE(()=>{o.current=t},[t]),k.useEffect(()=>{var i;a.current!==n&&((i=o.current)==null||i.call(o,n),a.current=n)},[n,a]),[n,r,o]}function rE(e){return typeof e=="function"}function aE(e){const t=k.useRef({value:e,previous:e});return k.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var Y6=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),oE="VisuallyHidden",Q6=k.forwardRef((e,t)=>b.jsx(Ee.span,{...e,ref:t,style:{...Y6,...e.style}}));Q6.displayName=oE;var iE=Q6,sE=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Do=new WeakMap,ic=new WeakMap,sc={},Om=0,Z6=function(e){return e&&(e.host||Z6(e.parentNode))},lE=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=Z6(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},uE=function(e,t,n,r){var a=lE(t,Array.isArray(e)?e:[e]);sc[n]||(sc[n]=new WeakMap);var o=sc[n],i=[],s=new Set,l=new Set(a),u=function(c){!c||s.has(c)||(s.add(c),u(c.parentNode))};a.forEach(u);var p=function(c){!c||l.has(c)||Array.prototype.forEach.call(c.children,function(f){if(s.has(f))p(f);else try{var d=f.getAttribute(r),h=d!==null&&d!=="false",m=(Do.get(f)||0)+1,g=(o.get(f)||0)+1;Do.set(f,m),o.set(f,g),i.push(f),m===1&&h&&ic.set(f,!0),g===1&&f.setAttribute(n,"true"),h||f.setAttribute(r,"true")}catch(v){console.error("aria-hidden: cannot operate on ",f,v)}})};return p(t),s.clear(),Om++,function(){i.forEach(function(c){var f=Do.get(c)-1,d=o.get(c)-1;Do.set(c,f),o.set(c,d),f||(ic.has(c)||c.removeAttribute(r),ic.delete(c)),d||c.removeAttribute(n)}),Om--,Om||(Do=new WeakMap,Do=new WeakMap,ic=new WeakMap,sc={})}},cE=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),a=sE(e);return a?(r.push.apply(r,Array.from(a.querySelectorAll("[aria-live], script"))),uE(r,a,n,"aria-hidden")):function(){return null}},rr=function(){return rr=Object.assign||function(t){for(var n,r=1,a=arguments.length;r<a;r++){n=arguments[r];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},rr.apply(this,arguments)};function J6(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n}function pE(e,t,n){if(n||arguments.length===2)for(var r=0,a=t.length,o;r<a;r++)(o||!(r in t))&&(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))}var Fc="right-scroll-bar-position",zc="width-before-scroll-bar",fE="with-scroll-bars-hidden",dE="--removed-body-scroll-bar-size";function km(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function mE(e,t){var n=k.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var a=n.value;a!==r&&(n.value=r,n.callback(r,a))}}}})[0];return n.callback=t,n.facade}var hE=typeof window<"u"?k.useLayoutEffect:k.useEffect,zx=new WeakMap;function vE(e,t){var n=mE(null,function(r){return e.forEach(function(a){return km(a,r)})});return hE(function(){var r=zx.get(n);if(r){var a=new Set(r),o=new Set(e),i=n.current;a.forEach(function(s){o.has(s)||km(s,null)}),o.forEach(function(s){a.has(s)||km(s,i)})}zx.set(n,e)},[e]),n}function yE(e){return e}function gE(e,t){t===void 0&&(t=yE);var n=[],r=!1,a={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(o){var i=t(o,r);return n.push(i),function(){n=n.filter(function(s){return s!==i})}},assignSyncMedium:function(o){for(r=!0;n.length;){var i=n;n=[],i.forEach(o)}n={push:function(s){return o(s)},filter:function(){return n}}},assignMedium:function(o){r=!0;var i=[];if(n.length){var s=n;n=[],s.forEach(o),i=n}var l=function(){var p=i;i=[],p.forEach(o)},u=function(){return Promise.resolve().then(l)};u(),n={push:function(p){i.push(p),u()},filter:function(p){return i=i.filter(p),n}}}};return a}function xE(e){e===void 0&&(e={});var t=gE(null);return t.options=rr({async:!0,ssr:!1},e),t}var e4=function(e){var t=e.sideCar,n=J6(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return k.createElement(r,rr({},n))};e4.isSideCarExport=!0;function wE(e,t){return e.useMedium(t),e4}var t4=xE(),_m=function(){},Wf=k.forwardRef(function(e,t){var n=k.useRef(null),r=k.useState({onScrollCapture:_m,onWheelCapture:_m,onTouchMoveCapture:_m}),a=r[0],o=r[1],i=e.forwardProps,s=e.children,l=e.className,u=e.removeScrollBar,p=e.enabled,c=e.shards,f=e.sideCar,d=e.noRelative,h=e.noIsolation,m=e.inert,g=e.allowPinchZoom,v=e.as,y=v===void 0?"div":v,x=e.gapMode,P=J6(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),w=f,S=vE([n,t]),O=rr(rr({},P),a);return k.createElement(k.Fragment,null,p&&k.createElement(w,{sideCar:t4,removeScrollBar:u,shards:c,noRelative:d,noIsolation:h,inert:m,setCallbacks:o,allowPinchZoom:!!g,lockRef:n,gapMode:x}),i?k.cloneElement(k.Children.only(s),rr(rr({},O),{ref:S})):k.createElement(y,rr({},O,{className:l,ref:S}),s))});Wf.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};Wf.classNames={fullWidth:zc,zeroRight:Fc};var bE=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function PE(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=bE();return t&&e.setAttribute("nonce",t),e}function SE(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function OE(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var kE=function(){var e=0,t=null;return{add:function(n){e==0&&(t=PE())&&(SE(t,n),OE(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},_E=function(){var e=kE();return function(t,n){k.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},n4=function(){var e=_E(),t=function(n){var r=n.styles,a=n.dynamic;return e(r,a),null};return t},CE={left:0,top:0,right:0,gap:0},Cm=function(e){return parseInt(e||"",10)||0},AE=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],a=t[e==="padding"?"paddingRight":"marginRight"];return[Cm(n),Cm(r),Cm(a)]},EE=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return CE;var t=AE(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},TE=n4(),fi="data-scroll-locked",jE=function(e,t,n,r){var a=e.left,o=e.top,i=e.right,s=e.gap;return n===void 0&&(n="margin"),`
+  .`.concat(fE,` {
    overflow: hidden `).concat(r,`;
    padding-right: `).concat(s,"px ").concat(r,`;
   }
-  body[`).concat(pi,`] {
+  body[`).concat(fi,`] {
     overflow: hidden `).concat(r,`;
     overscroll-behavior: contain;
     `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&`
@@ -71,138 +71,138 @@ Error generating stack: `+o.message+`
     margin-right: 0 `).concat(r,`;
   }
   
-  body[`).concat(pi,`] {
-    `).concat(JC,": ").concat(s,`px;
+  body[`).concat(fi,`] {
+    `).concat(dE,": ").concat(s,`px;
   }
-`)},Fx=function(){var e=parseInt(document.body.getAttribute(pi)||"0",10);return isFinite(e)?e:0},gE=function(){k.useEffect(function(){return document.body.setAttribute(pi,(Fx()+1).toString()),function(){var e=Fx()-1;e<=0?document.body.removeAttribute(pi):document.body.setAttribute(pi,e.toString())}},[])},xE=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,a=r===void 0?"margin":r;gE();var o=k.useMemo(function(){return hE(a)},[a]);return k.createElement(vE,{styles:yE(o,!t,a,n?"":"!important")})},tv=!1;if(typeof window<"u")try{var lc=Object.defineProperty({},"passive",{get:function(){return tv=!0,!0}});window.addEventListener("test",lc,lc),window.removeEventListener("test",lc,lc)}catch{tv=!1}var Lo=tv?{passive:!1}:!1,wE=function(e){return e.tagName==="TEXTAREA"},e4=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!wE(e)&&n[t]==="visible")},bE=function(e){return e4(e,"overflowY")},PE=function(e){return e4(e,"overflowX")},zx=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var a=t4(e,r);if(a){var o=n4(e,r),i=o[1],s=o[2];if(i>s)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},SE=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},OE=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},t4=function(e,t){return e==="v"?bE(t):PE(t)},n4=function(e,t){return e==="v"?SE(t):OE(t)},kE=function(e,t){return e==="h"&&t==="rtl"?-1:1},_E=function(e,t,n,r,a){var o=kE(e,window.getComputedStyle(t).direction),i=o*r,s=n.target,l=t.contains(s),u=!1,f=i>0,c=0,p=0;do{if(!s)break;var d=n4(e,s),h=d[0],m=d[1],g=d[2],v=m-g-o*h;(h||v)&&t4(e,s)&&(c+=v,p+=h);var y=s.parentNode;s=y&&y.nodeType===Node.DOCUMENT_FRAGMENT_NODE?y.host:y}while(!l&&s!==document.body||l&&(t.contains(s)||t===s));return(f&&Math.abs(c)<1||!f&&Math.abs(p)<1)&&(u=!0),u},uc=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Bx=function(e){return[e.deltaX,e.deltaY]},Hx=function(e){return e&&"current"in e?e.current:e},AE=function(e,t){return e[0]===t[0]&&e[1]===t[1]},CE=function(e){return`
+`)},Bx=function(){var e=parseInt(document.body.getAttribute(fi)||"0",10);return isFinite(e)?e:0},$E=function(){k.useEffect(function(){return document.body.setAttribute(fi,(Bx()+1).toString()),function(){var e=Bx()-1;e<=0?document.body.removeAttribute(fi):document.body.setAttribute(fi,e.toString())}},[])},NE=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,a=r===void 0?"margin":r;$E();var o=k.useMemo(function(){return EE(a)},[a]);return k.createElement(TE,{styles:jE(o,!t,a,n?"":"!important")})},t0=!1;if(typeof window<"u")try{var lc=Object.defineProperty({},"passive",{get:function(){return t0=!0,!0}});window.addEventListener("test",lc,lc),window.removeEventListener("test",lc,lc)}catch{t0=!1}var Lo=t0?{passive:!1}:!1,ME=function(e){return e.tagName==="TEXTAREA"},r4=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!ME(e)&&n[t]==="visible")},RE=function(e){return r4(e,"overflowY")},IE=function(e){return r4(e,"overflowX")},Hx=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var a=a4(e,r);if(a){var o=o4(e,r),i=o[1],s=o[2];if(i>s)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},DE=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},LE=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},a4=function(e,t){return e==="v"?RE(t):IE(t)},o4=function(e,t){return e==="v"?DE(t):LE(t)},FE=function(e,t){return e==="h"&&t==="rtl"?-1:1},zE=function(e,t,n,r,a){var o=FE(e,window.getComputedStyle(t).direction),i=o*r,s=n.target,l=t.contains(s),u=!1,p=i>0,c=0,f=0;do{if(!s)break;var d=o4(e,s),h=d[0],m=d[1],g=d[2],v=m-g-o*h;(h||v)&&a4(e,s)&&(c+=v,f+=h);var y=s.parentNode;s=y&&y.nodeType===Node.DOCUMENT_FRAGMENT_NODE?y.host:y}while(!l&&s!==document.body||l&&(t.contains(s)||t===s));return(p&&Math.abs(c)<1||!p&&Math.abs(f)<1)&&(u=!0),u},uc=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Gx=function(e){return[e.deltaX,e.deltaY]},Ux=function(e){return e&&"current"in e?e.current:e},BE=function(e,t){return e[0]===t[0]&&e[1]===t[1]},HE=function(e){return`
   .block-interactivity-`.concat(e,` {pointer-events: none;}
   .allow-interactivity-`).concat(e,` {pointer-events: all;}
-`)},EE=0,Fo=[];function TE(e){var t=k.useRef([]),n=k.useRef([0,0]),r=k.useRef(),a=k.useState(EE++)[0],o=k.useState(J6)[0],i=k.useRef(e);k.useEffect(function(){i.current=e},[e]),k.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(a));var m=QC([e.lockRef.current],(e.shards||[]).map(Hx),!0).filter(Boolean);return m.forEach(function(g){return g.classList.add("allow-interactivity-".concat(a))}),function(){document.body.classList.remove("block-interactivity-".concat(a)),m.forEach(function(g){return g.classList.remove("allow-interactivity-".concat(a))})}}},[e.inert,e.lockRef.current,e.shards]);var s=k.useCallback(function(m,g){if("touches"in m&&m.touches.length===2||m.type==="wheel"&&m.ctrlKey)return!i.current.allowPinchZoom;var v=uc(m),y=n.current,x="deltaX"in m?m.deltaX:y[0]-v[0],P="deltaY"in m?m.deltaY:y[1]-v[1],w,S=m.target,O=Math.abs(x)>Math.abs(P)?"h":"v";if("touches"in m&&O==="h"&&S.type==="range")return!1;var _=zx(O,S);if(!_)return!0;if(_?w=O:(w=O==="v"?"h":"v",_=zx(O,S)),!_)return!1;if(!r.current&&"changedTouches"in m&&(x||P)&&(r.current=w),!w)return!0;var A=r.current||w;return _E(A,g,m,A==="h"?x:P)},[]),l=k.useCallback(function(m){var g=m;if(!(!Fo.length||Fo[Fo.length-1]!==o)){var v="deltaY"in g?Bx(g):uc(g),y=t.current.filter(function(w){return w.name===g.type&&(w.target===g.target||g.target===w.shadowParent)&&AE(w.delta,v)})[0];if(y&&y.should){g.cancelable&&g.preventDefault();return}if(!y){var x=(i.current.shards||[]).map(Hx).filter(Boolean).filter(function(w){return w.contains(g.target)}),P=x.length>0?s(g,x[0]):!i.current.noIsolation;P&&g.cancelable&&g.preventDefault()}}},[]),u=k.useCallback(function(m,g,v,y){var x={name:m,delta:g,target:v,should:y,shadowParent:jE(v)};t.current.push(x),setTimeout(function(){t.current=t.current.filter(function(P){return P!==x})},1)},[]),f=k.useCallback(function(m){n.current=uc(m),r.current=void 0},[]),c=k.useCallback(function(m){u(m.type,Bx(m),m.target,s(m,e.lockRef.current))},[]),p=k.useCallback(function(m){u(m.type,uc(m),m.target,s(m,e.lockRef.current))},[]);k.useEffect(function(){return Fo.push(o),e.setCallbacks({onScrollCapture:c,onWheelCapture:c,onTouchMoveCapture:p}),document.addEventListener("wheel",l,Lo),document.addEventListener("touchmove",l,Lo),document.addEventListener("touchstart",f,Lo),function(){Fo=Fo.filter(function(m){return m!==o}),document.removeEventListener("wheel",l,Lo),document.removeEventListener("touchmove",l,Lo),document.removeEventListener("touchstart",f,Lo)}},[]);var d=e.removeScrollBar,h=e.inert;return k.createElement(k.Fragment,null,h?k.createElement(o,{styles:CE(a)}):null,d?k.createElement(xE,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function jE(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const $E=iE(Z6,TE);var r4=k.forwardRef(function(e,t){return k.createElement(Wp,rr({},e,{ref:t,sideCar:$E}))});r4.classNames=Wp.classNames;var NE=[" ","Enter","ArrowUp","ArrowDown"],ME=[" ","Enter"],bo="Select",[qp,Vp,RE]=g6(bo),[hs,pse]=ps(bo,[RE,Up]),Kp=Up(),[IE,Na]=hs(bo),[DE,LE]=hs(bo),a4=e=>{const{__scopeSelect:t,children:n,open:r,defaultOpen:a,onOpenChange:o,value:i,defaultValue:s,onValueChange:l,dir:u,name:f,autoComplete:c,disabled:p,required:d,form:h}=e,m=Kp(t),[g,v]=k.useState(null),[y,x]=k.useState(null),[P,w]=k.useState(!1),S=R0(u),[O,_]=xf({prop:r,defaultProp:a??!1,onChange:o,caller:bo}),[A,j]=xf({prop:i,defaultProp:s,onChange:l,caller:bo}),E=k.useRef(null),T=g?h||!!g.closest("form"):!0,[N,M]=k.useState(new Set),I=Array.from(N).map(R=>R.props.value).join(";");return b.jsx(FC,{...m,children:b.jsxs(IE,{required:d,scope:t,trigger:g,onTriggerChange:v,valueNode:y,onValueNodeChange:x,valueNodeHasChildren:P,onValueNodeHasChildrenChange:w,contentId:Tu(),value:A,onValueChange:j,open:O,onOpenChange:_,dir:S,triggerPointerDownPosRef:E,disabled:p,children:[b.jsx(qp.Provider,{scope:t,children:b.jsx(DE,{scope:e.__scopeSelect,onNativeOptionAdd:k.useCallback(R=>{M(L=>new Set(L).add(R))},[]),onNativeOptionRemove:k.useCallback(R=>{M(L=>{const $=new Set(L);return $.delete(R),$})},[]),children:n})}),T?b.jsxs(C4,{"aria-hidden":!0,required:d,tabIndex:-1,name:f,autoComplete:c,value:A,onChange:R=>j(R.target.value),disabled:p,form:h,children:[A===void 0?b.jsx("option",{value:""}):null,Array.from(N)]},I):null]})})};a4.displayName=bo;var o4="SelectTrigger",i4=k.forwardRef((e,t)=>{const{__scopeSelect:n,disabled:r=!1,...a}=e,o=Kp(n),i=Na(o4,n),s=i.disabled||r,l=Ye(t,i.onTriggerChange),u=Vp(n),f=k.useRef("touch"),[c,p,d]=T4(m=>{const g=u().filter(x=>!x.disabled),v=g.find(x=>x.value===i.value),y=j4(g,m,v);y!==void 0&&i.onValueChange(y.value)}),h=m=>{s||(i.onOpenChange(!0),d()),m&&(i.triggerPointerDownPosRef.current={x:Math.round(m.pageX),y:Math.round(m.pageY)})};return b.jsx(G6,{asChild:!0,...o,children:b.jsx(Ee.button,{type:"button",role:"combobox","aria-controls":i.contentId,"aria-expanded":i.open,"aria-required":i.required,"aria-autocomplete":"none",dir:i.dir,"data-state":i.open?"open":"closed",disabled:s,"data-disabled":s?"":void 0,"data-placeholder":E4(i.value)?"":void 0,...a,ref:l,onClick:pe(a.onClick,m=>{m.currentTarget.focus(),f.current!=="mouse"&&h(m)}),onPointerDown:pe(a.onPointerDown,m=>{f.current=m.pointerType;const g=m.target;g.hasPointerCapture(m.pointerId)&&g.releasePointerCapture(m.pointerId),m.button===0&&m.ctrlKey===!1&&m.pointerType==="mouse"&&(h(m),m.preventDefault())}),onKeyDown:pe(a.onKeyDown,m=>{const g=c.current!=="";!(m.ctrlKey||m.altKey||m.metaKey)&&m.key.length===1&&p(m.key),!(g&&m.key===" ")&&NE.includes(m.key)&&(h(),m.preventDefault())})})})});i4.displayName=o4;var s4="SelectValue",l4=k.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:a,children:o,placeholder:i="",...s}=e,l=Na(s4,n),{onValueNodeHasChildrenChange:u}=l,f=o!==void 0,c=Ye(t,l.onValueNodeChange);return jt(()=>{u(f)},[u,f]),b.jsx(Ee.span,{...s,ref:c,style:{pointerEvents:"none"},children:E4(l.value)?b.jsx(b.Fragment,{children:i}):o})});l4.displayName=s4;var FE="SelectIcon",u4=k.forwardRef((e,t)=>{const{__scopeSelect:n,children:r,...a}=e;return b.jsx(Ee.span,{"aria-hidden":!0,...a,ref:t,children:r||"▼"})});u4.displayName=FE;var zE="SelectPortal",c4=e=>b.jsx(q6,{asChild:!0,...e});c4.displayName=zE;var Po="SelectContent",f4=k.forwardRef((e,t)=>{const n=Na(Po,e.__scopeSelect),[r,a]=k.useState();if(jt(()=>{a(new DocumentFragment)},[]),!n.open){const o=r;return o?fs.createPortal(b.jsx(p4,{scope:e.__scopeSelect,children:b.jsx(qp.Slot,{scope:e.__scopeSelect,children:b.jsx("div",{children:e.children})})}),o):null}return b.jsx(d4,{...e,ref:t})});f4.displayName=Po;var An=10,[p4,Ma]=hs(Po),BE="SelectContentImpl",HE=Il("SelectContent.RemoveScroll"),d4=k.forwardRef((e,t)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:a,onEscapeKeyDown:o,onPointerDownOutside:i,side:s,sideOffset:l,align:u,alignOffset:f,arrowPadding:c,collisionBoundary:p,collisionPadding:d,sticky:h,hideWhenDetached:m,avoidCollisions:g,...v}=e,y=Na(Po,n),[x,P]=k.useState(null),[w,S]=k.useState(null),O=Ye(t,J=>P(J)),[_,A]=k.useState(null),[j,E]=k.useState(null),T=Vp(n),[N,M]=k.useState(!1),I=k.useRef(!1);k.useEffect(()=>{if(x)return YC(x)},[x]),bA();const R=k.useCallback(J=>{const[le,...q]=T().map(F=>F.ref.current),[K]=q.slice(-1),X=document.activeElement;for(const F of J)if(F===X||(F==null||F.scrollIntoView({block:"nearest"}),F===le&&w&&(w.scrollTop=0),F===K&&w&&(w.scrollTop=w.scrollHeight),F==null||F.focus(),document.activeElement!==X))return},[T,w]),L=k.useCallback(()=>R([_,x]),[R,_,x]);k.useEffect(()=>{N&&L()},[N,L]);const{onOpenChange:$,triggerPointerDownPosRef:D}=y;k.useEffect(()=>{if(x){let J={x:0,y:0};const le=K=>{var X,F;J={x:Math.abs(Math.round(K.pageX)-(((X=D.current)==null?void 0:X.x)??0)),y:Math.abs(Math.round(K.pageY)-(((F=D.current)==null?void 0:F.y)??0))}},q=K=>{J.x<=10&&J.y<=10?K.preventDefault():x.contains(K.target)||$(!1),document.removeEventListener("pointermove",le),D.current=null};return D.current!==null&&(document.addEventListener("pointermove",le),document.addEventListener("pointerup",q,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",le),document.removeEventListener("pointerup",q,{capture:!0})}}},[x,$,D]),k.useEffect(()=>{const J=()=>$(!1);return window.addEventListener("blur",J),window.addEventListener("resize",J),()=>{window.removeEventListener("blur",J),window.removeEventListener("resize",J)}},[$]);const[H,W]=T4(J=>{const le=T().filter(X=>!X.disabled),q=le.find(X=>X.ref.current===document.activeElement),K=j4(le,J,q);K&&setTimeout(()=>K.ref.current.focus())}),G=k.useCallback((J,le,q)=>{const K=!I.current&&!q;(y.value!==void 0&&y.value===le||K)&&(A(J),K&&(I.current=!0))},[y.value]),Z=k.useCallback(()=>x==null?void 0:x.focus(),[x]),ie=k.useCallback((J,le,q)=>{const K=!I.current&&!q;(y.value!==void 0&&y.value===le||K)&&E(J)},[y.value]),ve=r==="popper"?nv:m4,Pe=ve===nv?{side:s,sideOffset:l,align:u,alignOffset:f,arrowPadding:c,collisionBoundary:p,collisionPadding:d,sticky:h,hideWhenDetached:m,avoidCollisions:g}:{};return b.jsx(p4,{scope:n,content:x,viewport:w,onViewportChange:S,itemRefCallback:G,selectedItem:_,onItemLeave:Z,itemTextRefCallback:ie,focusSelectedItem:L,selectedItemText:j,position:r,isPositioned:N,searchRef:H,children:b.jsx(r4,{as:HE,allowPinchZoom:!0,children:b.jsx(b6,{asChild:!0,trapped:y.open,onMountAutoFocus:J=>{J.preventDefault()},onUnmountAutoFocus:pe(a,J=>{var le;(le=y.trigger)==null||le.focus({preventScroll:!0}),J.preventDefault()}),children:b.jsx(I0,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:i,onFocusOutside:J=>J.preventDefault(),onDismiss:()=>y.onOpenChange(!1),children:b.jsx(ve,{role:"listbox",id:y.contentId,"data-state":y.open?"open":"closed",dir:y.dir,onContextMenu:J=>J.preventDefault(),...v,...Pe,onPlaced:()=>M(!0),ref:O,style:{display:"flex",flexDirection:"column",outline:"none",...v.style},onKeyDown:pe(v.onKeyDown,J=>{const le=J.ctrlKey||J.altKey||J.metaKey;if(J.key==="Tab"&&J.preventDefault(),!le&&J.key.length===1&&W(J.key),["ArrowUp","ArrowDown","Home","End"].includes(J.key)){let K=T().filter(X=>!X.disabled).map(X=>X.ref.current);if(["ArrowUp","End"].includes(J.key)&&(K=K.slice().reverse()),["ArrowUp","ArrowDown"].includes(J.key)){const X=J.target,F=K.indexOf(X);K=K.slice(F+1)}setTimeout(()=>R(K)),J.preventDefault()}})})})})})})});d4.displayName=BE;var GE="SelectItemAlignedPosition",m4=k.forwardRef((e,t)=>{const{__scopeSelect:n,onPlaced:r,...a}=e,o=Na(Po,n),i=Ma(Po,n),[s,l]=k.useState(null),[u,f]=k.useState(null),c=Ye(t,O=>f(O)),p=Vp(n),d=k.useRef(!1),h=k.useRef(!0),{viewport:m,selectedItem:g,selectedItemText:v,focusSelectedItem:y}=i,x=k.useCallback(()=>{if(o.trigger&&o.valueNode&&s&&u&&m&&g&&v){const O=o.trigger.getBoundingClientRect(),_=u.getBoundingClientRect(),A=o.valueNode.getBoundingClientRect(),j=v.getBoundingClientRect();if(o.dir!=="rtl"){const X=j.left-_.left,F=A.left-X,fe=O.left-F,ne=O.width+fe,Ne=Math.max(ne,_.width),Me=window.innerWidth-An,Ze=bx(F,[An,Math.max(An,Me-Ne)]);s.style.minWidth=ne+"px",s.style.left=Ze+"px"}else{const X=_.right-j.right,F=window.innerWidth-A.right-X,fe=window.innerWidth-O.right-F,ne=O.width+fe,Ne=Math.max(ne,_.width),Me=window.innerWidth-An,Ze=bx(F,[An,Math.max(An,Me-Ne)]);s.style.minWidth=ne+"px",s.style.right=Ze+"px"}const E=p(),T=window.innerHeight-An*2,N=m.scrollHeight,M=window.getComputedStyle(u),I=parseInt(M.borderTopWidth,10),R=parseInt(M.paddingTop,10),L=parseInt(M.borderBottomWidth,10),$=parseInt(M.paddingBottom,10),D=I+R+N+$+L,H=Math.min(g.offsetHeight*5,D),W=window.getComputedStyle(m),G=parseInt(W.paddingTop,10),Z=parseInt(W.paddingBottom,10),ie=O.top+O.height/2-An,ve=T-ie,Pe=g.offsetHeight/2,J=g.offsetTop+Pe,le=I+R+J,q=D-le;if(le<=ie){const X=E.length>0&&g===E[E.length-1].ref.current;s.style.bottom="0px";const F=u.clientHeight-m.offsetTop-m.offsetHeight,fe=Math.max(ve,Pe+(X?Z:0)+F+L),ne=le+fe;s.style.height=ne+"px"}else{const X=E.length>0&&g===E[0].ref.current;s.style.top="0px";const fe=Math.max(ie,I+m.offsetTop+(X?G:0)+Pe)+q;s.style.height=fe+"px",m.scrollTop=le-ie+m.offsetTop}s.style.margin=`${An}px 0`,s.style.minHeight=H+"px",s.style.maxHeight=T+"px",r==null||r(),requestAnimationFrame(()=>d.current=!0)}},[p,o.trigger,o.valueNode,s,u,m,g,v,o.dir,r]);jt(()=>x(),[x]);const[P,w]=k.useState();jt(()=>{u&&w(window.getComputedStyle(u).zIndex)},[u]);const S=k.useCallback(O=>{O&&h.current===!0&&(x(),y==null||y(),h.current=!1)},[x,y]);return b.jsx(WE,{scope:n,contentWrapper:s,shouldExpandOnScrollRef:d,onScrollButtonChange:S,children:b.jsx("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:P},children:b.jsx(Ee.div,{...a,ref:c,style:{boxSizing:"border-box",maxHeight:"100%",...a.style}})})})});m4.displayName=GE;var UE="SelectPopperPosition",nv=k.forwardRef((e,t)=>{const{__scopeSelect:n,align:r="start",collisionPadding:a=An,...o}=e,i=Kp(n);return b.jsx(U6,{...i,...o,ref:t,align:r,collisionPadding:a,style:{boxSizing:"border-box",...o.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});nv.displayName=UE;var[WE,q0]=hs(Po,{}),rv="SelectViewport",h4=k.forwardRef((e,t)=>{const{__scopeSelect:n,nonce:r,...a}=e,o=Ma(rv,n),i=q0(rv,n),s=Ye(t,o.onViewportChange),l=k.useRef(0);return b.jsxs(b.Fragment,{children:[b.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),b.jsx(qp.Slot,{scope:n,children:b.jsx(Ee.div,{"data-radix-select-viewport":"",role:"presentation",...a,ref:s,style:{position:"relative",flex:1,overflow:"hidden auto",...a.style},onScroll:pe(a.onScroll,u=>{const f=u.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:p}=i;if(p!=null&&p.current&&c){const d=Math.abs(l.current-f.scrollTop);if(d>0){const h=window.innerHeight-An*2,m=parseFloat(c.style.minHeight),g=parseFloat(c.style.height),v=Math.max(m,g);if(v<h){const y=v+d,x=Math.min(h,y),P=y-x;c.style.height=x+"px",c.style.bottom==="0px"&&(f.scrollTop=P>0?P:0,c.style.justifyContent="flex-end")}}}l.current=f.scrollTop})})})]})});h4.displayName=rv;var v4="SelectGroup",[qE,VE]=hs(v4),KE=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=Tu();return b.jsx(qE,{scope:n,id:a,children:b.jsx(Ee.div,{role:"group","aria-labelledby":a,...r,ref:t})})});KE.displayName=v4;var y4="SelectLabel",g4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=VE(y4,n);return b.jsx(Ee.div,{id:a.id,...r,ref:t})});g4.displayName=y4;var wf="SelectItem",[XE,x4]=hs(wf),w4=k.forwardRef((e,t)=>{const{__scopeSelect:n,value:r,disabled:a=!1,textValue:o,...i}=e,s=Na(wf,n),l=Ma(wf,n),u=s.value===r,[f,c]=k.useState(o??""),[p,d]=k.useState(!1),h=Ye(t,y=>{var x;return(x=l.itemRefCallback)==null?void 0:x.call(l,y,r,a)}),m=Tu(),g=k.useRef("touch"),v=()=>{a||(s.onValueChange(r),s.onOpenChange(!1))};if(r==="")throw new Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return b.jsx(XE,{scope:n,value:r,disabled:a,textId:m,isSelected:u,onItemTextChange:k.useCallback(y=>{c(x=>x||((y==null?void 0:y.textContent)??"").trim())},[]),children:b.jsx(qp.ItemSlot,{scope:n,value:r,disabled:a,textValue:f,children:b.jsx(Ee.div,{role:"option","aria-labelledby":m,"data-highlighted":p?"":void 0,"aria-selected":u&&p,"data-state":u?"checked":"unchecked","aria-disabled":a||void 0,"data-disabled":a?"":void 0,tabIndex:a?void 0:-1,...i,ref:h,onFocus:pe(i.onFocus,()=>d(!0)),onBlur:pe(i.onBlur,()=>d(!1)),onClick:pe(i.onClick,()=>{g.current!=="mouse"&&v()}),onPointerUp:pe(i.onPointerUp,()=>{g.current==="mouse"&&v()}),onPointerDown:pe(i.onPointerDown,y=>{g.current=y.pointerType}),onPointerMove:pe(i.onPointerMove,y=>{var x;g.current=y.pointerType,a?(x=l.onItemLeave)==null||x.call(l):g.current==="mouse"&&y.currentTarget.focus({preventScroll:!0})}),onPointerLeave:pe(i.onPointerLeave,y=>{var x;y.currentTarget===document.activeElement&&((x=l.onItemLeave)==null||x.call(l))}),onKeyDown:pe(i.onKeyDown,y=>{var P;((P=l.searchRef)==null?void 0:P.current)!==""&&y.key===" "||(ME.includes(y.key)&&v(),y.key===" "&&y.preventDefault())})})})})});w4.displayName=wf;var tl="SelectItemText",b4=k.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:a,...o}=e,i=Na(tl,n),s=Ma(tl,n),l=x4(tl,n),u=LE(tl,n),[f,c]=k.useState(null),p=Ye(t,v=>c(v),l.onItemTextChange,v=>{var y;return(y=s.itemTextRefCallback)==null?void 0:y.call(s,v,l.value,l.disabled)}),d=f==null?void 0:f.textContent,h=k.useMemo(()=>b.jsx("option",{value:l.value,disabled:l.disabled,children:d},l.value),[l.disabled,l.value,d]),{onNativeOptionAdd:m,onNativeOptionRemove:g}=u;return jt(()=>(m(h),()=>g(h)),[m,g,h]),b.jsxs(b.Fragment,{children:[b.jsx(Ee.span,{id:l.textId,...o,ref:p}),l.isSelected&&i.valueNode&&!i.valueNodeHasChildren?fs.createPortal(o.children,i.valueNode):null]})});b4.displayName=tl;var P4="SelectItemIndicator",S4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return x4(P4,n).isSelected?b.jsx(Ee.span,{"aria-hidden":!0,...r,ref:t}):null});S4.displayName=P4;var av="SelectScrollUpButton",O4=k.forwardRef((e,t)=>{const n=Ma(av,e.__scopeSelect),r=q0(av,e.__scopeSelect),[a,o]=k.useState(!1),i=Ye(t,r.onScrollButtonChange);return jt(()=>{if(n.viewport&&n.isPositioned){let s=function(){const u=l.scrollTop>0;o(u)};const l=n.viewport;return s(),l.addEventListener("scroll",s),()=>l.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),a?b.jsx(_4,{...e,ref:i,onAutoScroll:()=>{const{viewport:s,selectedItem:l}=n;s&&l&&(s.scrollTop=s.scrollTop-l.offsetHeight)}}):null});O4.displayName=av;var ov="SelectScrollDownButton",k4=k.forwardRef((e,t)=>{const n=Ma(ov,e.__scopeSelect),r=q0(ov,e.__scopeSelect),[a,o]=k.useState(!1),i=Ye(t,r.onScrollButtonChange);return jt(()=>{if(n.viewport&&n.isPositioned){let s=function(){const u=l.scrollHeight-l.clientHeight,f=Math.ceil(l.scrollTop)<u;o(f)};const l=n.viewport;return s(),l.addEventListener("scroll",s),()=>l.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),a?b.jsx(_4,{...e,ref:i,onAutoScroll:()=>{const{viewport:s,selectedItem:l}=n;s&&l&&(s.scrollTop=s.scrollTop+l.offsetHeight)}}):null});k4.displayName=ov;var _4=k.forwardRef((e,t)=>{const{__scopeSelect:n,onAutoScroll:r,...a}=e,o=Ma("SelectScrollButton",n),i=k.useRef(null),s=Vp(n),l=k.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null)},[]);return k.useEffect(()=>()=>l(),[l]),jt(()=>{var f;const u=s().find(c=>c.ref.current===document.activeElement);(f=u==null?void 0:u.ref.current)==null||f.scrollIntoView({block:"nearest"})},[s]),b.jsx(Ee.div,{"aria-hidden":!0,...a,ref:t,style:{flexShrink:0,...a.style},onPointerDown:pe(a.onPointerDown,()=>{i.current===null&&(i.current=window.setInterval(r,50))}),onPointerMove:pe(a.onPointerMove,()=>{var u;(u=o.onItemLeave)==null||u.call(o),i.current===null&&(i.current=window.setInterval(r,50))}),onPointerLeave:pe(a.onPointerLeave,()=>{l()})})}),YE="SelectSeparator",A4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return b.jsx(Ee.div,{"aria-hidden":!0,...r,ref:t})});A4.displayName=YE;var iv="SelectArrow",QE=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=Kp(n),o=Na(iv,n),i=Ma(iv,n);return o.open&&i.position==="popper"?b.jsx(W6,{...a,...r,ref:t}):null});QE.displayName=iv;var ZE="SelectBubbleInput",C4=k.forwardRef(({__scopeSelect:e,value:t,...n},r)=>{const a=k.useRef(null),o=Ye(r,a),i=UC(t);return k.useEffect(()=>{const s=a.current;if(!s)return;const l=window.HTMLSelectElement.prototype,f=Object.getOwnPropertyDescriptor(l,"value").set;if(i!==t&&f){const c=new Event("change",{bubbles:!0});f.call(s,t),s.dispatchEvent(c)}},[i,t]),b.jsx(Ee.select,{...n,style:{...V6,...n.style},ref:o,defaultValue:t})});C4.displayName=ZE;function E4(e){return e===""||e===void 0}function T4(e){const t=Aa(e),n=k.useRef(""),r=k.useRef(0),a=k.useCallback(i=>{const s=n.current+i;t(s),function l(u){n.current=u,window.clearTimeout(r.current),u!==""&&(r.current=window.setTimeout(()=>l(""),1e3))}(s)},[t]),o=k.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return k.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,a,o]}function j4(e,t,n){const a=t.length>1&&Array.from(t).every(u=>u===t[0])?t[0]:t,o=n?e.indexOf(n):-1;let i=JE(e,Math.max(o,0));a.length===1&&(i=i.filter(u=>u!==n));const l=i.find(u=>u.textValue.toLowerCase().startsWith(a.toLowerCase()));return l!==n?l:void 0}function JE(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var eT=a4,$4=i4,tT=l4,nT=u4,rT=c4,N4=f4,aT=h4,M4=g4,R4=w4,oT=b4,iT=S4,I4=O4,D4=k4,L4=A4;/**
+`)},GE=0,Fo=[];function UE(e){var t=k.useRef([]),n=k.useRef([0,0]),r=k.useRef(),a=k.useState(GE++)[0],o=k.useState(n4)[0],i=k.useRef(e);k.useEffect(function(){i.current=e},[e]),k.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(a));var m=pE([e.lockRef.current],(e.shards||[]).map(Ux),!0).filter(Boolean);return m.forEach(function(g){return g.classList.add("allow-interactivity-".concat(a))}),function(){document.body.classList.remove("block-interactivity-".concat(a)),m.forEach(function(g){return g.classList.remove("allow-interactivity-".concat(a))})}}},[e.inert,e.lockRef.current,e.shards]);var s=k.useCallback(function(m,g){if("touches"in m&&m.touches.length===2||m.type==="wheel"&&m.ctrlKey)return!i.current.allowPinchZoom;var v=uc(m),y=n.current,x="deltaX"in m?m.deltaX:y[0]-v[0],P="deltaY"in m?m.deltaY:y[1]-v[1],w,S=m.target,O=Math.abs(x)>Math.abs(P)?"h":"v";if("touches"in m&&O==="h"&&S.type==="range")return!1;var _=Hx(O,S);if(!_)return!0;if(_?w=O:(w=O==="v"?"h":"v",_=Hx(O,S)),!_)return!1;if(!r.current&&"changedTouches"in m&&(x||P)&&(r.current=w),!w)return!0;var C=r.current||w;return zE(C,g,m,C==="h"?x:P)},[]),l=k.useCallback(function(m){var g=m;if(!(!Fo.length||Fo[Fo.length-1]!==o)){var v="deltaY"in g?Gx(g):uc(g),y=t.current.filter(function(w){return w.name===g.type&&(w.target===g.target||g.target===w.shadowParent)&&BE(w.delta,v)})[0];if(y&&y.should){g.cancelable&&g.preventDefault();return}if(!y){var x=(i.current.shards||[]).map(Ux).filter(Boolean).filter(function(w){return w.contains(g.target)}),P=x.length>0?s(g,x[0]):!i.current.noIsolation;P&&g.cancelable&&g.preventDefault()}}},[]),u=k.useCallback(function(m,g,v,y){var x={name:m,delta:g,target:v,should:y,shadowParent:WE(v)};t.current.push(x),setTimeout(function(){t.current=t.current.filter(function(P){return P!==x})},1)},[]),p=k.useCallback(function(m){n.current=uc(m),r.current=void 0},[]),c=k.useCallback(function(m){u(m.type,Gx(m),m.target,s(m,e.lockRef.current))},[]),f=k.useCallback(function(m){u(m.type,uc(m),m.target,s(m,e.lockRef.current))},[]);k.useEffect(function(){return Fo.push(o),e.setCallbacks({onScrollCapture:c,onWheelCapture:c,onTouchMoveCapture:f}),document.addEventListener("wheel",l,Lo),document.addEventListener("touchmove",l,Lo),document.addEventListener("touchstart",p,Lo),function(){Fo=Fo.filter(function(m){return m!==o}),document.removeEventListener("wheel",l,Lo),document.removeEventListener("touchmove",l,Lo),document.removeEventListener("touchstart",p,Lo)}},[]);var d=e.removeScrollBar,h=e.inert;return k.createElement(k.Fragment,null,h?k.createElement(o,{styles:HE(a)}):null,d?k.createElement(NE,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function WE(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const qE=wE(t4,UE);var i4=k.forwardRef(function(e,t){return k.createElement(Wf,rr({},e,{ref:t,sideCar:qE}))});i4.classNames=Wf.classNames;var VE=[" ","Enter","ArrowUp","ArrowDown"],KE=[" ","Enter"],bo="Select",[qf,Vf,XE]=w6(bo),[hs,Cse]=fs(bo,[XE,Uf]),Kf=Uf(),[YE,Na]=hs(bo),[QE,ZE]=hs(bo),s4=e=>{const{__scopeSelect:t,children:n,open:r,defaultOpen:a,onOpenChange:o,value:i,defaultValue:s,onValueChange:l,dir:u,name:p,autoComplete:c,disabled:f,required:d,form:h}=e,m=Kf(t),[g,v]=k.useState(null),[y,x]=k.useState(null),[P,w]=k.useState(!1),S=Ry(u),[O,_]=gp({prop:r,defaultProp:a??!1,onChange:o,caller:bo}),[C,j]=gp({prop:i,defaultProp:s,onChange:l,caller:bo}),E=k.useRef(null),T=g?h||!!g.closest("form"):!0,[N,M]=k.useState(new Set),I=Array.from(N).map(R=>R.props.value).join(";");return b.jsx(JA,{...m,children:b.jsxs(YE,{required:d,scope:t,trigger:g,onTriggerChange:v,valueNode:y,onValueNodeChange:x,valueNodeHasChildren:P,onValueNodeHasChildrenChange:w,contentId:Tu(),value:C,onValueChange:j,open:O,onOpenChange:_,dir:S,triggerPointerDownPosRef:E,disabled:f,children:[b.jsx(qf.Provider,{scope:t,children:b.jsx(QE,{scope:e.__scopeSelect,onNativeOptionAdd:k.useCallback(R=>{M(L=>new Set(L).add(R))},[]),onNativeOptionRemove:k.useCallback(R=>{M(L=>{const $=new Set(L);return $.delete(R),$})},[]),children:n})}),T?b.jsxs(j4,{"aria-hidden":!0,required:d,tabIndex:-1,name:p,autoComplete:c,value:C,onChange:R=>j(R.target.value),disabled:f,form:h,children:[C===void 0?b.jsx("option",{value:""}):null,Array.from(N)]},I):null]})})};s4.displayName=bo;var l4="SelectTrigger",u4=k.forwardRef((e,t)=>{const{__scopeSelect:n,disabled:r=!1,...a}=e,o=Kf(n),i=Na(l4,n),s=i.disabled||r,l=Ye(t,i.onTriggerChange),u=Vf(n),p=k.useRef("touch"),[c,f,d]=N4(m=>{const g=u().filter(x=>!x.disabled),v=g.find(x=>x.value===i.value),y=M4(g,m,v);y!==void 0&&i.onValueChange(y.value)}),h=m=>{s||(i.onOpenChange(!0),d()),m&&(i.triggerPointerDownPosRef.current={x:Math.round(m.pageX),y:Math.round(m.pageY)})};return b.jsx(q6,{asChild:!0,...o,children:b.jsx(Ee.button,{type:"button",role:"combobox","aria-controls":i.contentId,"aria-expanded":i.open,"aria-required":i.required,"aria-autocomplete":"none",dir:i.dir,"data-state":i.open?"open":"closed",disabled:s,"data-disabled":s?"":void 0,"data-placeholder":$4(i.value)?"":void 0,...a,ref:l,onClick:fe(a.onClick,m=>{m.currentTarget.focus(),p.current!=="mouse"&&h(m)}),onPointerDown:fe(a.onPointerDown,m=>{p.current=m.pointerType;const g=m.target;g.hasPointerCapture(m.pointerId)&&g.releasePointerCapture(m.pointerId),m.button===0&&m.ctrlKey===!1&&m.pointerType==="mouse"&&(h(m),m.preventDefault())}),onKeyDown:fe(a.onKeyDown,m=>{const g=c.current!=="";!(m.ctrlKey||m.altKey||m.metaKey)&&m.key.length===1&&f(m.key),!(g&&m.key===" ")&&VE.includes(m.key)&&(h(),m.preventDefault())})})})});u4.displayName=l4;var c4="SelectValue",p4=k.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:a,children:o,placeholder:i="",...s}=e,l=Na(c4,n),{onValueNodeHasChildrenChange:u}=l,p=o!==void 0,c=Ye(t,l.onValueNodeChange);return jt(()=>{u(p)},[u,p]),b.jsx(Ee.span,{...s,ref:c,style:{pointerEvents:"none"},children:$4(l.value)?b.jsx(b.Fragment,{children:i}):o})});p4.displayName=c4;var JE="SelectIcon",f4=k.forwardRef((e,t)=>{const{__scopeSelect:n,children:r,...a}=e;return b.jsx(Ee.span,{"aria-hidden":!0,...a,ref:t,children:r||"▼"})});f4.displayName=JE;var eT="SelectPortal",d4=e=>b.jsx(X6,{asChild:!0,...e});d4.displayName=eT;var Po="SelectContent",m4=k.forwardRef((e,t)=>{const n=Na(Po,e.__scopeSelect),[r,a]=k.useState();if(jt(()=>{a(new DocumentFragment)},[]),!n.open){const o=r;return o?ps.createPortal(b.jsx(h4,{scope:e.__scopeSelect,children:b.jsx(qf.Slot,{scope:e.__scopeSelect,children:b.jsx("div",{children:e.children})})}),o):null}return b.jsx(v4,{...e,ref:t})});m4.displayName=Po;var Cn=10,[h4,Ma]=hs(Po),tT="SelectContentImpl",nT=Il("SelectContent.RemoveScroll"),v4=k.forwardRef((e,t)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:a,onEscapeKeyDown:o,onPointerDownOutside:i,side:s,sideOffset:l,align:u,alignOffset:p,arrowPadding:c,collisionBoundary:f,collisionPadding:d,sticky:h,hideWhenDetached:m,avoidCollisions:g,...v}=e,y=Na(Po,n),[x,P]=k.useState(null),[w,S]=k.useState(null),O=Ye(t,J=>P(J)),[_,C]=k.useState(null),[j,E]=k.useState(null),T=Vf(n),[N,M]=k.useState(!1),I=k.useRef(!1);k.useEffect(()=>{if(x)return cE(x)},[x]),OC();const R=k.useCallback(J=>{const[le,...q]=T().map(F=>F.ref.current),[K]=q.slice(-1),X=document.activeElement;for(const F of J)if(F===X||(F==null||F.scrollIntoView({block:"nearest"}),F===le&&w&&(w.scrollTop=0),F===K&&w&&(w.scrollTop=w.scrollHeight),F==null||F.focus(),document.activeElement!==X))return},[T,w]),L=k.useCallback(()=>R([_,x]),[R,_,x]);k.useEffect(()=>{N&&L()},[N,L]);const{onOpenChange:$,triggerPointerDownPosRef:D}=y;k.useEffect(()=>{if(x){let J={x:0,y:0};const le=K=>{var X,F;J={x:Math.abs(Math.round(K.pageX)-(((X=D.current)==null?void 0:X.x)??0)),y:Math.abs(Math.round(K.pageY)-(((F=D.current)==null?void 0:F.y)??0))}},q=K=>{J.x<=10&&J.y<=10?K.preventDefault():x.contains(K.target)||$(!1),document.removeEventListener("pointermove",le),D.current=null};return D.current!==null&&(document.addEventListener("pointermove",le),document.addEventListener("pointerup",q,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",le),document.removeEventListener("pointerup",q,{capture:!0})}}},[x,$,D]),k.useEffect(()=>{const J=()=>$(!1);return window.addEventListener("blur",J),window.addEventListener("resize",J),()=>{window.removeEventListener("blur",J),window.removeEventListener("resize",J)}},[$]);const[H,W]=N4(J=>{const le=T().filter(X=>!X.disabled),q=le.find(X=>X.ref.current===document.activeElement),K=M4(le,J,q);K&&setTimeout(()=>K.ref.current.focus())}),G=k.useCallback((J,le,q)=>{const K=!I.current&&!q;(y.value!==void 0&&y.value===le||K)&&(C(J),K&&(I.current=!0))},[y.value]),Z=k.useCallback(()=>x==null?void 0:x.focus(),[x]),ie=k.useCallback((J,le,q)=>{const K=!I.current&&!q;(y.value!==void 0&&y.value===le||K)&&E(J)},[y.value]),ve=r==="popper"?n0:y4,Pe=ve===n0?{side:s,sideOffset:l,align:u,alignOffset:p,arrowPadding:c,collisionBoundary:f,collisionPadding:d,sticky:h,hideWhenDetached:m,avoidCollisions:g}:{};return b.jsx(h4,{scope:n,content:x,viewport:w,onViewportChange:S,itemRefCallback:G,selectedItem:_,onItemLeave:Z,itemTextRefCallback:ie,focusSelectedItem:L,selectedItemText:j,position:r,isPositioned:N,searchRef:H,children:b.jsx(i4,{as:nT,allowPinchZoom:!0,children:b.jsx(S6,{asChild:!0,trapped:y.open,onMountAutoFocus:J=>{J.preventDefault()},onUnmountAutoFocus:fe(a,J=>{var le;(le=y.trigger)==null||le.focus({preventScroll:!0}),J.preventDefault()}),children:b.jsx(Iy,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:i,onFocusOutside:J=>J.preventDefault(),onDismiss:()=>y.onOpenChange(!1),children:b.jsx(ve,{role:"listbox",id:y.contentId,"data-state":y.open?"open":"closed",dir:y.dir,onContextMenu:J=>J.preventDefault(),...v,...Pe,onPlaced:()=>M(!0),ref:O,style:{display:"flex",flexDirection:"column",outline:"none",...v.style},onKeyDown:fe(v.onKeyDown,J=>{const le=J.ctrlKey||J.altKey||J.metaKey;if(J.key==="Tab"&&J.preventDefault(),!le&&J.key.length===1&&W(J.key),["ArrowUp","ArrowDown","Home","End"].includes(J.key)){let K=T().filter(X=>!X.disabled).map(X=>X.ref.current);if(["ArrowUp","End"].includes(J.key)&&(K=K.slice().reverse()),["ArrowUp","ArrowDown"].includes(J.key)){const X=J.target,F=K.indexOf(X);K=K.slice(F+1)}setTimeout(()=>R(K)),J.preventDefault()}})})})})})})});v4.displayName=tT;var rT="SelectItemAlignedPosition",y4=k.forwardRef((e,t)=>{const{__scopeSelect:n,onPlaced:r,...a}=e,o=Na(Po,n),i=Ma(Po,n),[s,l]=k.useState(null),[u,p]=k.useState(null),c=Ye(t,O=>p(O)),f=Vf(n),d=k.useRef(!1),h=k.useRef(!0),{viewport:m,selectedItem:g,selectedItemText:v,focusSelectedItem:y}=i,x=k.useCallback(()=>{if(o.trigger&&o.valueNode&&s&&u&&m&&g&&v){const O=o.trigger.getBoundingClientRect(),_=u.getBoundingClientRect(),C=o.valueNode.getBoundingClientRect(),j=v.getBoundingClientRect();if(o.dir!=="rtl"){const X=j.left-_.left,F=C.left-X,pe=O.left-F,ne=O.width+pe,Ne=Math.max(ne,_.width),Me=window.innerWidth-Cn,Ze=bx(F,[Cn,Math.max(Cn,Me-Ne)]);s.style.minWidth=ne+"px",s.style.left=Ze+"px"}else{const X=_.right-j.right,F=window.innerWidth-C.right-X,pe=window.innerWidth-O.right-F,ne=O.width+pe,Ne=Math.max(ne,_.width),Me=window.innerWidth-Cn,Ze=bx(F,[Cn,Math.max(Cn,Me-Ne)]);s.style.minWidth=ne+"px",s.style.right=Ze+"px"}const E=f(),T=window.innerHeight-Cn*2,N=m.scrollHeight,M=window.getComputedStyle(u),I=parseInt(M.borderTopWidth,10),R=parseInt(M.paddingTop,10),L=parseInt(M.borderBottomWidth,10),$=parseInt(M.paddingBottom,10),D=I+R+N+$+L,H=Math.min(g.offsetHeight*5,D),W=window.getComputedStyle(m),G=parseInt(W.paddingTop,10),Z=parseInt(W.paddingBottom,10),ie=O.top+O.height/2-Cn,ve=T-ie,Pe=g.offsetHeight/2,J=g.offsetTop+Pe,le=I+R+J,q=D-le;if(le<=ie){const X=E.length>0&&g===E[E.length-1].ref.current;s.style.bottom="0px";const F=u.clientHeight-m.offsetTop-m.offsetHeight,pe=Math.max(ve,Pe+(X?Z:0)+F+L),ne=le+pe;s.style.height=ne+"px"}else{const X=E.length>0&&g===E[0].ref.current;s.style.top="0px";const pe=Math.max(ie,I+m.offsetTop+(X?G:0)+Pe)+q;s.style.height=pe+"px",m.scrollTop=le-ie+m.offsetTop}s.style.margin=`${Cn}px 0`,s.style.minHeight=H+"px",s.style.maxHeight=T+"px",r==null||r(),requestAnimationFrame(()=>d.current=!0)}},[f,o.trigger,o.valueNode,s,u,m,g,v,o.dir,r]);jt(()=>x(),[x]);const[P,w]=k.useState();jt(()=>{u&&w(window.getComputedStyle(u).zIndex)},[u]);const S=k.useCallback(O=>{O&&h.current===!0&&(x(),y==null||y(),h.current=!1)},[x,y]);return b.jsx(oT,{scope:n,contentWrapper:s,shouldExpandOnScrollRef:d,onScrollButtonChange:S,children:b.jsx("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:P},children:b.jsx(Ee.div,{...a,ref:c,style:{boxSizing:"border-box",maxHeight:"100%",...a.style}})})})});y4.displayName=rT;var aT="SelectPopperPosition",n0=k.forwardRef((e,t)=>{const{__scopeSelect:n,align:r="start",collisionPadding:a=Cn,...o}=e,i=Kf(n);return b.jsx(V6,{...i,...o,ref:t,align:r,collisionPadding:a,style:{boxSizing:"border-box",...o.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});n0.displayName=aT;var[oT,qy]=hs(Po,{}),r0="SelectViewport",g4=k.forwardRef((e,t)=>{const{__scopeSelect:n,nonce:r,...a}=e,o=Ma(r0,n),i=qy(r0,n),s=Ye(t,o.onViewportChange),l=k.useRef(0);return b.jsxs(b.Fragment,{children:[b.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),b.jsx(qf.Slot,{scope:n,children:b.jsx(Ee.div,{"data-radix-select-viewport":"",role:"presentation",...a,ref:s,style:{position:"relative",flex:1,overflow:"hidden auto",...a.style},onScroll:fe(a.onScroll,u=>{const p=u.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:f}=i;if(f!=null&&f.current&&c){const d=Math.abs(l.current-p.scrollTop);if(d>0){const h=window.innerHeight-Cn*2,m=parseFloat(c.style.minHeight),g=parseFloat(c.style.height),v=Math.max(m,g);if(v<h){const y=v+d,x=Math.min(h,y),P=y-x;c.style.height=x+"px",c.style.bottom==="0px"&&(p.scrollTop=P>0?P:0,c.style.justifyContent="flex-end")}}}l.current=p.scrollTop})})})]})});g4.displayName=r0;var x4="SelectGroup",[iT,sT]=hs(x4),lT=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=Tu();return b.jsx(iT,{scope:n,id:a,children:b.jsx(Ee.div,{role:"group","aria-labelledby":a,...r,ref:t})})});lT.displayName=x4;var w4="SelectLabel",b4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=sT(w4,n);return b.jsx(Ee.div,{id:a.id,...r,ref:t})});b4.displayName=w4;var xp="SelectItem",[uT,P4]=hs(xp),S4=k.forwardRef((e,t)=>{const{__scopeSelect:n,value:r,disabled:a=!1,textValue:o,...i}=e,s=Na(xp,n),l=Ma(xp,n),u=s.value===r,[p,c]=k.useState(o??""),[f,d]=k.useState(!1),h=Ye(t,y=>{var x;return(x=l.itemRefCallback)==null?void 0:x.call(l,y,r,a)}),m=Tu(),g=k.useRef("touch"),v=()=>{a||(s.onValueChange(r),s.onOpenChange(!1))};if(r==="")throw new Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return b.jsx(uT,{scope:n,value:r,disabled:a,textId:m,isSelected:u,onItemTextChange:k.useCallback(y=>{c(x=>x||((y==null?void 0:y.textContent)??"").trim())},[]),children:b.jsx(qf.ItemSlot,{scope:n,value:r,disabled:a,textValue:p,children:b.jsx(Ee.div,{role:"option","aria-labelledby":m,"data-highlighted":f?"":void 0,"aria-selected":u&&f,"data-state":u?"checked":"unchecked","aria-disabled":a||void 0,"data-disabled":a?"":void 0,tabIndex:a?void 0:-1,...i,ref:h,onFocus:fe(i.onFocus,()=>d(!0)),onBlur:fe(i.onBlur,()=>d(!1)),onClick:fe(i.onClick,()=>{g.current!=="mouse"&&v()}),onPointerUp:fe(i.onPointerUp,()=>{g.current==="mouse"&&v()}),onPointerDown:fe(i.onPointerDown,y=>{g.current=y.pointerType}),onPointerMove:fe(i.onPointerMove,y=>{var x;g.current=y.pointerType,a?(x=l.onItemLeave)==null||x.call(l):g.current==="mouse"&&y.currentTarget.focus({preventScroll:!0})}),onPointerLeave:fe(i.onPointerLeave,y=>{var x;y.currentTarget===document.activeElement&&((x=l.onItemLeave)==null||x.call(l))}),onKeyDown:fe(i.onKeyDown,y=>{var P;((P=l.searchRef)==null?void 0:P.current)!==""&&y.key===" "||(KE.includes(y.key)&&v(),y.key===" "&&y.preventDefault())})})})})});S4.displayName=xp;var tl="SelectItemText",O4=k.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:a,...o}=e,i=Na(tl,n),s=Ma(tl,n),l=P4(tl,n),u=ZE(tl,n),[p,c]=k.useState(null),f=Ye(t,v=>c(v),l.onItemTextChange,v=>{var y;return(y=s.itemTextRefCallback)==null?void 0:y.call(s,v,l.value,l.disabled)}),d=p==null?void 0:p.textContent,h=k.useMemo(()=>b.jsx("option",{value:l.value,disabled:l.disabled,children:d},l.value),[l.disabled,l.value,d]),{onNativeOptionAdd:m,onNativeOptionRemove:g}=u;return jt(()=>(m(h),()=>g(h)),[m,g,h]),b.jsxs(b.Fragment,{children:[b.jsx(Ee.span,{id:l.textId,...o,ref:f}),l.isSelected&&i.valueNode&&!i.valueNodeHasChildren?ps.createPortal(o.children,i.valueNode):null]})});O4.displayName=tl;var k4="SelectItemIndicator",_4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return P4(k4,n).isSelected?b.jsx(Ee.span,{"aria-hidden":!0,...r,ref:t}):null});_4.displayName=k4;var a0="SelectScrollUpButton",C4=k.forwardRef((e,t)=>{const n=Ma(a0,e.__scopeSelect),r=qy(a0,e.__scopeSelect),[a,o]=k.useState(!1),i=Ye(t,r.onScrollButtonChange);return jt(()=>{if(n.viewport&&n.isPositioned){let s=function(){const u=l.scrollTop>0;o(u)};const l=n.viewport;return s(),l.addEventListener("scroll",s),()=>l.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),a?b.jsx(E4,{...e,ref:i,onAutoScroll:()=>{const{viewport:s,selectedItem:l}=n;s&&l&&(s.scrollTop=s.scrollTop-l.offsetHeight)}}):null});C4.displayName=a0;var o0="SelectScrollDownButton",A4=k.forwardRef((e,t)=>{const n=Ma(o0,e.__scopeSelect),r=qy(o0,e.__scopeSelect),[a,o]=k.useState(!1),i=Ye(t,r.onScrollButtonChange);return jt(()=>{if(n.viewport&&n.isPositioned){let s=function(){const u=l.scrollHeight-l.clientHeight,p=Math.ceil(l.scrollTop)<u;o(p)};const l=n.viewport;return s(),l.addEventListener("scroll",s),()=>l.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),a?b.jsx(E4,{...e,ref:i,onAutoScroll:()=>{const{viewport:s,selectedItem:l}=n;s&&l&&(s.scrollTop=s.scrollTop+l.offsetHeight)}}):null});A4.displayName=o0;var E4=k.forwardRef((e,t)=>{const{__scopeSelect:n,onAutoScroll:r,...a}=e,o=Ma("SelectScrollButton",n),i=k.useRef(null),s=Vf(n),l=k.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null)},[]);return k.useEffect(()=>()=>l(),[l]),jt(()=>{var p;const u=s().find(c=>c.ref.current===document.activeElement);(p=u==null?void 0:u.ref.current)==null||p.scrollIntoView({block:"nearest"})},[s]),b.jsx(Ee.div,{"aria-hidden":!0,...a,ref:t,style:{flexShrink:0,...a.style},onPointerDown:fe(a.onPointerDown,()=>{i.current===null&&(i.current=window.setInterval(r,50))}),onPointerMove:fe(a.onPointerMove,()=>{var u;(u=o.onItemLeave)==null||u.call(o),i.current===null&&(i.current=window.setInterval(r,50))}),onPointerLeave:fe(a.onPointerLeave,()=>{l()})})}),cT="SelectSeparator",T4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return b.jsx(Ee.div,{"aria-hidden":!0,...r,ref:t})});T4.displayName=cT;var i0="SelectArrow",pT=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=Kf(n),o=Na(i0,n),i=Ma(i0,n);return o.open&&i.position==="popper"?b.jsx(K6,{...a,...r,ref:t}):null});pT.displayName=i0;var fT="SelectBubbleInput",j4=k.forwardRef(({__scopeSelect:e,value:t,...n},r)=>{const a=k.useRef(null),o=Ye(r,a),i=aE(t);return k.useEffect(()=>{const s=a.current;if(!s)return;const l=window.HTMLSelectElement.prototype,p=Object.getOwnPropertyDescriptor(l,"value").set;if(i!==t&&p){const c=new Event("change",{bubbles:!0});p.call(s,t),s.dispatchEvent(c)}},[i,t]),b.jsx(Ee.select,{...n,style:{...Y6,...n.style},ref:o,defaultValue:t})});j4.displayName=fT;function $4(e){return e===""||e===void 0}function N4(e){const t=Ca(e),n=k.useRef(""),r=k.useRef(0),a=k.useCallback(i=>{const s=n.current+i;t(s),function l(u){n.current=u,window.clearTimeout(r.current),u!==""&&(r.current=window.setTimeout(()=>l(""),1e3))}(s)},[t]),o=k.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return k.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,a,o]}function M4(e,t,n){const a=t.length>1&&Array.from(t).every(u=>u===t[0])?t[0]:t,o=n?e.indexOf(n):-1;let i=dT(e,Math.max(o,0));a.length===1&&(i=i.filter(u=>u!==n));const l=i.find(u=>u.textValue.toLowerCase().startsWith(a.toLowerCase()));return l!==n?l:void 0}function dT(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var mT=s4,R4=u4,hT=p4,vT=f4,yT=d4,I4=m4,gT=g4,D4=b4,L4=S4,xT=O4,wT=_4,F4=C4,z4=A4,B4=T4;/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const sT=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),F4=(...e)=>e.filter((t,n,r)=>!!t&&t.trim()!==""&&r.indexOf(t)===n).join(" ").trim();/**
+ */const bT=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),H4=(...e)=>e.filter((t,n,r)=>!!t&&t.trim()!==""&&r.indexOf(t)===n).join(" ").trim();/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */var lT={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
+ */var PT={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const uT=k.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:a="",children:o,iconNode:i,...s},l)=>k.createElement("svg",{ref:l,...lT,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:F4("lucide",a),...s},[...i.map(([u,f])=>k.createElement(u,f)),...Array.isArray(o)?o:[o]]));/**
+ */const ST=k.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:a="",children:o,iconNode:i,...s},l)=>k.createElement("svg",{ref:l,...PT,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:H4("lucide",a),...s},[...i.map(([u,p])=>k.createElement(u,p)),...Array.isArray(o)?o:[o]]));/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const Qe=(e,t)=>{const n=k.forwardRef(({className:r,...a},o)=>k.createElement(uT,{ref:o,iconNode:t,className:F4(`lucide-${sT(e)}`,r),...a}));return n.displayName=`${e}`,n};/**
+ */const Qe=(e,t)=>{const n=k.forwardRef(({className:r,...a},o)=>k.createElement(ST,{ref:o,iconNode:t,className:H4(`lucide-${bT(e)}`,r),...a}));return n.displayName=`${e}`,n};/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const z4=Qe("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/**
+ */const G4=Qe("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const cT=Qe("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/**
+ */const OT=Qe("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const B4=Qe("ChartColumn",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/**
+ */const U4=Qe("ChartColumn",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const fT=Qe("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
+ */const kT=Qe("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const H4=Qe("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/**
+ */const W4=Qe("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const pT=Qe("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/**
+ */const _T=Qe("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const dT=Qe("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/**
+ */const CT=Qe("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const G4=Qe("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/**
+ */const q4=Qe("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const U4=Qe("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/**
+ */const V4=Qe("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const W4=Qe("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/**
+ */const K4=Qe("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const mT=Qe("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/**
+ */const AT=Qe("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const hT=Qe("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/**
+ */const ET=Qe("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const q4=Qe("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);/**
+ */const X4=Qe("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const vT=Qe("MemoryStick",[["path",{d:"M6 19v-3",key:"1nvgqn"}],["path",{d:"M10 19v-3",key:"iu8nkm"}],["path",{d:"M14 19v-3",key:"kcehxu"}],["path",{d:"M18 19v-3",key:"1vh91z"}],["path",{d:"M8 11V9",key:"63erz4"}],["path",{d:"M16 11V9",key:"fru6f3"}],["path",{d:"M12 11V9",key:"ha00sb"}],["path",{d:"M2 15h20",key:"16ne18"}],["path",{d:"M2 7a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v1.1a2 2 0 0 0 0 3.837V17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-5.1a2 2 0 0 0 0-3.837Z",key:"lhddv3"}]]);/**
+ */const TT=Qe("MemoryStick",[["path",{d:"M6 19v-3",key:"1nvgqn"}],["path",{d:"M10 19v-3",key:"iu8nkm"}],["path",{d:"M14 19v-3",key:"kcehxu"}],["path",{d:"M18 19v-3",key:"1vh91z"}],["path",{d:"M8 11V9",key:"63erz4"}],["path",{d:"M16 11V9",key:"fru6f3"}],["path",{d:"M12 11V9",key:"ha00sb"}],["path",{d:"M2 15h20",key:"16ne18"}],["path",{d:"M2 7a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v1.1a2 2 0 0 0 0 3.837V17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-5.1a2 2 0 0 0 0-3.837Z",key:"lhddv3"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const V4=Qe("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/**
+ */const Y4=Qe("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const K4=Qe("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);/**
+ */const Q4=Qe("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const yT=Qe("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/**
+ */const jT=Qe("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const gT=Qe("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/**
+ */const $T=Qe("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const X4=Qe("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/**
+ */const Z4=Qe("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const xT=Qe("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/**
+ */const NT=Qe("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/**
  * @license lucide-react v0.462.0 - ISC
  *
  * This source code is licensed under the ISC license.
  * See the LICENSE file in the root directory of this source tree.
- */const wT=Qe("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);function Y4(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=Y4(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function ue(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=Y4(e))&&(r&&(r+=" "),r+=t);return r}const V0="-",bT=e=>{const t=ST(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:i=>{const s=i.split(V0);return s[0]===""&&s.length!==1&&s.shift(),Q4(s,t)||PT(i)},getConflictingClassGroupIds:(i,s)=>{const l=n[i]||[];return s&&r[i]?[...l,...r[i]]:l}}},Q4=(e,t)=>{var i;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),a=r?Q4(e.slice(1),r):void 0;if(a)return a;if(t.validators.length===0)return;const o=e.join(V0);return(i=t.validators.find(({validator:s})=>s(o)))==null?void 0:i.classGroupId},Gx=/^\[(.+)\]$/,PT=e=>{if(Gx.test(e)){const t=Gx.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},ST=e=>{const{theme:t,prefix:n}=e,r={nextPart:new Map,validators:[]};return kT(Object.entries(e.classGroups),n).forEach(([o,i])=>{sv(i,r,o,t)}),r},sv=(e,t,n,r)=>{e.forEach(a=>{if(typeof a=="string"){const o=a===""?t:Ux(t,a);o.classGroupId=n;return}if(typeof a=="function"){if(OT(a)){sv(a(r),t,n,r);return}t.validators.push({validator:a,classGroupId:n});return}Object.entries(a).forEach(([o,i])=>{sv(i,Ux(t,o),n,r)})})},Ux=(e,t)=>{let n=e;return t.split(V0).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},OT=e=>e.isThemeGetter,kT=(e,t)=>t?e.map(([n,r])=>{const a=r.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([i,s])=>[t+i,s])):o);return[n,a]}):e,_T=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const a=(o,i)=>{n.set(o,i),t++,t>e&&(t=0,r=n,n=new Map)};return{get(o){let i=n.get(o);if(i!==void 0)return i;if((i=r.get(o))!==void 0)return a(o,i),i},set(o,i){n.has(o)?n.set(o,i):a(o,i)}}},Z4="!",AT=e=>{const{separator:t,experimentalParseClassName:n}=e,r=t.length===1,a=t[0],o=t.length,i=s=>{const l=[];let u=0,f=0,c;for(let g=0;g<s.length;g++){let v=s[g];if(u===0){if(v===a&&(r||s.slice(g,g+o)===t)){l.push(s.slice(f,g)),f=g+o;continue}if(v==="/"){c=g;continue}}v==="["?u++:v==="]"&&u--}const p=l.length===0?s:s.substring(f),d=p.startsWith(Z4),h=d?p.substring(1):p,m=c&&c>f?c-f:void 0;return{modifiers:l,hasImportantModifier:d,baseClassName:h,maybePostfixModifierPosition:m}};return n?s=>n({className:s,parseClassName:i}):i},CT=e=>{if(e.length<=1)return e;const t=[];let n=[];return e.forEach(r=>{r[0]==="["?(t.push(...n.sort(),r),n=[]):n.push(r)}),t.push(...n.sort()),t},ET=e=>({cache:_T(e.cacheSize),parseClassName:AT(e),...bT(e)}),TT=/\s+/,jT=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:a}=t,o=[],i=e.trim().split(TT);let s="";for(let l=i.length-1;l>=0;l-=1){const u=i[l],{modifiers:f,hasImportantModifier:c,baseClassName:p,maybePostfixModifierPosition:d}=n(u);let h=!!d,m=r(h?p.substring(0,d):p);if(!m){if(!h){s=u+(s.length>0?" "+s:s);continue}if(m=r(p),!m){s=u+(s.length>0?" "+s:s);continue}h=!1}const g=CT(f).join(":"),v=c?g+Z4:g,y=v+m;if(o.includes(y))continue;o.push(y);const x=a(m,h);for(let P=0;P<x.length;++P){const w=x[P];o.push(v+w)}s=u+(s.length>0?" "+s:s)}return s};function $T(){let e=0,t,n,r="";for(;e<arguments.length;)(t=arguments[e++])&&(n=J4(t))&&(r&&(r+=" "),r+=n);return r}const J4=e=>{if(typeof e=="string")return e;let t,n="";for(let r=0;r<e.length;r++)e[r]&&(t=J4(e[r]))&&(n&&(n+=" "),n+=t);return n};function NT(e,...t){let n,r,a,o=i;function i(l){const u=t.reduce((f,c)=>c(f),e());return n=ET(u),r=n.cache.get,a=n.cache.set,o=s,s(l)}function s(l){const u=r(l);if(u)return u;const f=jT(l,n);return a(l,f),f}return function(){return o($T.apply(null,arguments))}}const Re=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},e8=/^\[(?:([a-z-]+):)?(.+)\]$/i,MT=/^\d+\/\d+$/,RT=new Set(["px","full","screen"]),IT=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,DT=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,LT=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,FT=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,zT=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,xr=e=>di(e)||RT.has(e)||MT.test(e),Xr=e=>vs(e,"length",KT),di=e=>!!e&&!Number.isNaN(Number(e)),Cm=e=>vs(e,"number",di),Fs=e=>!!e&&Number.isInteger(Number(e)),BT=e=>e.endsWith("%")&&di(e.slice(0,-1)),se=e=>e8.test(e),Yr=e=>IT.test(e),HT=new Set(["length","size","percentage"]),GT=e=>vs(e,HT,t8),UT=e=>vs(e,"position",t8),WT=new Set(["image","url"]),qT=e=>vs(e,WT,YT),VT=e=>vs(e,"",XT),zs=()=>!0,vs=(e,t,n)=>{const r=e8.exec(e);return r?r[1]?typeof t=="string"?r[1]===t:t.has(r[1]):n(r[2]):!1},KT=e=>DT.test(e)&&!LT.test(e),t8=()=>!1,XT=e=>FT.test(e),YT=e=>zT.test(e),QT=()=>{const e=Re("colors"),t=Re("spacing"),n=Re("blur"),r=Re("brightness"),a=Re("borderColor"),o=Re("borderRadius"),i=Re("borderSpacing"),s=Re("borderWidth"),l=Re("contrast"),u=Re("grayscale"),f=Re("hueRotate"),c=Re("invert"),p=Re("gap"),d=Re("gradientColorStops"),h=Re("gradientColorStopPositions"),m=Re("inset"),g=Re("margin"),v=Re("opacity"),y=Re("padding"),x=Re("saturate"),P=Re("scale"),w=Re("sepia"),S=Re("skew"),O=Re("space"),_=Re("translate"),A=()=>["auto","contain","none"],j=()=>["auto","hidden","clip","visible","scroll"],E=()=>["auto",se,t],T=()=>[se,t],N=()=>["",xr,Xr],M=()=>["auto",di,se],I=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],R=()=>["solid","dashed","dotted","double","none"],L=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],$=()=>["start","end","center","between","around","evenly","stretch"],D=()=>["","0",se],H=()=>["auto","avoid","all","avoid-page","page","left","right","column"],W=()=>[di,se];return{cacheSize:500,separator:":",theme:{colors:[zs],spacing:[xr,Xr],blur:["none","",Yr,se],brightness:W(),borderColor:[e],borderRadius:["none","","full",Yr,se],borderSpacing:T(),borderWidth:N(),contrast:W(),grayscale:D(),hueRotate:W(),invert:D(),gap:T(),gradientColorStops:[e],gradientColorStopPositions:[BT,Xr],inset:E(),margin:E(),opacity:W(),padding:T(),saturate:W(),scale:W(),sepia:D(),skew:W(),space:T(),translate:T()},classGroups:{aspect:[{aspect:["auto","square","video",se]}],container:["container"],columns:[{columns:[Yr]}],"break-after":[{"break-after":H()}],"break-before":[{"break-before":H()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...I(),se]}],overflow:[{overflow:j()}],"overflow-x":[{"overflow-x":j()}],"overflow-y":[{"overflow-y":j()}],overscroll:[{overscroll:A()}],"overscroll-x":[{"overscroll-x":A()}],"overscroll-y":[{"overscroll-y":A()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[m]}],"inset-x":[{"inset-x":[m]}],"inset-y":[{"inset-y":[m]}],start:[{start:[m]}],end:[{end:[m]}],top:[{top:[m]}],right:[{right:[m]}],bottom:[{bottom:[m]}],left:[{left:[m]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Fs,se]}],basis:[{basis:E()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",se]}],grow:[{grow:D()}],shrink:[{shrink:D()}],order:[{order:["first","last","none",Fs,se]}],"grid-cols":[{"grid-cols":[zs]}],"col-start-end":[{col:["auto",{span:["full",Fs,se]},se]}],"col-start":[{"col-start":M()}],"col-end":[{"col-end":M()}],"grid-rows":[{"grid-rows":[zs]}],"row-start-end":[{row:["auto",{span:[Fs,se]},se]}],"row-start":[{"row-start":M()}],"row-end":[{"row-end":M()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",se]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",se]}],gap:[{gap:[p]}],"gap-x":[{"gap-x":[p]}],"gap-y":[{"gap-y":[p]}],"justify-content":[{justify:["normal",...$()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...$(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...$(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[y]}],px:[{px:[y]}],py:[{py:[y]}],ps:[{ps:[y]}],pe:[{pe:[y]}],pt:[{pt:[y]}],pr:[{pr:[y]}],pb:[{pb:[y]}],pl:[{pl:[y]}],m:[{m:[g]}],mx:[{mx:[g]}],my:[{my:[g]}],ms:[{ms:[g]}],me:[{me:[g]}],mt:[{mt:[g]}],mr:[{mr:[g]}],mb:[{mb:[g]}],ml:[{ml:[g]}],"space-x":[{"space-x":[O]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[O]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",se,t]}],"min-w":[{"min-w":[se,t,"min","max","fit"]}],"max-w":[{"max-w":[se,t,"none","full","min","max","fit","prose",{screen:[Yr]},Yr]}],h:[{h:[se,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[se,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[se,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[se,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Yr,Xr]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Cm]}],"font-family":[{font:[zs]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",se]}],"line-clamp":[{"line-clamp":["none",di,Cm]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",xr,se]}],"list-image":[{"list-image":["none",se]}],"list-style-type":[{list:["none","disc","decimal",se]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[v]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[v]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...R(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",xr,Xr]}],"underline-offset":[{"underline-offset":["auto",xr,se]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:T()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",se]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",se]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[v]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...I(),UT]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",GT]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},qT]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[h]}],"gradient-via-pos":[{via:[h]}],"gradient-to-pos":[{to:[h]}],"gradient-from":[{from:[d]}],"gradient-via":[{via:[d]}],"gradient-to":[{to:[d]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[s]}],"border-w-x":[{"border-x":[s]}],"border-w-y":[{"border-y":[s]}],"border-w-s":[{"border-s":[s]}],"border-w-e":[{"border-e":[s]}],"border-w-t":[{"border-t":[s]}],"border-w-r":[{"border-r":[s]}],"border-w-b":[{"border-b":[s]}],"border-w-l":[{"border-l":[s]}],"border-opacity":[{"border-opacity":[v]}],"border-style":[{border:[...R(),"hidden"]}],"divide-x":[{"divide-x":[s]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[s]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[v]}],"divide-style":[{divide:R()}],"border-color":[{border:[a]}],"border-color-x":[{"border-x":[a]}],"border-color-y":[{"border-y":[a]}],"border-color-s":[{"border-s":[a]}],"border-color-e":[{"border-e":[a]}],"border-color-t":[{"border-t":[a]}],"border-color-r":[{"border-r":[a]}],"border-color-b":[{"border-b":[a]}],"border-color-l":[{"border-l":[a]}],"divide-color":[{divide:[a]}],"outline-style":[{outline:["",...R()]}],"outline-offset":[{"outline-offset":[xr,se]}],"outline-w":[{outline:[xr,Xr]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:N()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[v]}],"ring-offset-w":[{"ring-offset":[xr,Xr]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Yr,VT]}],"shadow-color":[{shadow:[zs]}],opacity:[{opacity:[v]}],"mix-blend":[{"mix-blend":[...L(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":L()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[l]}],"drop-shadow":[{"drop-shadow":["","none",Yr,se]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[f]}],invert:[{invert:[c]}],saturate:[{saturate:[x]}],sepia:[{sepia:[w]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[l]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[f]}],"backdrop-invert":[{"backdrop-invert":[c]}],"backdrop-opacity":[{"backdrop-opacity":[v]}],"backdrop-saturate":[{"backdrop-saturate":[x]}],"backdrop-sepia":[{"backdrop-sepia":[w]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",se]}],duration:[{duration:W()}],ease:[{ease:["linear","in","out","in-out",se]}],delay:[{delay:W()}],animate:[{animate:["none","spin","ping","pulse","bounce",se]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[P]}],"scale-x":[{"scale-x":[P]}],"scale-y":[{"scale-y":[P]}],rotate:[{rotate:[Fs,se]}],"translate-x":[{"translate-x":[_]}],"translate-y":[{"translate-y":[_]}],"skew-x":[{"skew-x":[S]}],"skew-y":[{"skew-y":[S]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",se]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",se]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":T()}],"scroll-mx":[{"scroll-mx":T()}],"scroll-my":[{"scroll-my":T()}],"scroll-ms":[{"scroll-ms":T()}],"scroll-me":[{"scroll-me":T()}],"scroll-mt":[{"scroll-mt":T()}],"scroll-mr":[{"scroll-mr":T()}],"scroll-mb":[{"scroll-mb":T()}],"scroll-ml":[{"scroll-ml":T()}],"scroll-p":[{"scroll-p":T()}],"scroll-px":[{"scroll-px":T()}],"scroll-py":[{"scroll-py":T()}],"scroll-ps":[{"scroll-ps":T()}],"scroll-pe":[{"scroll-pe":T()}],"scroll-pt":[{"scroll-pt":T()}],"scroll-pr":[{"scroll-pr":T()}],"scroll-pb":[{"scroll-pb":T()}],"scroll-pl":[{"scroll-pl":T()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",se]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[xr,Xr,Cm]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},ZT=NT(QT);function Oe(...e){return ZT(ue(e))}const JT=eT,ej=tT,n8=k.forwardRef(({className:e,children:t,...n},r)=>b.jsxs($4,{ref:r,className:Oe("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...n,children:[t,b.jsx(nT,{asChild:!0,children:b.jsx(H4,{className:"h-4 w-4 opacity-50"})})]}));n8.displayName=$4.displayName;const r8=k.forwardRef(({className:e,...t},n)=>b.jsx(I4,{ref:n,className:Oe("flex cursor-default items-center justify-center py-1",e),...t,children:b.jsx(pT,{className:"h-4 w-4"})}));r8.displayName=I4.displayName;const a8=k.forwardRef(({className:e,...t},n)=>b.jsx(D4,{ref:n,className:Oe("flex cursor-default items-center justify-center py-1",e),...t,children:b.jsx(H4,{className:"h-4 w-4"})}));a8.displayName=D4.displayName;const o8=k.forwardRef(({className:e,children:t,position:n="popper",...r},a)=>(k.useEffect(()=>{const o=()=>{document.querySelectorAll("[data-radix-popper-content-wrapper]").forEach(l=>{const u=l;u.style.setProperty("--popover","0 0% 100%"),u.style.setProperty("--popover-foreground","222.2 84% 4.9%"),u.style.setProperty("--border","214.3 31.8% 91.4%"),u.style.setProperty("--background","0 0% 100%"),u.style.setProperty("--foreground","222.2 84% 4.9%"),(document.documentElement.classList.contains("dark")||document.body.classList.contains("dark"))&&(u.style.setProperty("--popover","222.2 84% 4.9%"),u.style.setProperty("--popover-foreground","210 40% 98%"),u.style.setProperty("--border","217.2 32.6% 17.5%"),u.style.setProperty("--background","222.2 84% 4.9%"),u.style.setProperty("--foreground","210 40% 98%"))})};o();const i=setTimeout(o,100);return()=>clearTimeout(i)}),b.jsx(rT,{children:b.jsxs(N4,{ref:a,className:Oe("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:n,...r,children:[b.jsx(r8,{}),b.jsx(aT,{className:Oe("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),b.jsx(a8,{})]})})));o8.displayName=N4.displayName;const tj=k.forwardRef(({className:e,...t},n)=>b.jsx(M4,{ref:n,className:Oe("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));tj.displayName=M4.displayName;const i8=k.forwardRef(({className:e,children:t,...n},r)=>b.jsxs(R4,{ref:r,className:Oe("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...n,children:[b.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:b.jsx(iT,{children:b.jsx(fT,{className:"h-4 w-4"})})}),b.jsx(oT,{children:t})]}));i8.displayName=R4.displayName;const nj=k.forwardRef(({className:e,...t},n)=>b.jsx(L4,{ref:n,className:Oe("-mx-1 my-1 h-px bg-muted",e),...t}));nj.displayName=L4.displayName;const Wx=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,qx=ue,s8=(e,t)=>n=>{var r;if((t==null?void 0:t.variants)==null)return qx(e,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:a,defaultVariants:o}=t,i=Object.keys(a).map(u=>{const f=n==null?void 0:n[u],c=o==null?void 0:o[u];if(f===null)return null;const p=Wx(f)||Wx(c);return a[u][p]}),s=n&&Object.entries(n).reduce((u,f)=>{let[c,p]=f;return p===void 0||(u[c]=p),u},{}),l=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((u,f)=>{let{class:c,className:p,...d}=f;return Object.entries(d).every(h=>{let[m,g]=h;return Array.isArray(g)?g.includes({...o,...s}[m]):{...o,...s}[m]===g})?[...u,c,p]:u},[]);return qx(e,i,l,n==null?void 0:n.class,n==null?void 0:n.className)},rj=s8("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function aj({className:e,variant:t,...n}){return b.jsx("div",{className:Oe(rj({variant:t}),e),...n})}const oj=s8("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),bf=k.forwardRef(({className:e,variant:t,size:n,asChild:r=!1,...a},o)=>{const i=r?aA:"button";return b.jsx(i,{className:Oe(oj({variant:t,size:n,className:e})),ref:o,...a})});bf.displayName="Button";const ij=({selectedVersion:e,availableVersions:t,onVersionChange:n,metadata:r,onDownloadReport:a})=>{const o=f=>{try{return new Date(f).toLocaleDateString()}catch{return f}},i=f=>`https://github.com/envoyproxy/gateway/releases/tag/v${f}`,s=f=>`https://github.com/envoyproxy/gateway/releases/download/v${f}/benchmark_report.zip`,l=()=>{const f=i(e);window.open(f,"_blank","noopener,noreferrer")},u=()=>{const f=s(e);window.open(f,"_blank","noopener,noreferrer")};return b.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center gap-3",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("label",{className:"text-sm font-medium text-gray-700",children:"Version:"}),b.jsxs(JT,{value:e,onValueChange:n,children:[b.jsx(n8,{className:"w-32",children:b.jsx(ej,{})}),b.jsx(o8,{children:t.map(f=>b.jsxs(i8,{value:f,children:["v",f]},f))})]})]}),r&&b.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-gray-600",children:[b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(cT,{className:"h-3 w-3"}),b.jsx("span",{children:o(r.date)})]}),r.environment&&b.jsx(aj,{variant:"secondary",className:"text-xs",children:r.environment}),r.gitCommit&&b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(q4,{className:"h-3 w-3"}),b.jsx("span",{className:"font-mono",children:r.gitCommit.substring(0,7)})]}),r.description&&b.jsx("span",{className:"hidden sm:inline max-w-xs truncate",title:r.description,children:r.description})]}),b.jsxs("div",{className:"flex items-center gap-2 ml-auto",children:[b.jsxs(bf,{variant:"outline",size:"sm",onClick:l,className:"flex items-center gap-1 text-xs",children:[b.jsx(mT,{className:"h-3 w-3"}),"View Release"]}),b.jsxs(bf,{variant:"outline",size:"sm",onClick:u,className:"flex items-center gap-1 text-xs",children:[b.jsx(B4,{className:"h-3 w-3"}),"Download Benchmark"]})]})]})},xe=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("rounded-lg border bg-card text-card-foreground shadow-sm",e),...t}));xe.displayName="Card";const Se=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("flex flex-col space-y-1.5 p-6",e),...t}));Se.displayName="CardHeader";const we=k.forwardRef(({className:e,...t},n)=>b.jsx("h3",{ref:n,className:Oe("text-2xl font-semibold leading-none tracking-tight",e),...t}));we.displayName="CardTitle";const tn=k.forwardRef(({className:e,...t},n)=>b.jsx("p",{ref:n,className:Oe("text-sm text-muted-foreground",e),...t}));tn.displayName="CardDescription";const be=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("p-6 pt-0",e),...t}));be.displayName="CardContent";const sj=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("flex items-center p-6 pt-0",e),...t}));sj.displayName="CardFooter";const lj=({performanceSummary:e,benchmarkResults:t})=>{const n=Math.round(Math.max(...t.map(i=>i.throughput))),r=Math.round(e.avgLatency/1e3),a=Math.round(Math.max(...t.map(i=>i.resources.envoyGateway.memory.mean+i.resources.envoyProxy.memory.mean))),o=e.maxRoutes;return b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4 mb-8",children:[b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center",children:[b.jsx(z4,{className:"h-4 w-4 mr-2"}),"Max Throughput in Test"]})}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[n.toLocaleString()," RPS"]}),b.jsx("p",{className:"text-purple-100 text-sm",children:"Requests per second"})]})]}),b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center",children:[b.jsx(U4,{className:"h-4 w-4 mr-2"}),"Mean Response Time"]})}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[r,"ms"]}),b.jsx("p",{className:"text-purple-100 text-sm",children:"End-to-end via Nighthawk"})]})]}),b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center",children:[b.jsx(vT,{className:"h-4 w-4 mr-2"}),"Memory Usage"]})}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[a,"MB"]}),b.jsxs("p",{className:"text-purple-100 text-sm",children:["Peak at ",o," routes"]})]})]}),b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center text",children:[b.jsx(K4,{className:"h-4 w-4 mr-2"}),"Max Routes in Test"]})}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:o.toLocaleString()}),b.jsx("p",{className:"text-purple-100 text-sm",children:"HTTPRoutes tested"})]})]})]})};var uj=Array.isArray,Vt=uj,cj=typeof Bu=="object"&&Bu&&Bu.Object===Object&&Bu,l8=cj,fj=l8,pj=typeof self=="object"&&self&&self.Object===Object&&self,dj=fj||pj||Function("return this")(),gr=dj,mj=gr,hj=mj.Symbol,$u=hj,Vx=$u,u8=Object.prototype,vj=u8.hasOwnProperty,yj=u8.toString,Bs=Vx?Vx.toStringTag:void 0;function gj(e){var t=vj.call(e,Bs),n=e[Bs];try{e[Bs]=void 0;var r=!0}catch{}var a=yj.call(e);return r&&(t?e[Bs]=n:delete e[Bs]),a}var xj=gj,wj=Object.prototype,bj=wj.toString;function Pj(e){return bj.call(e)}var Sj=Pj,Kx=$u,Oj=xj,kj=Sj,_j="[object Null]",Aj="[object Undefined]",Xx=Kx?Kx.toStringTag:void 0;function Cj(e){return e==null?e===void 0?Aj:_j:Xx&&Xx in Object(e)?Oj(e):kj(e)}var Ur=Cj;function Ej(e){return e!=null&&typeof e=="object"}var Wr=Ej,Tj=Ur,jj=Wr,$j="[object Symbol]";function Nj(e){return typeof e=="symbol"||jj(e)&&Tj(e)==$j}var ys=Nj,Mj=Vt,Rj=ys,Ij=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Dj=/^\w*$/;function Lj(e,t){if(Mj(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||Rj(e)?!0:Dj.test(e)||!Ij.test(e)||t!=null&&e in Object(t)}var K0=Lj;function Fj(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var Ra=Fj;const gs=Ce(Ra);var zj=Ur,Bj=Ra,Hj="[object AsyncFunction]",Gj="[object Function]",Uj="[object GeneratorFunction]",Wj="[object Proxy]";function qj(e){if(!Bj(e))return!1;var t=zj(e);return t==Gj||t==Uj||t==Hj||t==Wj}var X0=qj;const oe=Ce(X0);var Vj=gr,Kj=Vj["__core-js_shared__"],Xj=Kj,Em=Xj,Yx=function(){var e=/[^.]+$/.exec(Em&&Em.keys&&Em.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Yj(e){return!!Yx&&Yx in e}var Qj=Yj,Zj=Function.prototype,Jj=Zj.toString;function e$(e){if(e!=null){try{return Jj.call(e)}catch{}try{return e+""}catch{}}return""}var c8=e$,t$=X0,n$=Qj,r$=Ra,a$=c8,o$=/[\\^$.*+?()[\]{}|]/g,i$=/^\[object .+?Constructor\]$/,s$=Function.prototype,l$=Object.prototype,u$=s$.toString,c$=l$.hasOwnProperty,f$=RegExp("^"+u$.call(c$).replace(o$,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function p$(e){if(!r$(e)||n$(e))return!1;var t=t$(e)?f$:i$;return t.test(a$(e))}var d$=p$;function m$(e,t){return e==null?void 0:e[t]}var h$=m$,v$=d$,y$=h$;function g$(e,t){var n=y$(e,t);return v$(n)?n:void 0}var jo=g$,x$=jo,w$=x$(Object,"create"),Xp=w$,Qx=Xp;function b$(){this.__data__=Qx?Qx(null):{},this.size=0}var P$=b$;function S$(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var O$=S$,k$=Xp,_$="__lodash_hash_undefined__",A$=Object.prototype,C$=A$.hasOwnProperty;function E$(e){var t=this.__data__;if(k$){var n=t[e];return n===_$?void 0:n}return C$.call(t,e)?t[e]:void 0}var T$=E$,j$=Xp,$$=Object.prototype,N$=$$.hasOwnProperty;function M$(e){var t=this.__data__;return j$?t[e]!==void 0:N$.call(t,e)}var R$=M$,I$=Xp,D$="__lodash_hash_undefined__";function L$(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=I$&&t===void 0?D$:t,this}var F$=L$,z$=P$,B$=O$,H$=T$,G$=R$,U$=F$;function xs(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}xs.prototype.clear=z$;xs.prototype.delete=B$;xs.prototype.get=H$;xs.prototype.has=G$;xs.prototype.set=U$;var W$=xs;function q$(){this.__data__=[],this.size=0}var V$=q$;function K$(e,t){return e===t||e!==e&&t!==t}var Y0=K$,X$=Y0;function Y$(e,t){for(var n=e.length;n--;)if(X$(e[n][0],t))return n;return-1}var Yp=Y$,Q$=Yp,Z$=Array.prototype,J$=Z$.splice;function eN(e){var t=this.__data__,n=Q$(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():J$.call(t,n,1),--this.size,!0}var tN=eN,nN=Yp;function rN(e){var t=this.__data__,n=nN(t,e);return n<0?void 0:t[n][1]}var aN=rN,oN=Yp;function iN(e){return oN(this.__data__,e)>-1}var sN=iN,lN=Yp;function uN(e,t){var n=this.__data__,r=lN(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var cN=uN,fN=V$,pN=tN,dN=aN,mN=sN,hN=cN;function ws(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}ws.prototype.clear=fN;ws.prototype.delete=pN;ws.prototype.get=dN;ws.prototype.has=mN;ws.prototype.set=hN;var Qp=ws,vN=jo,yN=gr,gN=vN(yN,"Map"),Q0=gN,Zx=W$,xN=Qp,wN=Q0;function bN(){this.size=0,this.__data__={hash:new Zx,map:new(wN||xN),string:new Zx}}var PN=bN;function SN(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var ON=SN,kN=ON;function _N(e,t){var n=e.__data__;return kN(t)?n[typeof t=="string"?"string":"hash"]:n.map}var Zp=_N,AN=Zp;function CN(e){var t=AN(this,e).delete(e);return this.size-=t?1:0,t}var EN=CN,TN=Zp;function jN(e){return TN(this,e).get(e)}var $N=jN,NN=Zp;function MN(e){return NN(this,e).has(e)}var RN=MN,IN=Zp;function DN(e,t){var n=IN(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var LN=DN,FN=PN,zN=EN,BN=$N,HN=RN,GN=LN;function bs(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}bs.prototype.clear=FN;bs.prototype.delete=zN;bs.prototype.get=BN;bs.prototype.has=HN;bs.prototype.set=GN;var Z0=bs,f8=Z0,UN="Expected a function";function J0(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(UN);var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],o=n.cache;if(o.has(a))return o.get(a);var i=e.apply(this,r);return n.cache=o.set(a,i)||o,i};return n.cache=new(J0.Cache||f8),n}J0.Cache=f8;var p8=J0;const WN=Ce(p8);var qN=p8,VN=500;function KN(e){var t=qN(e,function(r){return n.size===VN&&n.clear(),r}),n=t.cache;return t}var XN=KN,YN=XN,QN=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ZN=/\\(\\)?/g,JN=YN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(QN,function(n,r,a,o){t.push(a?o.replace(ZN,"$1"):r||n)}),t}),eM=JN;function tM(e,t){for(var n=-1,r=e==null?0:e.length,a=Array(r);++n<r;)a[n]=t(e[n],n,e);return a}var eg=tM,Jx=$u,nM=eg,rM=Vt,aM=ys,ew=Jx?Jx.prototype:void 0,tw=ew?ew.toString:void 0;function d8(e){if(typeof e=="string")return e;if(rM(e))return nM(e,d8)+"";if(aM(e))return tw?tw.call(e):"";var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}var oM=d8,iM=oM;function sM(e){return e==null?"":iM(e)}var m8=sM,lM=Vt,uM=K0,cM=eM,fM=m8;function pM(e,t){return lM(e)?e:uM(e,t)?[e]:cM(fM(e))}var h8=pM,dM=ys;function mM(e){if(typeof e=="string"||dM(e))return e;var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}var Jp=mM,hM=h8,vM=Jp;function yM(e,t){t=hM(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[vM(t[n++])];return n&&n==r?e:void 0}var tg=yM,gM=tg;function xM(e,t,n){var r=e==null?void 0:gM(e,t);return r===void 0?n:r}var v8=xM;const gn=Ce(v8);function wM(e){return e==null}var bM=wM;const te=Ce(bM);var PM=Ur,SM=Vt,OM=Wr,kM="[object String]";function _M(e){return typeof e=="string"||!SM(e)&&OM(e)&&PM(e)==kM}var AM=_M;const So=Ce(AM);var y8={exports:{}},_e={};/**
+ */const MT=Qe("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);function J4(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=J4(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function ue(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=J4(e))&&(r&&(r+=" "),r+=t);return r}const Vy="-",RT=e=>{const t=DT(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:i=>{const s=i.split(Vy);return s[0]===""&&s.length!==1&&s.shift(),e8(s,t)||IT(i)},getConflictingClassGroupIds:(i,s)=>{const l=n[i]||[];return s&&r[i]?[...l,...r[i]]:l}}},e8=(e,t)=>{var i;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),a=r?e8(e.slice(1),r):void 0;if(a)return a;if(t.validators.length===0)return;const o=e.join(Vy);return(i=t.validators.find(({validator:s})=>s(o)))==null?void 0:i.classGroupId},Wx=/^\[(.+)\]$/,IT=e=>{if(Wx.test(e)){const t=Wx.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},DT=e=>{const{theme:t,prefix:n}=e,r={nextPart:new Map,validators:[]};return FT(Object.entries(e.classGroups),n).forEach(([o,i])=>{s0(i,r,o,t)}),r},s0=(e,t,n,r)=>{e.forEach(a=>{if(typeof a=="string"){const o=a===""?t:qx(t,a);o.classGroupId=n;return}if(typeof a=="function"){if(LT(a)){s0(a(r),t,n,r);return}t.validators.push({validator:a,classGroupId:n});return}Object.entries(a).forEach(([o,i])=>{s0(i,qx(t,o),n,r)})})},qx=(e,t)=>{let n=e;return t.split(Vy).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},LT=e=>e.isThemeGetter,FT=(e,t)=>t?e.map(([n,r])=>{const a=r.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([i,s])=>[t+i,s])):o);return[n,a]}):e,zT=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const a=(o,i)=>{n.set(o,i),t++,t>e&&(t=0,r=n,n=new Map)};return{get(o){let i=n.get(o);if(i!==void 0)return i;if((i=r.get(o))!==void 0)return a(o,i),i},set(o,i){n.has(o)?n.set(o,i):a(o,i)}}},t8="!",BT=e=>{const{separator:t,experimentalParseClassName:n}=e,r=t.length===1,a=t[0],o=t.length,i=s=>{const l=[];let u=0,p=0,c;for(let g=0;g<s.length;g++){let v=s[g];if(u===0){if(v===a&&(r||s.slice(g,g+o)===t)){l.push(s.slice(p,g)),p=g+o;continue}if(v==="/"){c=g;continue}}v==="["?u++:v==="]"&&u--}const f=l.length===0?s:s.substring(p),d=f.startsWith(t8),h=d?f.substring(1):f,m=c&&c>p?c-p:void 0;return{modifiers:l,hasImportantModifier:d,baseClassName:h,maybePostfixModifierPosition:m}};return n?s=>n({className:s,parseClassName:i}):i},HT=e=>{if(e.length<=1)return e;const t=[];let n=[];return e.forEach(r=>{r[0]==="["?(t.push(...n.sort(),r),n=[]):n.push(r)}),t.push(...n.sort()),t},GT=e=>({cache:zT(e.cacheSize),parseClassName:BT(e),...RT(e)}),UT=/\s+/,WT=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:a}=t,o=[],i=e.trim().split(UT);let s="";for(let l=i.length-1;l>=0;l-=1){const u=i[l],{modifiers:p,hasImportantModifier:c,baseClassName:f,maybePostfixModifierPosition:d}=n(u);let h=!!d,m=r(h?f.substring(0,d):f);if(!m){if(!h){s=u+(s.length>0?" "+s:s);continue}if(m=r(f),!m){s=u+(s.length>0?" "+s:s);continue}h=!1}const g=HT(p).join(":"),v=c?g+t8:g,y=v+m;if(o.includes(y))continue;o.push(y);const x=a(m,h);for(let P=0;P<x.length;++P){const w=x[P];o.push(v+w)}s=u+(s.length>0?" "+s:s)}return s};function qT(){let e=0,t,n,r="";for(;e<arguments.length;)(t=arguments[e++])&&(n=n8(t))&&(r&&(r+=" "),r+=n);return r}const n8=e=>{if(typeof e=="string")return e;let t,n="";for(let r=0;r<e.length;r++)e[r]&&(t=n8(e[r]))&&(n&&(n+=" "),n+=t);return n};function VT(e,...t){let n,r,a,o=i;function i(l){const u=t.reduce((p,c)=>c(p),e());return n=GT(u),r=n.cache.get,a=n.cache.set,o=s,s(l)}function s(l){const u=r(l);if(u)return u;const p=WT(l,n);return a(l,p),p}return function(){return o(qT.apply(null,arguments))}}const Re=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},r8=/^\[(?:([a-z-]+):)?(.+)\]$/i,KT=/^\d+\/\d+$/,XT=new Set(["px","full","screen"]),YT=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,QT=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,ZT=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,JT=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,ej=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,xr=e=>di(e)||XT.has(e)||KT.test(e),Xr=e=>vs(e,"length",lj),di=e=>!!e&&!Number.isNaN(Number(e)),Am=e=>vs(e,"number",di),Fs=e=>!!e&&Number.isInteger(Number(e)),tj=e=>e.endsWith("%")&&di(e.slice(0,-1)),se=e=>r8.test(e),Yr=e=>YT.test(e),nj=new Set(["length","size","percentage"]),rj=e=>vs(e,nj,a8),aj=e=>vs(e,"position",a8),oj=new Set(["image","url"]),ij=e=>vs(e,oj,cj),sj=e=>vs(e,"",uj),zs=()=>!0,vs=(e,t,n)=>{const r=r8.exec(e);return r?r[1]?typeof t=="string"?r[1]===t:t.has(r[1]):n(r[2]):!1},lj=e=>QT.test(e)&&!ZT.test(e),a8=()=>!1,uj=e=>JT.test(e),cj=e=>ej.test(e),pj=()=>{const e=Re("colors"),t=Re("spacing"),n=Re("blur"),r=Re("brightness"),a=Re("borderColor"),o=Re("borderRadius"),i=Re("borderSpacing"),s=Re("borderWidth"),l=Re("contrast"),u=Re("grayscale"),p=Re("hueRotate"),c=Re("invert"),f=Re("gap"),d=Re("gradientColorStops"),h=Re("gradientColorStopPositions"),m=Re("inset"),g=Re("margin"),v=Re("opacity"),y=Re("padding"),x=Re("saturate"),P=Re("scale"),w=Re("sepia"),S=Re("skew"),O=Re("space"),_=Re("translate"),C=()=>["auto","contain","none"],j=()=>["auto","hidden","clip","visible","scroll"],E=()=>["auto",se,t],T=()=>[se,t],N=()=>["",xr,Xr],M=()=>["auto",di,se],I=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],R=()=>["solid","dashed","dotted","double","none"],L=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],$=()=>["start","end","center","between","around","evenly","stretch"],D=()=>["","0",se],H=()=>["auto","avoid","all","avoid-page","page","left","right","column"],W=()=>[di,se];return{cacheSize:500,separator:":",theme:{colors:[zs],spacing:[xr,Xr],blur:["none","",Yr,se],brightness:W(),borderColor:[e],borderRadius:["none","","full",Yr,se],borderSpacing:T(),borderWidth:N(),contrast:W(),grayscale:D(),hueRotate:W(),invert:D(),gap:T(),gradientColorStops:[e],gradientColorStopPositions:[tj,Xr],inset:E(),margin:E(),opacity:W(),padding:T(),saturate:W(),scale:W(),sepia:D(),skew:W(),space:T(),translate:T()},classGroups:{aspect:[{aspect:["auto","square","video",se]}],container:["container"],columns:[{columns:[Yr]}],"break-after":[{"break-after":H()}],"break-before":[{"break-before":H()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...I(),se]}],overflow:[{overflow:j()}],"overflow-x":[{"overflow-x":j()}],"overflow-y":[{"overflow-y":j()}],overscroll:[{overscroll:C()}],"overscroll-x":[{"overscroll-x":C()}],"overscroll-y":[{"overscroll-y":C()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[m]}],"inset-x":[{"inset-x":[m]}],"inset-y":[{"inset-y":[m]}],start:[{start:[m]}],end:[{end:[m]}],top:[{top:[m]}],right:[{right:[m]}],bottom:[{bottom:[m]}],left:[{left:[m]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Fs,se]}],basis:[{basis:E()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",se]}],grow:[{grow:D()}],shrink:[{shrink:D()}],order:[{order:["first","last","none",Fs,se]}],"grid-cols":[{"grid-cols":[zs]}],"col-start-end":[{col:["auto",{span:["full",Fs,se]},se]}],"col-start":[{"col-start":M()}],"col-end":[{"col-end":M()}],"grid-rows":[{"grid-rows":[zs]}],"row-start-end":[{row:["auto",{span:[Fs,se]},se]}],"row-start":[{"row-start":M()}],"row-end":[{"row-end":M()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",se]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",se]}],gap:[{gap:[f]}],"gap-x":[{"gap-x":[f]}],"gap-y":[{"gap-y":[f]}],"justify-content":[{justify:["normal",...$()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...$(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...$(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[y]}],px:[{px:[y]}],py:[{py:[y]}],ps:[{ps:[y]}],pe:[{pe:[y]}],pt:[{pt:[y]}],pr:[{pr:[y]}],pb:[{pb:[y]}],pl:[{pl:[y]}],m:[{m:[g]}],mx:[{mx:[g]}],my:[{my:[g]}],ms:[{ms:[g]}],me:[{me:[g]}],mt:[{mt:[g]}],mr:[{mr:[g]}],mb:[{mb:[g]}],ml:[{ml:[g]}],"space-x":[{"space-x":[O]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[O]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",se,t]}],"min-w":[{"min-w":[se,t,"min","max","fit"]}],"max-w":[{"max-w":[se,t,"none","full","min","max","fit","prose",{screen:[Yr]},Yr]}],h:[{h:[se,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[se,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[se,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[se,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Yr,Xr]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Am]}],"font-family":[{font:[zs]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",se]}],"line-clamp":[{"line-clamp":["none",di,Am]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",xr,se]}],"list-image":[{"list-image":["none",se]}],"list-style-type":[{list:["none","disc","decimal",se]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[v]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[v]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...R(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",xr,Xr]}],"underline-offset":[{"underline-offset":["auto",xr,se]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:T()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",se]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",se]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[v]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...I(),aj]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",rj]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},ij]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[h]}],"gradient-via-pos":[{via:[h]}],"gradient-to-pos":[{to:[h]}],"gradient-from":[{from:[d]}],"gradient-via":[{via:[d]}],"gradient-to":[{to:[d]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[s]}],"border-w-x":[{"border-x":[s]}],"border-w-y":[{"border-y":[s]}],"border-w-s":[{"border-s":[s]}],"border-w-e":[{"border-e":[s]}],"border-w-t":[{"border-t":[s]}],"border-w-r":[{"border-r":[s]}],"border-w-b":[{"border-b":[s]}],"border-w-l":[{"border-l":[s]}],"border-opacity":[{"border-opacity":[v]}],"border-style":[{border:[...R(),"hidden"]}],"divide-x":[{"divide-x":[s]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[s]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[v]}],"divide-style":[{divide:R()}],"border-color":[{border:[a]}],"border-color-x":[{"border-x":[a]}],"border-color-y":[{"border-y":[a]}],"border-color-s":[{"border-s":[a]}],"border-color-e":[{"border-e":[a]}],"border-color-t":[{"border-t":[a]}],"border-color-r":[{"border-r":[a]}],"border-color-b":[{"border-b":[a]}],"border-color-l":[{"border-l":[a]}],"divide-color":[{divide:[a]}],"outline-style":[{outline:["",...R()]}],"outline-offset":[{"outline-offset":[xr,se]}],"outline-w":[{outline:[xr,Xr]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:N()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[v]}],"ring-offset-w":[{"ring-offset":[xr,Xr]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Yr,sj]}],"shadow-color":[{shadow:[zs]}],opacity:[{opacity:[v]}],"mix-blend":[{"mix-blend":[...L(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":L()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[l]}],"drop-shadow":[{"drop-shadow":["","none",Yr,se]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[p]}],invert:[{invert:[c]}],saturate:[{saturate:[x]}],sepia:[{sepia:[w]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[l]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[p]}],"backdrop-invert":[{"backdrop-invert":[c]}],"backdrop-opacity":[{"backdrop-opacity":[v]}],"backdrop-saturate":[{"backdrop-saturate":[x]}],"backdrop-sepia":[{"backdrop-sepia":[w]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",se]}],duration:[{duration:W()}],ease:[{ease:["linear","in","out","in-out",se]}],delay:[{delay:W()}],animate:[{animate:["none","spin","ping","pulse","bounce",se]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[P]}],"scale-x":[{"scale-x":[P]}],"scale-y":[{"scale-y":[P]}],rotate:[{rotate:[Fs,se]}],"translate-x":[{"translate-x":[_]}],"translate-y":[{"translate-y":[_]}],"skew-x":[{"skew-x":[S]}],"skew-y":[{"skew-y":[S]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",se]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",se]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":T()}],"scroll-mx":[{"scroll-mx":T()}],"scroll-my":[{"scroll-my":T()}],"scroll-ms":[{"scroll-ms":T()}],"scroll-me":[{"scroll-me":T()}],"scroll-mt":[{"scroll-mt":T()}],"scroll-mr":[{"scroll-mr":T()}],"scroll-mb":[{"scroll-mb":T()}],"scroll-ml":[{"scroll-ml":T()}],"scroll-p":[{"scroll-p":T()}],"scroll-px":[{"scroll-px":T()}],"scroll-py":[{"scroll-py":T()}],"scroll-ps":[{"scroll-ps":T()}],"scroll-pe":[{"scroll-pe":T()}],"scroll-pt":[{"scroll-pt":T()}],"scroll-pr":[{"scroll-pr":T()}],"scroll-pb":[{"scroll-pb":T()}],"scroll-pl":[{"scroll-pl":T()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",se]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[xr,Xr,Am]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},fj=VT(pj);function Oe(...e){return fj(ue(e))}const dj=mT,mj=hT,o8=k.forwardRef(({className:e,children:t,...n},r)=>b.jsxs(R4,{ref:r,className:Oe("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...n,children:[t,b.jsx(vT,{asChild:!0,children:b.jsx(W4,{className:"h-4 w-4 opacity-50"})})]}));o8.displayName=R4.displayName;const i8=k.forwardRef(({className:e,...t},n)=>b.jsx(F4,{ref:n,className:Oe("flex cursor-default items-center justify-center py-1",e),...t,children:b.jsx(_T,{className:"h-4 w-4"})}));i8.displayName=F4.displayName;const s8=k.forwardRef(({className:e,...t},n)=>b.jsx(z4,{ref:n,className:Oe("flex cursor-default items-center justify-center py-1",e),...t,children:b.jsx(W4,{className:"h-4 w-4"})}));s8.displayName=z4.displayName;const l8=k.forwardRef(({className:e,children:t,position:n="popper",...r},a)=>(k.useEffect(()=>{const o=()=>{document.querySelectorAll("[data-radix-popper-content-wrapper]").forEach(l=>{const u=l;u.style.setProperty("--popover","0 0% 100%"),u.style.setProperty("--popover-foreground","222.2 84% 4.9%"),u.style.setProperty("--border","214.3 31.8% 91.4%"),u.style.setProperty("--background","0 0% 100%"),u.style.setProperty("--foreground","222.2 84% 4.9%"),(document.documentElement.classList.contains("dark")||document.body.classList.contains("dark"))&&(u.style.setProperty("--popover","222.2 84% 4.9%"),u.style.setProperty("--popover-foreground","210 40% 98%"),u.style.setProperty("--border","217.2 32.6% 17.5%"),u.style.setProperty("--background","222.2 84% 4.9%"),u.style.setProperty("--foreground","210 40% 98%"))})};o();const i=setTimeout(o,100);return()=>clearTimeout(i)}),b.jsx(yT,{children:b.jsxs(I4,{ref:a,className:Oe("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:n,...r,children:[b.jsx(i8,{}),b.jsx(gT,{className:Oe("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),b.jsx(s8,{})]})})));l8.displayName=I4.displayName;const hj=k.forwardRef(({className:e,...t},n)=>b.jsx(D4,{ref:n,className:Oe("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));hj.displayName=D4.displayName;const u8=k.forwardRef(({className:e,children:t,...n},r)=>b.jsxs(L4,{ref:r,className:Oe("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...n,children:[b.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:b.jsx(wT,{children:b.jsx(kT,{className:"h-4 w-4"})})}),b.jsx(xT,{children:t})]}));u8.displayName=L4.displayName;const vj=k.forwardRef(({className:e,...t},n)=>b.jsx(B4,{ref:n,className:Oe("-mx-1 my-1 h-px bg-muted",e),...t}));vj.displayName=B4.displayName;const Vx=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,Kx=ue,c8=(e,t)=>n=>{var r;if((t==null?void 0:t.variants)==null)return Kx(e,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:a,defaultVariants:o}=t,i=Object.keys(a).map(u=>{const p=n==null?void 0:n[u],c=o==null?void 0:o[u];if(p===null)return null;const f=Vx(p)||Vx(c);return a[u][f]}),s=n&&Object.entries(n).reduce((u,p)=>{let[c,f]=p;return f===void 0||(u[c]=f),u},{}),l=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((u,p)=>{let{class:c,className:f,...d}=p;return Object.entries(d).every(h=>{let[m,g]=h;return Array.isArray(g)?g.includes({...o,...s}[m]):{...o,...s}[m]===g})?[...u,c,f]:u},[]);return Kx(e,i,l,n==null?void 0:n.class,n==null?void 0:n.className)},yj=c8("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function gj({className:e,variant:t,...n}){return b.jsx("div",{className:Oe(yj({variant:t}),e),...n})}const xj=c8("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),wp=k.forwardRef(({className:e,variant:t,size:n,asChild:r=!1,...a},o)=>{const i=r?sC:"button";return b.jsx(i,{className:Oe(xj({variant:t,size:n,className:e})),ref:o,...a})});wp.displayName="Button";const wj=({selectedVersion:e,availableVersions:t,onVersionChange:n,metadata:r,onDownloadReport:a})=>{const o=p=>{try{return new Date(p).toLocaleDateString()}catch{return p}},i=p=>`https://github.com/envoyproxy/gateway/releases/tag/v${p}`,s=p=>`https://github.com/envoyproxy/gateway/releases/download/v${p}/benchmark_report.zip`,l=()=>{const p=i(e);window.open(p,"_blank","noopener,noreferrer")},u=()=>{const p=s(e);window.open(p,"_blank","noopener,noreferrer")};return b.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center gap-3",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("label",{className:"text-sm font-medium text-gray-700",children:"Version:"}),b.jsxs(dj,{value:e,onValueChange:n,children:[b.jsx(o8,{className:"w-32",children:b.jsx(mj,{})}),b.jsx(l8,{children:t.map(p=>b.jsxs(u8,{value:p,children:["v",p]},p))})]})]}),r&&b.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-gray-600",children:[b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(OT,{className:"h-3 w-3"}),b.jsx("span",{children:o(r.date)})]}),r.environment&&b.jsx(gj,{variant:"secondary",className:"text-xs",children:r.environment}),r.gitCommit&&b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(X4,{className:"h-3 w-3"}),b.jsx("span",{className:"font-mono",children:r.gitCommit.substring(0,7)})]}),r.description&&b.jsx("span",{className:"hidden sm:inline max-w-xs truncate",title:r.description,children:r.description})]}),b.jsxs("div",{className:"flex items-center gap-2 ml-auto",children:[b.jsxs(wp,{variant:"outline",size:"sm",onClick:l,className:"flex items-center gap-1 text-xs",children:[b.jsx(AT,{className:"h-3 w-3"}),"View Release"]}),b.jsxs(wp,{variant:"outline",size:"sm",onClick:u,className:"flex items-center gap-1 text-xs",children:[b.jsx(U4,{className:"h-3 w-3"}),"Download Benchmark"]})]})]})},xe=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("rounded-lg border bg-card text-card-foreground shadow-sm",e),...t}));xe.displayName="Card";const Se=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("flex flex-col space-y-1.5 p-6",e),...t}));Se.displayName="CardHeader";const we=k.forwardRef(({className:e,...t},n)=>b.jsx("h3",{ref:n,className:Oe("text-2xl font-semibold leading-none tracking-tight",e),...t}));we.displayName="CardTitle";const tn=k.forwardRef(({className:e,...t},n)=>b.jsx("p",{ref:n,className:Oe("text-sm text-muted-foreground",e),...t}));tn.displayName="CardDescription";const be=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("p-6 pt-0",e),...t}));be.displayName="CardContent";const bj=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("flex items-center p-6 pt-0",e),...t}));bj.displayName="CardFooter";const Pj=({performanceSummary:e,benchmarkResults:t})=>{const n=Math.round(Math.max(...t.map(i=>i.throughput))),r=Math.round(e.avgLatency/1e3),a=Math.round(Math.max(...t.map(i=>i.resources.envoyGateway.memory.mean+i.resources.envoyProxy.memory.mean))),o=e.maxRoutes;return b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4 mb-8",children:[b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center",children:[b.jsx(G4,{className:"h-4 w-4 mr-2"}),"Max Throughput in Test"]})}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[n.toLocaleString()," RPS"]}),b.jsx("p",{className:"text-purple-100 text-sm",children:"Requests per second"})]})]}),b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center",children:[b.jsx(V4,{className:"h-4 w-4 mr-2"}),"Mean Response Time"]})}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[r,"ms"]}),b.jsx("p",{className:"text-purple-100 text-sm",children:"End-to-end via Nighthawk"})]})]}),b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center",children:[b.jsx(TT,{className:"h-4 w-4 mr-2"}),"Memory Usage"]})}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[a,"MB"]}),b.jsxs("p",{className:"text-purple-100 text-sm",children:["Peak at ",o," routes"]})]})]}),b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center text",children:[b.jsx(Q4,{className:"h-4 w-4 mr-2"}),"Max Routes in Test"]})}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:o.toLocaleString()}),b.jsx("p",{className:"text-purple-100 text-sm",children:"HTTPRoutes tested"})]})]})]})};var Sj=Array.isArray,Vt=Sj,Oj=typeof Bu=="object"&&Bu&&Bu.Object===Object&&Bu,p8=Oj,kj=p8,_j=typeof self=="object"&&self&&self.Object===Object&&self,Cj=kj||_j||Function("return this")(),gr=Cj,Aj=gr,Ej=Aj.Symbol,$u=Ej,Xx=$u,f8=Object.prototype,Tj=f8.hasOwnProperty,jj=f8.toString,Bs=Xx?Xx.toStringTag:void 0;function $j(e){var t=Tj.call(e,Bs),n=e[Bs];try{e[Bs]=void 0;var r=!0}catch{}var a=jj.call(e);return r&&(t?e[Bs]=n:delete e[Bs]),a}var Nj=$j,Mj=Object.prototype,Rj=Mj.toString;function Ij(e){return Rj.call(e)}var Dj=Ij,Yx=$u,Lj=Nj,Fj=Dj,zj="[object Null]",Bj="[object Undefined]",Qx=Yx?Yx.toStringTag:void 0;function Hj(e){return e==null?e===void 0?Bj:zj:Qx&&Qx in Object(e)?Lj(e):Fj(e)}var Ur=Hj;function Gj(e){return e!=null&&typeof e=="object"}var Wr=Gj,Uj=Ur,Wj=Wr,qj="[object Symbol]";function Vj(e){return typeof e=="symbol"||Wj(e)&&Uj(e)==qj}var ys=Vj,Kj=Vt,Xj=ys,Yj=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Qj=/^\w*$/;function Zj(e,t){if(Kj(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||Xj(e)?!0:Qj.test(e)||!Yj.test(e)||t!=null&&e in Object(t)}var Ky=Zj;function Jj(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var Ra=Jj;const gs=Ae(Ra);var e$=Ur,t$=Ra,n$="[object AsyncFunction]",r$="[object Function]",a$="[object GeneratorFunction]",o$="[object Proxy]";function i$(e){if(!t$(e))return!1;var t=e$(e);return t==r$||t==a$||t==n$||t==o$}var Xy=i$;const oe=Ae(Xy);var s$=gr,l$=s$["__core-js_shared__"],u$=l$,Em=u$,Zx=function(){var e=/[^.]+$/.exec(Em&&Em.keys&&Em.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function c$(e){return!!Zx&&Zx in e}var p$=c$,f$=Function.prototype,d$=f$.toString;function m$(e){if(e!=null){try{return d$.call(e)}catch{}try{return e+""}catch{}}return""}var d8=m$,h$=Xy,v$=p$,y$=Ra,g$=d8,x$=/[\\^$.*+?()[\]{}|]/g,w$=/^\[object .+?Constructor\]$/,b$=Function.prototype,P$=Object.prototype,S$=b$.toString,O$=P$.hasOwnProperty,k$=RegExp("^"+S$.call(O$).replace(x$,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function _$(e){if(!y$(e)||v$(e))return!1;var t=h$(e)?k$:w$;return t.test(g$(e))}var C$=_$;function A$(e,t){return e==null?void 0:e[t]}var E$=A$,T$=C$,j$=E$;function $$(e,t){var n=j$(e,t);return T$(n)?n:void 0}var jo=$$,N$=jo,M$=N$(Object,"create"),Xf=M$,Jx=Xf;function R$(){this.__data__=Jx?Jx(null):{},this.size=0}var I$=R$;function D$(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var L$=D$,F$=Xf,z$="__lodash_hash_undefined__",B$=Object.prototype,H$=B$.hasOwnProperty;function G$(e){var t=this.__data__;if(F$){var n=t[e];return n===z$?void 0:n}return H$.call(t,e)?t[e]:void 0}var U$=G$,W$=Xf,q$=Object.prototype,V$=q$.hasOwnProperty;function K$(e){var t=this.__data__;return W$?t[e]!==void 0:V$.call(t,e)}var X$=K$,Y$=Xf,Q$="__lodash_hash_undefined__";function Z$(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Y$&&t===void 0?Q$:t,this}var J$=Z$,eN=I$,tN=L$,nN=U$,rN=X$,aN=J$;function xs(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}xs.prototype.clear=eN;xs.prototype.delete=tN;xs.prototype.get=nN;xs.prototype.has=rN;xs.prototype.set=aN;var oN=xs;function iN(){this.__data__=[],this.size=0}var sN=iN;function lN(e,t){return e===t||e!==e&&t!==t}var Yy=lN,uN=Yy;function cN(e,t){for(var n=e.length;n--;)if(uN(e[n][0],t))return n;return-1}var Yf=cN,pN=Yf,fN=Array.prototype,dN=fN.splice;function mN(e){var t=this.__data__,n=pN(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():dN.call(t,n,1),--this.size,!0}var hN=mN,vN=Yf;function yN(e){var t=this.__data__,n=vN(t,e);return n<0?void 0:t[n][1]}var gN=yN,xN=Yf;function wN(e){return xN(this.__data__,e)>-1}var bN=wN,PN=Yf;function SN(e,t){var n=this.__data__,r=PN(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var ON=SN,kN=sN,_N=hN,CN=gN,AN=bN,EN=ON;function ws(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}ws.prototype.clear=kN;ws.prototype.delete=_N;ws.prototype.get=CN;ws.prototype.has=AN;ws.prototype.set=EN;var Qf=ws,TN=jo,jN=gr,$N=TN(jN,"Map"),Qy=$N,ew=oN,NN=Qf,MN=Qy;function RN(){this.size=0,this.__data__={hash:new ew,map:new(MN||NN),string:new ew}}var IN=RN;function DN(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var LN=DN,FN=LN;function zN(e,t){var n=e.__data__;return FN(t)?n[typeof t=="string"?"string":"hash"]:n.map}var Zf=zN,BN=Zf;function HN(e){var t=BN(this,e).delete(e);return this.size-=t?1:0,t}var GN=HN,UN=Zf;function WN(e){return UN(this,e).get(e)}var qN=WN,VN=Zf;function KN(e){return VN(this,e).has(e)}var XN=KN,YN=Zf;function QN(e,t){var n=YN(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var ZN=QN,JN=IN,eM=GN,tM=qN,nM=XN,rM=ZN;function bs(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}bs.prototype.clear=JN;bs.prototype.delete=eM;bs.prototype.get=tM;bs.prototype.has=nM;bs.prototype.set=rM;var Zy=bs,m8=Zy,aM="Expected a function";function Jy(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(aM);var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],o=n.cache;if(o.has(a))return o.get(a);var i=e.apply(this,r);return n.cache=o.set(a,i)||o,i};return n.cache=new(Jy.Cache||m8),n}Jy.Cache=m8;var h8=Jy;const oM=Ae(h8);var iM=h8,sM=500;function lM(e){var t=iM(e,function(r){return n.size===sM&&n.clear(),r}),n=t.cache;return t}var uM=lM,cM=uM,pM=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,fM=/\\(\\)?/g,dM=cM(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(pM,function(n,r,a,o){t.push(a?o.replace(fM,"$1"):r||n)}),t}),mM=dM;function hM(e,t){for(var n=-1,r=e==null?0:e.length,a=Array(r);++n<r;)a[n]=t(e[n],n,e);return a}var eg=hM,tw=$u,vM=eg,yM=Vt,gM=ys,nw=tw?tw.prototype:void 0,rw=nw?nw.toString:void 0;function v8(e){if(typeof e=="string")return e;if(yM(e))return vM(e,v8)+"";if(gM(e))return rw?rw.call(e):"";var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}var xM=v8,wM=xM;function bM(e){return e==null?"":wM(e)}var y8=bM,PM=Vt,SM=Ky,OM=mM,kM=y8;function _M(e,t){return PM(e)?e:SM(e,t)?[e]:OM(kM(e))}var g8=_M,CM=ys;function AM(e){if(typeof e=="string"||CM(e))return e;var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}var Jf=AM,EM=g8,TM=Jf;function jM(e,t){t=EM(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[TM(t[n++])];return n&&n==r?e:void 0}var tg=jM,$M=tg;function NM(e,t,n){var r=e==null?void 0:$M(e,t);return r===void 0?n:r}var x8=NM;const gn=Ae(x8);function MM(e){return e==null}var RM=MM;const te=Ae(RM);var IM=Ur,DM=Vt,LM=Wr,FM="[object String]";function zM(e){return typeof e=="string"||!DM(e)&&LM(e)&&IM(e)==FM}var BM=zM;const So=Ae(BM);var w8={exports:{}},_e={};/**
  * @license React
  * react-is.production.min.js
  *
@@ -210,80 +210,80 @@ Error generating stack: `+o.message+`
  *
  * This source code is licensed under the MIT license found in the
  * LICENSE file in the root directory of this source tree.
- */var ng=Symbol.for("react.element"),rg=Symbol.for("react.portal"),ed=Symbol.for("react.fragment"),td=Symbol.for("react.strict_mode"),nd=Symbol.for("react.profiler"),rd=Symbol.for("react.provider"),ad=Symbol.for("react.context"),CM=Symbol.for("react.server_context"),od=Symbol.for("react.forward_ref"),id=Symbol.for("react.suspense"),sd=Symbol.for("react.suspense_list"),ld=Symbol.for("react.memo"),ud=Symbol.for("react.lazy"),EM=Symbol.for("react.offscreen"),g8;g8=Symbol.for("react.module.reference");function Pn(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case ng:switch(e=e.type,e){case ed:case nd:case td:case id:case sd:return e;default:switch(e=e&&e.$$typeof,e){case CM:case ad:case od:case ud:case ld:case rd:return e;default:return t}}case rg:return t}}}_e.ContextConsumer=ad;_e.ContextProvider=rd;_e.Element=ng;_e.ForwardRef=od;_e.Fragment=ed;_e.Lazy=ud;_e.Memo=ld;_e.Portal=rg;_e.Profiler=nd;_e.StrictMode=td;_e.Suspense=id;_e.SuspenseList=sd;_e.isAsyncMode=function(){return!1};_e.isConcurrentMode=function(){return!1};_e.isContextConsumer=function(e){return Pn(e)===ad};_e.isContextProvider=function(e){return Pn(e)===rd};_e.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===ng};_e.isForwardRef=function(e){return Pn(e)===od};_e.isFragment=function(e){return Pn(e)===ed};_e.isLazy=function(e){return Pn(e)===ud};_e.isMemo=function(e){return Pn(e)===ld};_e.isPortal=function(e){return Pn(e)===rg};_e.isProfiler=function(e){return Pn(e)===nd};_e.isStrictMode=function(e){return Pn(e)===td};_e.isSuspense=function(e){return Pn(e)===id};_e.isSuspenseList=function(e){return Pn(e)===sd};_e.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===ed||e===nd||e===td||e===id||e===sd||e===EM||typeof e=="object"&&e!==null&&(e.$$typeof===ud||e.$$typeof===ld||e.$$typeof===rd||e.$$typeof===ad||e.$$typeof===od||e.$$typeof===g8||e.getModuleId!==void 0)};_e.typeOf=Pn;y8.exports=_e;var TM=y8.exports,jM=Ur,$M=Wr,NM="[object Number]";function MM(e){return typeof e=="number"||$M(e)&&jM(e)==NM}var x8=MM;const RM=Ce(x8);var IM=x8;function DM(e){return IM(e)&&e!=+e}var LM=DM;const Ps=Ce(LM);var Dn=function(t){return t===0?0:t>0?1:-1},Za=function(t){return So(t)&&t.indexOf("%")===t.length-1},V=function(t){return RM(t)&&!Ps(t)},FM=function(t){return te(t)},it=function(t){return V(t)||So(t)},zM=0,$o=function(t){var n=++zM;return"".concat(t||"").concat(n)},Oo=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!V(t)&&!So(t))return r;var o;if(Za(t)){var i=t.indexOf("%");o=n*parseFloat(t.slice(0,i))/100}else o=+t;return Ps(o)&&(o=r),a&&o>n&&(o=n),o},oa=function(t){if(!t)return null;var n=Object.keys(t);return n&&n.length?t[n[0]]:null},BM=function(t){if(!Array.isArray(t))return!1;for(var n=t.length,r={},a=0;a<n;a++)if(!r[t[a]])r[t[a]]=!0;else return!0;return!1},Xe=function(t,n){return V(t)&&V(n)?function(r){return t+r*(n-t)}:function(){return n}};function Pf(e,t,n){return!e||!e.length?null:e.find(function(r){return r&&(typeof t=="function"?t(r):gn(r,t))===n})}var HM=function(t){if(!t||!t.length)return null;for(var n=t.length,r=0,a=0,o=0,i=0,s=1/0,l=-1/0,u=0,f=0,c=0;c<n;c++)u=t[c].cx||0,f=t[c].cy||0,r+=u,a+=f,o+=u*f,i+=u*u,s=Math.min(s,u),l=Math.max(l,u);var p=n*i!==r*r?(n*o-r*a)/(n*i-r*r):0;return{xmin:s,xmax:l,a:p,b:(a-p*r)/n}},GM=function(t,n){return V(t)&&V(n)?t-n:So(t)&&So(n)?t.localeCompare(n):t instanceof Date&&n instanceof Date?t.getTime()-n.getTime():String(t).localeCompare(String(n))};function mi(e,t){for(var n in e)if({}.hasOwnProperty.call(e,n)&&(!{}.hasOwnProperty.call(t,n)||e[n]!==t[n]))return!1;for(var r in t)if({}.hasOwnProperty.call(t,r)&&!{}.hasOwnProperty.call(e,r))return!1;return!0}function lv(e){"@babel/helpers - typeof";return lv=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},lv(e)}var UM=["viewBox","children"],WM=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],nw=["points","pathLength"],Tm={svg:UM,polygon:nw,polyline:nw},ag=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],Sf=function(t,n){if(!t||typeof t=="function"||typeof t=="boolean")return null;var r=t;if(k.isValidElement(t)&&(r=t.props),!gs(r))return null;var a={};return Object.keys(r).forEach(function(o){ag.includes(o)&&(a[o]=n||function(i){return r[o](r,i)})}),a},qM=function(t,n,r){return function(a){return t(n,r,a),null}},Fl=function(t,n,r){if(!gs(t)||lv(t)!=="object")return null;var a=null;return Object.keys(t).forEach(function(o){var i=t[o];ag.includes(o)&&typeof i=="function"&&(a||(a={}),a[o]=qM(i,n,r))}),a},VM=["children"],KM=["children"];function rw(e,t){if(e==null)return{};var n=XM(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XM(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function uv(e){"@babel/helpers - typeof";return uv=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},uv(e)}var aw={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},jr=function(t){return typeof t=="string"?t:t?t.displayName||t.name||"Component":""},ow=null,jm=null,og=function e(t){if(t===ow&&Array.isArray(jm))return jm;var n=[];return k.Children.forEach(t,function(r){te(r)||(TM.isFragment(r)?n=n.concat(e(r.props.children)):n.push(r))}),jm=n,ow=t,n};function qt(e,t){var n=[],r=[];return Array.isArray(t)?r=t.map(function(a){return jr(a)}):r=[jr(t)],og(e).forEach(function(a){var o=gn(a,"type.displayName")||gn(a,"type.name");r.indexOf(o)!==-1&&n.push(a)}),n}function Qt(e,t){var n=qt(e,t);return n&&n[0]}var iw=function(t){if(!t||!t.props)return!1;var n=t.props,r=n.width,a=n.height;return!(!V(r)||r<=0||!V(a)||a<=0)},YM=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],QM=function(t){return t&&t.type&&So(t.type)&&YM.indexOf(t.type)>=0},w8=function(t){return t&&uv(t)==="object"&&"clipDot"in t},ZM=function(t,n,r,a){var o,i=(o=Tm==null?void 0:Tm[a])!==null&&o!==void 0?o:[];return n.startsWith("data-")||!oe(t)&&(a&&i.includes(n)||WM.includes(n))||r&&ag.includes(n)},re=function(t,n,r){if(!t||typeof t=="function"||typeof t=="boolean")return null;var a=t;if(k.isValidElement(t)&&(a=t.props),!gs(a))return null;var o={};return Object.keys(a).forEach(function(i){var s;ZM((s=a)===null||s===void 0?void 0:s[i],i,n,r)&&(o[i]=a[i])}),o},cv=function e(t,n){if(t===n)return!0;var r=k.Children.count(t);if(r!==k.Children.count(n))return!1;if(r===0)return!0;if(r===1)return sw(Array.isArray(t)?t[0]:t,Array.isArray(n)?n[0]:n);for(var a=0;a<r;a++){var o=t[a],i=n[a];if(Array.isArray(o)||Array.isArray(i)){if(!e(o,i))return!1}else if(!sw(o,i))return!1}return!0},sw=function(t,n){if(te(t)&&te(n))return!0;if(!te(t)&&!te(n)){var r=t.props||{},a=r.children,o=rw(r,VM),i=n.props||{},s=i.children,l=rw(i,KM);return a&&s?mi(o,l)&&cv(a,s):!a&&!s?mi(o,l):!1}return!1},lw=function(t,n){var r=[],a={};return og(t).forEach(function(o,i){if(QM(o))r.push(o);else if(o){var s=jr(o.type),l=n[s]||{},u=l.handler,f=l.once;if(u&&(!f||!a[s])){var c=u(o,s,i);r.push(c),a[s]=!0}}}),r},JM=function(t){var n=t&&t.type;return n&&aw[n]?aw[n]:null},eR=function(t,n){return og(n).indexOf(t)},tR=["children","width","height","viewBox","className","style","title","desc"];function fv(){return fv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},fv.apply(this,arguments)}function nR(e,t){if(e==null)return{};var n=rR(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rR(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function pv(e){var t=e.children,n=e.width,r=e.height,a=e.viewBox,o=e.className,i=e.style,s=e.title,l=e.desc,u=nR(e,tR),f=a||{width:n,height:r,x:0,y:0},c=ue("recharts-surface",o);return C.createElement("svg",fv({},re(u,!0,"svg"),{className:c,width:n,height:r,style:i,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height)}),C.createElement("title",null,s),C.createElement("desc",null,l),t)}var aR=["children","className"];function dv(){return dv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},dv.apply(this,arguments)}function oR(e,t){if(e==null)return{};var n=iR(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iR(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var ye=C.forwardRef(function(e,t){var n=e.children,r=e.className,a=oR(e,aR),o=ue("recharts-layer",r);return C.createElement("g",dv({className:o},re(a,!0),{ref:t}),n)}),$r=function(t,n){for(var r=arguments.length,a=new Array(r>2?r-2:0),o=2;o<r;o++)a[o-2]=arguments[o]};function sR(e,t,n){var r=-1,a=e.length;t<0&&(t=-t>a?0:a+t),n=n>a?a:n,n<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(a);++r<a;)o[r]=e[r+t];return o}var lR=sR,uR=lR;function cR(e,t,n){var r=e.length;return n=n===void 0?r:n,!t&&n>=r?e:uR(e,t,n)}var fR=cR,pR="\\ud800-\\udfff",dR="\\u0300-\\u036f",mR="\\ufe20-\\ufe2f",hR="\\u20d0-\\u20ff",vR=dR+mR+hR,yR="\\ufe0e\\ufe0f",gR="\\u200d",xR=RegExp("["+gR+pR+vR+yR+"]");function wR(e){return xR.test(e)}var b8=wR;function bR(e){return e.split("")}var PR=bR,P8="\\ud800-\\udfff",SR="\\u0300-\\u036f",OR="\\ufe20-\\ufe2f",kR="\\u20d0-\\u20ff",_R=SR+OR+kR,AR="\\ufe0e\\ufe0f",CR="["+P8+"]",mv="["+_R+"]",hv="\\ud83c[\\udffb-\\udfff]",ER="(?:"+mv+"|"+hv+")",S8="[^"+P8+"]",O8="(?:\\ud83c[\\udde6-\\uddff]){2}",k8="[\\ud800-\\udbff][\\udc00-\\udfff]",TR="\\u200d",_8=ER+"?",A8="["+AR+"]?",jR="(?:"+TR+"(?:"+[S8,O8,k8].join("|")+")"+A8+_8+")*",$R=A8+_8+jR,NR="(?:"+[S8+mv+"?",mv,O8,k8,CR].join("|")+")",MR=RegExp(hv+"(?="+hv+")|"+NR+$R,"g");function RR(e){return e.match(MR)||[]}var IR=RR,DR=PR,LR=b8,FR=IR;function zR(e){return LR(e)?FR(e):DR(e)}var BR=zR,HR=fR,GR=b8,UR=BR,WR=m8;function qR(e){return function(t){t=WR(t);var n=GR(t)?UR(t):void 0,r=n?n[0]:t.charAt(0),a=n?HR(n,1).join(""):t.slice(1);return r[e]()+a}}var VR=qR,KR=VR,XR=KR("toUpperCase"),YR=XR;const cd=Ce(YR);function je(e){return function(){return e}}const C8=Math.cos,Of=Math.sin,Kn=Math.sqrt,kf=Math.PI,fd=2*kf,vv=Math.PI,yv=2*vv,qa=1e-6,QR=yv-qa;function E8(e){this._+=e[0];for(let t=1,n=e.length;t<n;++t)this._+=arguments[t]+e[t]}function ZR(e){let t=Math.floor(e);if(!(t>=0))throw new Error(`invalid digits: ${e}`);if(t>15)return E8;const n=10**t;return function(r){this._+=r[0];for(let a=1,o=r.length;a<o;++a)this._+=Math.round(arguments[a]*n)/n+r[a]}}class JR{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=t==null?E8:ZR(t)}moveTo(t,n){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,n){this._append`L${this._x1=+t},${this._y1=+n}`}quadraticCurveTo(t,n,r,a){this._append`Q${+t},${+n},${this._x1=+r},${this._y1=+a}`}bezierCurveTo(t,n,r,a,o,i){this._append`C${+t},${+n},${+r},${+a},${this._x1=+o},${this._y1=+i}`}arcTo(t,n,r,a,o){if(t=+t,n=+n,r=+r,a=+a,o=+o,o<0)throw new Error(`negative radius: ${o}`);let i=this._x1,s=this._y1,l=r-t,u=a-n,f=i-t,c=s-n,p=f*f+c*c;if(this._x1===null)this._append`M${this._x1=t},${this._y1=n}`;else if(p>qa)if(!(Math.abs(c*l-u*f)>qa)||!o)this._append`L${this._x1=t},${this._y1=n}`;else{let d=r-i,h=a-s,m=l*l+u*u,g=d*d+h*h,v=Math.sqrt(m),y=Math.sqrt(p),x=o*Math.tan((vv-Math.acos((m+p-g)/(2*v*y)))/2),P=x/y,w=x/v;Math.abs(P-1)>qa&&this._append`L${t+P*f},${n+P*c}`,this._append`A${o},${o},0,0,${+(c*d>f*h)},${this._x1=t+w*l},${this._y1=n+w*u}`}}arc(t,n,r,a,o,i){if(t=+t,n=+n,r=+r,i=!!i,r<0)throw new Error(`negative radius: ${r}`);let s=r*Math.cos(a),l=r*Math.sin(a),u=t+s,f=n+l,c=1^i,p=i?a-o:o-a;this._x1===null?this._append`M${u},${f}`:(Math.abs(this._x1-u)>qa||Math.abs(this._y1-f)>qa)&&this._append`L${u},${f}`,r&&(p<0&&(p=p%yv+yv),p>QR?this._append`A${r},${r},0,1,${c},${t-s},${n-l}A${r},${r},0,1,${c},${this._x1=u},${this._y1=f}`:p>qa&&this._append`A${r},${r},0,${+(p>=vv)},${c},${this._x1=t+r*Math.cos(o)},${this._y1=n+r*Math.sin(o)}`)}rect(t,n,r,a){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}h${r=+r}v${+a}h${-r}Z`}toString(){return this._}}function ig(e){let t=3;return e.digits=function(n){if(!arguments.length)return t;if(n==null)t=null;else{const r=Math.floor(n);if(!(r>=0))throw new RangeError(`invalid digits: ${n}`);t=r}return e},()=>new JR(t)}function sg(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function T8(e){this._context=e}T8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function pd(e){return new T8(e)}function j8(e){return e[0]}function $8(e){return e[1]}function N8(e,t){var n=je(!0),r=null,a=pd,o=null,i=ig(s);e=typeof e=="function"?e:e===void 0?j8:je(e),t=typeof t=="function"?t:t===void 0?$8:je(t);function s(l){var u,f=(l=sg(l)).length,c,p=!1,d;for(r==null&&(o=a(d=i())),u=0;u<=f;++u)!(u<f&&n(c=l[u],u,l))===p&&((p=!p)?o.lineStart():o.lineEnd()),p&&o.point(+e(c,u,l),+t(c,u,l));if(d)return o=null,d+""||null}return s.x=function(l){return arguments.length?(e=typeof l=="function"?l:je(+l),s):e},s.y=function(l){return arguments.length?(t=typeof l=="function"?l:je(+l),s):t},s.defined=function(l){return arguments.length?(n=typeof l=="function"?l:je(!!l),s):n},s.curve=function(l){return arguments.length?(a=l,r!=null&&(o=a(r)),s):a},s.context=function(l){return arguments.length?(l==null?r=o=null:o=a(r=l),s):r},s}function cc(e,t,n){var r=null,a=je(!0),o=null,i=pd,s=null,l=ig(u);e=typeof e=="function"?e:e===void 0?j8:je(+e),t=typeof t=="function"?t:je(t===void 0?0:+t),n=typeof n=="function"?n:n===void 0?$8:je(+n);function u(c){var p,d,h,m=(c=sg(c)).length,g,v=!1,y,x=new Array(m),P=new Array(m);for(o==null&&(s=i(y=l())),p=0;p<=m;++p){if(!(p<m&&a(g=c[p],p,c))===v)if(v=!v)d=p,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),h=p-1;h>=d;--h)s.point(x[h],P[h]);s.lineEnd(),s.areaEnd()}v&&(x[p]=+e(g,p,c),P[p]=+t(g,p,c),s.point(r?+r(g,p,c):x[p],n?+n(g,p,c):P[p]))}if(y)return s=null,y+""||null}function f(){return N8().defined(a).curve(i).context(o)}return u.x=function(c){return arguments.length?(e=typeof c=="function"?c:je(+c),r=null,u):e},u.x0=function(c){return arguments.length?(e=typeof c=="function"?c:je(+c),u):e},u.x1=function(c){return arguments.length?(r=c==null?null:typeof c=="function"?c:je(+c),u):r},u.y=function(c){return arguments.length?(t=typeof c=="function"?c:je(+c),n=null,u):t},u.y0=function(c){return arguments.length?(t=typeof c=="function"?c:je(+c),u):t},u.y1=function(c){return arguments.length?(n=c==null?null:typeof c=="function"?c:je(+c),u):n},u.lineX0=u.lineY0=function(){return f().x(e).y(t)},u.lineY1=function(){return f().x(e).y(n)},u.lineX1=function(){return f().x(r).y(t)},u.defined=function(c){return arguments.length?(a=typeof c=="function"?c:je(!!c),u):a},u.curve=function(c){return arguments.length?(i=c,o!=null&&(s=i(o)),u):i},u.context=function(c){return arguments.length?(c==null?o=s=null:s=i(o=c),u):o},u}class M8{constructor(t,n){this._context=t,this._x=n}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,n){switch(t=+t,n=+n,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,n,t,n):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+n)/2,t,this._y0,t,n);break}}this._x0=t,this._y0=n}}function eI(e){return new M8(e,!0)}function tI(e){return new M8(e,!1)}const lg={draw(e,t){const n=Kn(t/kf);e.moveTo(n,0),e.arc(0,0,n,0,fd)}},nI={draw(e,t){const n=Kn(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},R8=Kn(1/3),rI=R8*2,aI={draw(e,t){const n=Kn(t/rI),r=n*R8;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},oI={draw(e,t){const n=Kn(t),r=-n/2;e.rect(r,r,n,n)}},iI=.8908130915292852,I8=Of(kf/10)/Of(7*kf/10),sI=Of(fd/10)*I8,lI=-C8(fd/10)*I8,uI={draw(e,t){const n=Kn(t*iI),r=sI*n,a=lI*n;e.moveTo(0,-n),e.lineTo(r,a);for(let o=1;o<5;++o){const i=fd*o/5,s=C8(i),l=Of(i);e.lineTo(l*n,-s*n),e.lineTo(s*r-l*a,l*r+s*a)}e.closePath()}},$m=Kn(3),cI={draw(e,t){const n=-Kn(t/($m*3));e.moveTo(0,n*2),e.lineTo(-$m*n,-n),e.lineTo($m*n,-n),e.closePath()}},ln=-.5,un=Kn(3)/2,gv=1/Kn(12),fI=(gv/2+1)*3,pI={draw(e,t){const n=Kn(t/fI),r=n/2,a=n*gv,o=r,i=n*gv+n,s=-o,l=i;e.moveTo(r,a),e.lineTo(o,i),e.lineTo(s,l),e.lineTo(ln*r-un*a,un*r+ln*a),e.lineTo(ln*o-un*i,un*o+ln*i),e.lineTo(ln*s-un*l,un*s+ln*l),e.lineTo(ln*r+un*a,ln*a-un*r),e.lineTo(ln*o+un*i,ln*i-un*o),e.lineTo(ln*s+un*l,ln*l-un*s),e.closePath()}};function dI(e,t){let n=null,r=ig(a);e=typeof e=="function"?e:je(e||lg),t=typeof t=="function"?t:je(t===void 0?64:+t);function a(){let o;if(n||(n=o=r()),e.apply(this,arguments).draw(n,+t.apply(this,arguments)),o)return n=null,o+""||null}return a.type=function(o){return arguments.length?(e=typeof o=="function"?o:je(o),a):e},a.size=function(o){return arguments.length?(t=typeof o=="function"?o:je(+o),a):t},a.context=function(o){return arguments.length?(n=o??null,a):n},a}function _f(){}function Af(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function D8(e){this._context=e}D8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Af(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Af(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function mI(e){return new D8(e)}function L8(e){this._context=e}L8.prototype={areaStart:_f,areaEnd:_f,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Af(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function hI(e){return new L8(e)}function F8(e){this._context=e}F8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:Af(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function vI(e){return new F8(e)}function z8(e){this._context=e}z8.prototype={areaStart:_f,areaEnd:_f,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function yI(e){return new z8(e)}function uw(e){return e<0?-1:1}function cw(e,t,n){var r=e._x1-e._x0,a=t-e._x1,o=(e._y1-e._y0)/(r||a<0&&-0),i=(n-e._y1)/(a||r<0&&-0),s=(o*a+i*r)/(r+a);return(uw(o)+uw(i))*Math.min(Math.abs(o),Math.abs(i),.5*Math.abs(s))||0}function fw(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function Nm(e,t,n){var r=e._x0,a=e._y0,o=e._x1,i=e._y1,s=(o-r)/3;e._context.bezierCurveTo(r+s,a+s*t,o-s,i-s*n,o,i)}function Cf(e){this._context=e}Cf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Nm(this,this._t0,fw(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,Nm(this,fw(this,n=cw(this,e,t)),n);break;default:Nm(this,this._t0,n=cw(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}};function B8(e){this._context=new H8(e)}(B8.prototype=Object.create(Cf.prototype)).point=function(e,t){Cf.prototype.point.call(this,t,e)};function H8(e){this._context=e}H8.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,n,r,a,o){this._context.bezierCurveTo(t,e,r,n,o,a)}};function gI(e){return new Cf(e)}function xI(e){return new B8(e)}function G8(e){this._context=e}G8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,n=e.length;if(n)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),n===2)this._context.lineTo(e[1],t[1]);else for(var r=pw(e),a=pw(t),o=0,i=1;i<n;++o,++i)this._context.bezierCurveTo(r[0][o],a[0][o],r[1][o],a[1][o],e[i],t[i]);(this._line||this._line!==0&&n===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(e,t){this._x.push(+e),this._y.push(+t)}};function pw(e){var t,n=e.length-1,r,a=new Array(n),o=new Array(n),i=new Array(n);for(a[0]=0,o[0]=2,i[0]=e[0]+2*e[1],t=1;t<n-1;++t)a[t]=1,o[t]=4,i[t]=4*e[t]+2*e[t+1];for(a[n-1]=2,o[n-1]=7,i[n-1]=8*e[n-1]+e[n],t=1;t<n;++t)r=a[t]/o[t-1],o[t]-=r,i[t]-=r*i[t-1];for(a[n-1]=i[n-1]/o[n-1],t=n-2;t>=0;--t)a[t]=(i[t]-a[t+1])/o[t];for(o[n-1]=(e[n]+a[n-1])/2,t=0;t<n-1;++t)o[t]=2*e[t+1]-a[t+1];return[a,o]}function wI(e){return new G8(e)}function dd(e,t){this._context=e,this._t=t}dd.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}break}}this._x=e,this._y=t}};function bI(e){return new dd(e,.5)}function PI(e){return new dd(e,0)}function SI(e){return new dd(e,1)}function Ri(e,t){if((i=e.length)>1)for(var n=1,r,a,o=e[t[0]],i,s=o.length;n<i;++n)for(a=o,o=e[t[n]],r=0;r<s;++r)o[r][1]+=o[r][0]=isNaN(a[r][1])?a[r][0]:a[r][1]}function xv(e){for(var t=e.length,n=new Array(t);--t>=0;)n[t]=t;return n}function OI(e,t){return e[t]}function kI(e){const t=[];return t.key=e,t}function _I(){var e=je([]),t=xv,n=Ri,r=OI;function a(o){var i=Array.from(e.apply(this,arguments),kI),s,l=i.length,u=-1,f;for(const c of o)for(s=0,++u;s<l;++s)(i[s][u]=[0,+r(c,i[s].key,u,o)]).data=c;for(s=0,f=sg(t(i));s<l;++s)i[f[s]].index=s;return n(i,f),i}return a.keys=function(o){return arguments.length?(e=typeof o=="function"?o:je(Array.from(o)),a):e},a.value=function(o){return arguments.length?(r=typeof o=="function"?o:je(+o),a):r},a.order=function(o){return arguments.length?(t=o==null?xv:typeof o=="function"?o:je(Array.from(o)),a):t},a.offset=function(o){return arguments.length?(n=o??Ri,a):n},a}function AI(e,t){if((r=e.length)>0){for(var n,r,a=0,o=e[0].length,i;a<o;++a){for(i=n=0;n<r;++n)i+=e[n][a][1]||0;if(i)for(n=0;n<r;++n)e[n][a][1]/=i}Ri(e,t)}}function CI(e,t){if((a=e.length)>0){for(var n=0,r=e[t[0]],a,o=r.length;n<o;++n){for(var i=0,s=0;i<a;++i)s+=e[i][n][1]||0;r[n][1]+=r[n][0]=-s/2}Ri(e,t)}}function EI(e,t){if(!(!((i=e.length)>0)||!((o=(a=e[t[0]]).length)>0))){for(var n=0,r=1,a,o,i;r<o;++r){for(var s=0,l=0,u=0;s<i;++s){for(var f=e[t[s]],c=f[r][1]||0,p=f[r-1][1]||0,d=(c-p)/2,h=0;h<s;++h){var m=e[t[h]],g=m[r][1]||0,v=m[r-1][1]||0;d+=g-v}l+=c,u+=d*c}a[r-1][1]+=a[r-1][0]=n,l&&(n-=u/l)}a[r-1][1]+=a[r-1][0]=n,Ri(e,t)}}function zl(e){"@babel/helpers - typeof";return zl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zl(e)}var TI=["type","size","sizeType"];function wv(){return wv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},wv.apply(this,arguments)}function dw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function mw(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?dw(Object(n),!0).forEach(function(r){jI(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):dw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function jI(e,t,n){return t=$I(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $I(e){var t=NI(e,"string");return zl(t)=="symbol"?t:t+""}function NI(e,t){if(zl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(zl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function MI(e,t){if(e==null)return{};var n=RI(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RI(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var U8={symbolCircle:lg,symbolCross:nI,symbolDiamond:aI,symbolSquare:oI,symbolStar:uI,symbolTriangle:cI,symbolWye:pI},II=Math.PI/180,DI=function(t){var n="symbol".concat(cd(t));return U8[n]||lg},LI=function(t,n,r){if(n==="area")return t;switch(r){case"cross":return 5*t*t/9;case"diamond":return .5*t*t/Math.sqrt(3);case"square":return t*t;case"star":{var a=18*II;return 1.25*t*t*(Math.tan(a)-Math.tan(a*2)*Math.pow(Math.tan(a),2))}case"triangle":return Math.sqrt(3)*t*t/4;case"wye":return(21-10*Math.sqrt(3))*t*t/8;default:return Math.PI*t*t/4}},FI=function(t,n){U8["symbol".concat(cd(t))]=n},md=function(t){var n=t.type,r=n===void 0?"circle":n,a=t.size,o=a===void 0?64:a,i=t.sizeType,s=i===void 0?"area":i,l=MI(t,TI),u=mw(mw({},l),{},{type:r,size:o,sizeType:s}),f=function(){var g=DI(r),v=dI().type(g).size(LI(o,s,r));return v()},c=u.className,p=u.cx,d=u.cy,h=re(u,!0);return p===+p&&d===+d&&o===+o?C.createElement("path",wv({},h,{className:ue("recharts-symbols",c),transform:"translate(".concat(p,", ").concat(d,")"),d:f()})):null};md.registerSymbol=FI;function Ii(e){"@babel/helpers - typeof";return Ii=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ii(e)}function bv(){return bv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},bv.apply(this,arguments)}function hw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function zI(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?hw(Object(n),!0).forEach(function(r){Bl(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function BI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function HI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,q8(r.key),r)}}function GI(e,t,n){return t&&HI(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function UI(e,t,n){return t=Ef(t),WI(e,W8()?Reflect.construct(t,n||[],Ef(e).constructor):t.apply(e,n))}function WI(e,t){if(t&&(Ii(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return qI(e)}function qI(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function W8(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(W8=function(){return!!e})()}function Ef(e){return Ef=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Ef(e)}function VI(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Pv(e,t)}function Pv(e,t){return Pv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Pv(e,t)}function Bl(e,t,n){return t=q8(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function q8(e){var t=KI(e,"string");return Ii(t)=="symbol"?t:t+""}function KI(e,t){if(Ii(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ii(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var cn=32,ug=function(e){function t(){return BI(this,t),UI(this,t,arguments)}return VI(t,e),GI(t,[{key:"renderIcon",value:function(r){var a=this.props.inactiveColor,o=cn/2,i=cn/6,s=cn/3,l=r.inactive?a:r.color;if(r.type==="plainline")return C.createElement("line",{strokeWidth:4,fill:"none",stroke:l,strokeDasharray:r.payload.strokeDasharray,x1:0,y1:o,x2:cn,y2:o,className:"recharts-legend-icon"});if(r.type==="line")return C.createElement("path",{strokeWidth:4,fill:"none",stroke:l,d:"M0,".concat(o,"h").concat(s,`
+ */var ng=Symbol.for("react.element"),rg=Symbol.for("react.portal"),ed=Symbol.for("react.fragment"),td=Symbol.for("react.strict_mode"),nd=Symbol.for("react.profiler"),rd=Symbol.for("react.provider"),ad=Symbol.for("react.context"),HM=Symbol.for("react.server_context"),od=Symbol.for("react.forward_ref"),id=Symbol.for("react.suspense"),sd=Symbol.for("react.suspense_list"),ld=Symbol.for("react.memo"),ud=Symbol.for("react.lazy"),GM=Symbol.for("react.offscreen"),b8;b8=Symbol.for("react.module.reference");function Pn(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case ng:switch(e=e.type,e){case ed:case nd:case td:case id:case sd:return e;default:switch(e=e&&e.$$typeof,e){case HM:case ad:case od:case ud:case ld:case rd:return e;default:return t}}case rg:return t}}}_e.ContextConsumer=ad;_e.ContextProvider=rd;_e.Element=ng;_e.ForwardRef=od;_e.Fragment=ed;_e.Lazy=ud;_e.Memo=ld;_e.Portal=rg;_e.Profiler=nd;_e.StrictMode=td;_e.Suspense=id;_e.SuspenseList=sd;_e.isAsyncMode=function(){return!1};_e.isConcurrentMode=function(){return!1};_e.isContextConsumer=function(e){return Pn(e)===ad};_e.isContextProvider=function(e){return Pn(e)===rd};_e.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===ng};_e.isForwardRef=function(e){return Pn(e)===od};_e.isFragment=function(e){return Pn(e)===ed};_e.isLazy=function(e){return Pn(e)===ud};_e.isMemo=function(e){return Pn(e)===ld};_e.isPortal=function(e){return Pn(e)===rg};_e.isProfiler=function(e){return Pn(e)===nd};_e.isStrictMode=function(e){return Pn(e)===td};_e.isSuspense=function(e){return Pn(e)===id};_e.isSuspenseList=function(e){return Pn(e)===sd};_e.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===ed||e===nd||e===td||e===id||e===sd||e===GM||typeof e=="object"&&e!==null&&(e.$$typeof===ud||e.$$typeof===ld||e.$$typeof===rd||e.$$typeof===ad||e.$$typeof===od||e.$$typeof===b8||e.getModuleId!==void 0)};_e.typeOf=Pn;w8.exports=_e;var UM=w8.exports,WM=Ur,qM=Wr,VM="[object Number]";function KM(e){return typeof e=="number"||qM(e)&&WM(e)==VM}var P8=KM;const XM=Ae(P8);var YM=P8;function QM(e){return YM(e)&&e!=+e}var ZM=QM;const Ps=Ae(ZM);var Dn=function(t){return t===0?0:t>0?1:-1},Za=function(t){return So(t)&&t.indexOf("%")===t.length-1},V=function(t){return XM(t)&&!Ps(t)},JM=function(t){return te(t)},it=function(t){return V(t)||So(t)},eR=0,$o=function(t){var n=++eR;return"".concat(t||"").concat(n)},Oo=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!V(t)&&!So(t))return r;var o;if(Za(t)){var i=t.indexOf("%");o=n*parseFloat(t.slice(0,i))/100}else o=+t;return Ps(o)&&(o=r),a&&o>n&&(o=n),o},oa=function(t){if(!t)return null;var n=Object.keys(t);return n&&n.length?t[n[0]]:null},tR=function(t){if(!Array.isArray(t))return!1;for(var n=t.length,r={},a=0;a<n;a++)if(!r[t[a]])r[t[a]]=!0;else return!0;return!1},Xe=function(t,n){return V(t)&&V(n)?function(r){return t+r*(n-t)}:function(){return n}};function bp(e,t,n){return!e||!e.length?null:e.find(function(r){return r&&(typeof t=="function"?t(r):gn(r,t))===n})}var nR=function(t){if(!t||!t.length)return null;for(var n=t.length,r=0,a=0,o=0,i=0,s=1/0,l=-1/0,u=0,p=0,c=0;c<n;c++)u=t[c].cx||0,p=t[c].cy||0,r+=u,a+=p,o+=u*p,i+=u*u,s=Math.min(s,u),l=Math.max(l,u);var f=n*i!==r*r?(n*o-r*a)/(n*i-r*r):0;return{xmin:s,xmax:l,a:f,b:(a-f*r)/n}},rR=function(t,n){return V(t)&&V(n)?t-n:So(t)&&So(n)?t.localeCompare(n):t instanceof Date&&n instanceof Date?t.getTime()-n.getTime():String(t).localeCompare(String(n))};function mi(e,t){for(var n in e)if({}.hasOwnProperty.call(e,n)&&(!{}.hasOwnProperty.call(t,n)||e[n]!==t[n]))return!1;for(var r in t)if({}.hasOwnProperty.call(t,r)&&!{}.hasOwnProperty.call(e,r))return!1;return!0}function l0(e){"@babel/helpers - typeof";return l0=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l0(e)}var aR=["viewBox","children"],oR=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],aw=["points","pathLength"],Tm={svg:aR,polygon:aw,polyline:aw},ag=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],Pp=function(t,n){if(!t||typeof t=="function"||typeof t=="boolean")return null;var r=t;if(k.isValidElement(t)&&(r=t.props),!gs(r))return null;var a={};return Object.keys(r).forEach(function(o){ag.includes(o)&&(a[o]=n||function(i){return r[o](r,i)})}),a},iR=function(t,n,r){return function(a){return t(n,r,a),null}},Fl=function(t,n,r){if(!gs(t)||l0(t)!=="object")return null;var a=null;return Object.keys(t).forEach(function(o){var i=t[o];ag.includes(o)&&typeof i=="function"&&(a||(a={}),a[o]=iR(i,n,r))}),a},sR=["children"],lR=["children"];function ow(e,t){if(e==null)return{};var n=uR(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uR(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function u0(e){"@babel/helpers - typeof";return u0=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},u0(e)}var iw={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},jr=function(t){return typeof t=="string"?t:t?t.displayName||t.name||"Component":""},sw=null,jm=null,og=function e(t){if(t===sw&&Array.isArray(jm))return jm;var n=[];return k.Children.forEach(t,function(r){te(r)||(UM.isFragment(r)?n=n.concat(e(r.props.children)):n.push(r))}),jm=n,sw=t,n};function qt(e,t){var n=[],r=[];return Array.isArray(t)?r=t.map(function(a){return jr(a)}):r=[jr(t)],og(e).forEach(function(a){var o=gn(a,"type.displayName")||gn(a,"type.name");r.indexOf(o)!==-1&&n.push(a)}),n}function Qt(e,t){var n=qt(e,t);return n&&n[0]}var lw=function(t){if(!t||!t.props)return!1;var n=t.props,r=n.width,a=n.height;return!(!V(r)||r<=0||!V(a)||a<=0)},cR=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],pR=function(t){return t&&t.type&&So(t.type)&&cR.indexOf(t.type)>=0},S8=function(t){return t&&u0(t)==="object"&&"clipDot"in t},fR=function(t,n,r,a){var o,i=(o=Tm==null?void 0:Tm[a])!==null&&o!==void 0?o:[];return n.startsWith("data-")||!oe(t)&&(a&&i.includes(n)||oR.includes(n))||r&&ag.includes(n)},re=function(t,n,r){if(!t||typeof t=="function"||typeof t=="boolean")return null;var a=t;if(k.isValidElement(t)&&(a=t.props),!gs(a))return null;var o={};return Object.keys(a).forEach(function(i){var s;fR((s=a)===null||s===void 0?void 0:s[i],i,n,r)&&(o[i]=a[i])}),o},c0=function e(t,n){if(t===n)return!0;var r=k.Children.count(t);if(r!==k.Children.count(n))return!1;if(r===0)return!0;if(r===1)return uw(Array.isArray(t)?t[0]:t,Array.isArray(n)?n[0]:n);for(var a=0;a<r;a++){var o=t[a],i=n[a];if(Array.isArray(o)||Array.isArray(i)){if(!e(o,i))return!1}else if(!uw(o,i))return!1}return!0},uw=function(t,n){if(te(t)&&te(n))return!0;if(!te(t)&&!te(n)){var r=t.props||{},a=r.children,o=ow(r,sR),i=n.props||{},s=i.children,l=ow(i,lR);return a&&s?mi(o,l)&&c0(a,s):!a&&!s?mi(o,l):!1}return!1},cw=function(t,n){var r=[],a={};return og(t).forEach(function(o,i){if(pR(o))r.push(o);else if(o){var s=jr(o.type),l=n[s]||{},u=l.handler,p=l.once;if(u&&(!p||!a[s])){var c=u(o,s,i);r.push(c),a[s]=!0}}}),r},dR=function(t){var n=t&&t.type;return n&&iw[n]?iw[n]:null},mR=function(t,n){return og(n).indexOf(t)},hR=["children","width","height","viewBox","className","style","title","desc"];function p0(){return p0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p0.apply(this,arguments)}function vR(e,t){if(e==null)return{};var n=yR(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yR(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function f0(e){var t=e.children,n=e.width,r=e.height,a=e.viewBox,o=e.className,i=e.style,s=e.title,l=e.desc,u=vR(e,hR),p=a||{width:n,height:r,x:0,y:0},c=ue("recharts-surface",o);return A.createElement("svg",p0({},re(u,!0,"svg"),{className:c,width:n,height:r,style:i,viewBox:"".concat(p.x," ").concat(p.y," ").concat(p.width," ").concat(p.height)}),A.createElement("title",null,s),A.createElement("desc",null,l),t)}var gR=["children","className"];function d0(){return d0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},d0.apply(this,arguments)}function xR(e,t){if(e==null)return{};var n=wR(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wR(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var ye=A.forwardRef(function(e,t){var n=e.children,r=e.className,a=xR(e,gR),o=ue("recharts-layer",r);return A.createElement("g",d0({className:o},re(a,!0),{ref:t}),n)}),$r=function(t,n){for(var r=arguments.length,a=new Array(r>2?r-2:0),o=2;o<r;o++)a[o-2]=arguments[o]};function bR(e,t,n){var r=-1,a=e.length;t<0&&(t=-t>a?0:a+t),n=n>a?a:n,n<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(a);++r<a;)o[r]=e[r+t];return o}var PR=bR,SR=PR;function OR(e,t,n){var r=e.length;return n=n===void 0?r:n,!t&&n>=r?e:SR(e,t,n)}var kR=OR,_R="\\ud800-\\udfff",CR="\\u0300-\\u036f",AR="\\ufe20-\\ufe2f",ER="\\u20d0-\\u20ff",TR=CR+AR+ER,jR="\\ufe0e\\ufe0f",$R="\\u200d",NR=RegExp("["+$R+_R+TR+jR+"]");function MR(e){return NR.test(e)}var O8=MR;function RR(e){return e.split("")}var IR=RR,k8="\\ud800-\\udfff",DR="\\u0300-\\u036f",LR="\\ufe20-\\ufe2f",FR="\\u20d0-\\u20ff",zR=DR+LR+FR,BR="\\ufe0e\\ufe0f",HR="["+k8+"]",m0="["+zR+"]",h0="\\ud83c[\\udffb-\\udfff]",GR="(?:"+m0+"|"+h0+")",_8="[^"+k8+"]",C8="(?:\\ud83c[\\udde6-\\uddff]){2}",A8="[\\ud800-\\udbff][\\udc00-\\udfff]",UR="\\u200d",E8=GR+"?",T8="["+BR+"]?",WR="(?:"+UR+"(?:"+[_8,C8,A8].join("|")+")"+T8+E8+")*",qR=T8+E8+WR,VR="(?:"+[_8+m0+"?",m0,C8,A8,HR].join("|")+")",KR=RegExp(h0+"(?="+h0+")|"+VR+qR,"g");function XR(e){return e.match(KR)||[]}var YR=XR,QR=IR,ZR=O8,JR=YR;function eI(e){return ZR(e)?JR(e):QR(e)}var tI=eI,nI=kR,rI=O8,aI=tI,oI=y8;function iI(e){return function(t){t=oI(t);var n=rI(t)?aI(t):void 0,r=n?n[0]:t.charAt(0),a=n?nI(n,1).join(""):t.slice(1);return r[e]()+a}}var sI=iI,lI=sI,uI=lI("toUpperCase"),cI=uI;const cd=Ae(cI);function je(e){return function(){return e}}const j8=Math.cos,Sp=Math.sin,Kn=Math.sqrt,Op=Math.PI,pd=2*Op,v0=Math.PI,y0=2*v0,qa=1e-6,pI=y0-qa;function $8(e){this._+=e[0];for(let t=1,n=e.length;t<n;++t)this._+=arguments[t]+e[t]}function fI(e){let t=Math.floor(e);if(!(t>=0))throw new Error(`invalid digits: ${e}`);if(t>15)return $8;const n=10**t;return function(r){this._+=r[0];for(let a=1,o=r.length;a<o;++a)this._+=Math.round(arguments[a]*n)/n+r[a]}}class dI{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=t==null?$8:fI(t)}moveTo(t,n){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,n){this._append`L${this._x1=+t},${this._y1=+n}`}quadraticCurveTo(t,n,r,a){this._append`Q${+t},${+n},${this._x1=+r},${this._y1=+a}`}bezierCurveTo(t,n,r,a,o,i){this._append`C${+t},${+n},${+r},${+a},${this._x1=+o},${this._y1=+i}`}arcTo(t,n,r,a,o){if(t=+t,n=+n,r=+r,a=+a,o=+o,o<0)throw new Error(`negative radius: ${o}`);let i=this._x1,s=this._y1,l=r-t,u=a-n,p=i-t,c=s-n,f=p*p+c*c;if(this._x1===null)this._append`M${this._x1=t},${this._y1=n}`;else if(f>qa)if(!(Math.abs(c*l-u*p)>qa)||!o)this._append`L${this._x1=t},${this._y1=n}`;else{let d=r-i,h=a-s,m=l*l+u*u,g=d*d+h*h,v=Math.sqrt(m),y=Math.sqrt(f),x=o*Math.tan((v0-Math.acos((m+f-g)/(2*v*y)))/2),P=x/y,w=x/v;Math.abs(P-1)>qa&&this._append`L${t+P*p},${n+P*c}`,this._append`A${o},${o},0,0,${+(c*d>p*h)},${this._x1=t+w*l},${this._y1=n+w*u}`}}arc(t,n,r,a,o,i){if(t=+t,n=+n,r=+r,i=!!i,r<0)throw new Error(`negative radius: ${r}`);let s=r*Math.cos(a),l=r*Math.sin(a),u=t+s,p=n+l,c=1^i,f=i?a-o:o-a;this._x1===null?this._append`M${u},${p}`:(Math.abs(this._x1-u)>qa||Math.abs(this._y1-p)>qa)&&this._append`L${u},${p}`,r&&(f<0&&(f=f%y0+y0),f>pI?this._append`A${r},${r},0,1,${c},${t-s},${n-l}A${r},${r},0,1,${c},${this._x1=u},${this._y1=p}`:f>qa&&this._append`A${r},${r},0,${+(f>=v0)},${c},${this._x1=t+r*Math.cos(o)},${this._y1=n+r*Math.sin(o)}`)}rect(t,n,r,a){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}h${r=+r}v${+a}h${-r}Z`}toString(){return this._}}function ig(e){let t=3;return e.digits=function(n){if(!arguments.length)return t;if(n==null)t=null;else{const r=Math.floor(n);if(!(r>=0))throw new RangeError(`invalid digits: ${n}`);t=r}return e},()=>new dI(t)}function sg(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function N8(e){this._context=e}N8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function fd(e){return new N8(e)}function M8(e){return e[0]}function R8(e){return e[1]}function I8(e,t){var n=je(!0),r=null,a=fd,o=null,i=ig(s);e=typeof e=="function"?e:e===void 0?M8:je(e),t=typeof t=="function"?t:t===void 0?R8:je(t);function s(l){var u,p=(l=sg(l)).length,c,f=!1,d;for(r==null&&(o=a(d=i())),u=0;u<=p;++u)!(u<p&&n(c=l[u],u,l))===f&&((f=!f)?o.lineStart():o.lineEnd()),f&&o.point(+e(c,u,l),+t(c,u,l));if(d)return o=null,d+""||null}return s.x=function(l){return arguments.length?(e=typeof l=="function"?l:je(+l),s):e},s.y=function(l){return arguments.length?(t=typeof l=="function"?l:je(+l),s):t},s.defined=function(l){return arguments.length?(n=typeof l=="function"?l:je(!!l),s):n},s.curve=function(l){return arguments.length?(a=l,r!=null&&(o=a(r)),s):a},s.context=function(l){return arguments.length?(l==null?r=o=null:o=a(r=l),s):r},s}function cc(e,t,n){var r=null,a=je(!0),o=null,i=fd,s=null,l=ig(u);e=typeof e=="function"?e:e===void 0?M8:je(+e),t=typeof t=="function"?t:je(t===void 0?0:+t),n=typeof n=="function"?n:n===void 0?R8:je(+n);function u(c){var f,d,h,m=(c=sg(c)).length,g,v=!1,y,x=new Array(m),P=new Array(m);for(o==null&&(s=i(y=l())),f=0;f<=m;++f){if(!(f<m&&a(g=c[f],f,c))===v)if(v=!v)d=f,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),h=f-1;h>=d;--h)s.point(x[h],P[h]);s.lineEnd(),s.areaEnd()}v&&(x[f]=+e(g,f,c),P[f]=+t(g,f,c),s.point(r?+r(g,f,c):x[f],n?+n(g,f,c):P[f]))}if(y)return s=null,y+""||null}function p(){return I8().defined(a).curve(i).context(o)}return u.x=function(c){return arguments.length?(e=typeof c=="function"?c:je(+c),r=null,u):e},u.x0=function(c){return arguments.length?(e=typeof c=="function"?c:je(+c),u):e},u.x1=function(c){return arguments.length?(r=c==null?null:typeof c=="function"?c:je(+c),u):r},u.y=function(c){return arguments.length?(t=typeof c=="function"?c:je(+c),n=null,u):t},u.y0=function(c){return arguments.length?(t=typeof c=="function"?c:je(+c),u):t},u.y1=function(c){return arguments.length?(n=c==null?null:typeof c=="function"?c:je(+c),u):n},u.lineX0=u.lineY0=function(){return p().x(e).y(t)},u.lineY1=function(){return p().x(e).y(n)},u.lineX1=function(){return p().x(r).y(t)},u.defined=function(c){return arguments.length?(a=typeof c=="function"?c:je(!!c),u):a},u.curve=function(c){return arguments.length?(i=c,o!=null&&(s=i(o)),u):i},u.context=function(c){return arguments.length?(c==null?o=s=null:s=i(o=c),u):o},u}class D8{constructor(t,n){this._context=t,this._x=n}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,n){switch(t=+t,n=+n,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,n,t,n):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+n)/2,t,this._y0,t,n);break}}this._x0=t,this._y0=n}}function mI(e){return new D8(e,!0)}function hI(e){return new D8(e,!1)}const lg={draw(e,t){const n=Kn(t/Op);e.moveTo(n,0),e.arc(0,0,n,0,pd)}},vI={draw(e,t){const n=Kn(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},L8=Kn(1/3),yI=L8*2,gI={draw(e,t){const n=Kn(t/yI),r=n*L8;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},xI={draw(e,t){const n=Kn(t),r=-n/2;e.rect(r,r,n,n)}},wI=.8908130915292852,F8=Sp(Op/10)/Sp(7*Op/10),bI=Sp(pd/10)*F8,PI=-j8(pd/10)*F8,SI={draw(e,t){const n=Kn(t*wI),r=bI*n,a=PI*n;e.moveTo(0,-n),e.lineTo(r,a);for(let o=1;o<5;++o){const i=pd*o/5,s=j8(i),l=Sp(i);e.lineTo(l*n,-s*n),e.lineTo(s*r-l*a,l*r+s*a)}e.closePath()}},$m=Kn(3),OI={draw(e,t){const n=-Kn(t/($m*3));e.moveTo(0,n*2),e.lineTo(-$m*n,-n),e.lineTo($m*n,-n),e.closePath()}},ln=-.5,un=Kn(3)/2,g0=1/Kn(12),kI=(g0/2+1)*3,_I={draw(e,t){const n=Kn(t/kI),r=n/2,a=n*g0,o=r,i=n*g0+n,s=-o,l=i;e.moveTo(r,a),e.lineTo(o,i),e.lineTo(s,l),e.lineTo(ln*r-un*a,un*r+ln*a),e.lineTo(ln*o-un*i,un*o+ln*i),e.lineTo(ln*s-un*l,un*s+ln*l),e.lineTo(ln*r+un*a,ln*a-un*r),e.lineTo(ln*o+un*i,ln*i-un*o),e.lineTo(ln*s+un*l,ln*l-un*s),e.closePath()}};function CI(e,t){let n=null,r=ig(a);e=typeof e=="function"?e:je(e||lg),t=typeof t=="function"?t:je(t===void 0?64:+t);function a(){let o;if(n||(n=o=r()),e.apply(this,arguments).draw(n,+t.apply(this,arguments)),o)return n=null,o+""||null}return a.type=function(o){return arguments.length?(e=typeof o=="function"?o:je(o),a):e},a.size=function(o){return arguments.length?(t=typeof o=="function"?o:je(+o),a):t},a.context=function(o){return arguments.length?(n=o??null,a):n},a}function kp(){}function _p(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function z8(e){this._context=e}z8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:_p(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_p(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function AI(e){return new z8(e)}function B8(e){this._context=e}B8.prototype={areaStart:kp,areaEnd:kp,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_p(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function EI(e){return new B8(e)}function H8(e){this._context=e}H8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_p(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function TI(e){return new H8(e)}function G8(e){this._context=e}G8.prototype={areaStart:kp,areaEnd:kp,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function jI(e){return new G8(e)}function pw(e){return e<0?-1:1}function fw(e,t,n){var r=e._x1-e._x0,a=t-e._x1,o=(e._y1-e._y0)/(r||a<0&&-0),i=(n-e._y1)/(a||r<0&&-0),s=(o*a+i*r)/(r+a);return(pw(o)+pw(i))*Math.min(Math.abs(o),Math.abs(i),.5*Math.abs(s))||0}function dw(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function Nm(e,t,n){var r=e._x0,a=e._y0,o=e._x1,i=e._y1,s=(o-r)/3;e._context.bezierCurveTo(r+s,a+s*t,o-s,i-s*n,o,i)}function Cp(e){this._context=e}Cp.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Nm(this,this._t0,dw(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,Nm(this,dw(this,n=fw(this,e,t)),n);break;default:Nm(this,this._t0,n=fw(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}};function U8(e){this._context=new W8(e)}(U8.prototype=Object.create(Cp.prototype)).point=function(e,t){Cp.prototype.point.call(this,t,e)};function W8(e){this._context=e}W8.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,n,r,a,o){this._context.bezierCurveTo(t,e,r,n,o,a)}};function $I(e){return new Cp(e)}function NI(e){return new U8(e)}function q8(e){this._context=e}q8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,n=e.length;if(n)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),n===2)this._context.lineTo(e[1],t[1]);else for(var r=mw(e),a=mw(t),o=0,i=1;i<n;++o,++i)this._context.bezierCurveTo(r[0][o],a[0][o],r[1][o],a[1][o],e[i],t[i]);(this._line||this._line!==0&&n===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(e,t){this._x.push(+e),this._y.push(+t)}};function mw(e){var t,n=e.length-1,r,a=new Array(n),o=new Array(n),i=new Array(n);for(a[0]=0,o[0]=2,i[0]=e[0]+2*e[1],t=1;t<n-1;++t)a[t]=1,o[t]=4,i[t]=4*e[t]+2*e[t+1];for(a[n-1]=2,o[n-1]=7,i[n-1]=8*e[n-1]+e[n],t=1;t<n;++t)r=a[t]/o[t-1],o[t]-=r,i[t]-=r*i[t-1];for(a[n-1]=i[n-1]/o[n-1],t=n-2;t>=0;--t)a[t]=(i[t]-a[t+1])/o[t];for(o[n-1]=(e[n]+a[n-1])/2,t=0;t<n-1;++t)o[t]=2*e[t+1]-a[t+1];return[a,o]}function MI(e){return new q8(e)}function dd(e,t){this._context=e,this._t=t}dd.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}break}}this._x=e,this._y=t}};function RI(e){return new dd(e,.5)}function II(e){return new dd(e,0)}function DI(e){return new dd(e,1)}function Ri(e,t){if((i=e.length)>1)for(var n=1,r,a,o=e[t[0]],i,s=o.length;n<i;++n)for(a=o,o=e[t[n]],r=0;r<s;++r)o[r][1]+=o[r][0]=isNaN(a[r][1])?a[r][0]:a[r][1]}function x0(e){for(var t=e.length,n=new Array(t);--t>=0;)n[t]=t;return n}function LI(e,t){return e[t]}function FI(e){const t=[];return t.key=e,t}function zI(){var e=je([]),t=x0,n=Ri,r=LI;function a(o){var i=Array.from(e.apply(this,arguments),FI),s,l=i.length,u=-1,p;for(const c of o)for(s=0,++u;s<l;++s)(i[s][u]=[0,+r(c,i[s].key,u,o)]).data=c;for(s=0,p=sg(t(i));s<l;++s)i[p[s]].index=s;return n(i,p),i}return a.keys=function(o){return arguments.length?(e=typeof o=="function"?o:je(Array.from(o)),a):e},a.value=function(o){return arguments.length?(r=typeof o=="function"?o:je(+o),a):r},a.order=function(o){return arguments.length?(t=o==null?x0:typeof o=="function"?o:je(Array.from(o)),a):t},a.offset=function(o){return arguments.length?(n=o??Ri,a):n},a}function BI(e,t){if((r=e.length)>0){for(var n,r,a=0,o=e[0].length,i;a<o;++a){for(i=n=0;n<r;++n)i+=e[n][a][1]||0;if(i)for(n=0;n<r;++n)e[n][a][1]/=i}Ri(e,t)}}function HI(e,t){if((a=e.length)>0){for(var n=0,r=e[t[0]],a,o=r.length;n<o;++n){for(var i=0,s=0;i<a;++i)s+=e[i][n][1]||0;r[n][1]+=r[n][0]=-s/2}Ri(e,t)}}function GI(e,t){if(!(!((i=e.length)>0)||!((o=(a=e[t[0]]).length)>0))){for(var n=0,r=1,a,o,i;r<o;++r){for(var s=0,l=0,u=0;s<i;++s){for(var p=e[t[s]],c=p[r][1]||0,f=p[r-1][1]||0,d=(c-f)/2,h=0;h<s;++h){var m=e[t[h]],g=m[r][1]||0,v=m[r-1][1]||0;d+=g-v}l+=c,u+=d*c}a[r-1][1]+=a[r-1][0]=n,l&&(n-=u/l)}a[r-1][1]+=a[r-1][0]=n,Ri(e,t)}}function zl(e){"@babel/helpers - typeof";return zl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zl(e)}var UI=["type","size","sizeType"];function w0(){return w0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},w0.apply(this,arguments)}function hw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function vw(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?hw(Object(n),!0).forEach(function(r){WI(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function WI(e,t,n){return t=qI(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function qI(e){var t=VI(e,"string");return zl(t)=="symbol"?t:t+""}function VI(e,t){if(zl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(zl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function KI(e,t){if(e==null)return{};var n=XI(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XI(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var V8={symbolCircle:lg,symbolCross:vI,symbolDiamond:gI,symbolSquare:xI,symbolStar:SI,symbolTriangle:OI,symbolWye:_I},YI=Math.PI/180,QI=function(t){var n="symbol".concat(cd(t));return V8[n]||lg},ZI=function(t,n,r){if(n==="area")return t;switch(r){case"cross":return 5*t*t/9;case"diamond":return .5*t*t/Math.sqrt(3);case"square":return t*t;case"star":{var a=18*YI;return 1.25*t*t*(Math.tan(a)-Math.tan(a*2)*Math.pow(Math.tan(a),2))}case"triangle":return Math.sqrt(3)*t*t/4;case"wye":return(21-10*Math.sqrt(3))*t*t/8;default:return Math.PI*t*t/4}},JI=function(t,n){V8["symbol".concat(cd(t))]=n},md=function(t){var n=t.type,r=n===void 0?"circle":n,a=t.size,o=a===void 0?64:a,i=t.sizeType,s=i===void 0?"area":i,l=KI(t,UI),u=vw(vw({},l),{},{type:r,size:o,sizeType:s}),p=function(){var g=QI(r),v=CI().type(g).size(ZI(o,s,r));return v()},c=u.className,f=u.cx,d=u.cy,h=re(u,!0);return f===+f&&d===+d&&o===+o?A.createElement("path",w0({},h,{className:ue("recharts-symbols",c),transform:"translate(".concat(f,", ").concat(d,")"),d:p()})):null};md.registerSymbol=JI;function Ii(e){"@babel/helpers - typeof";return Ii=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ii(e)}function b0(){return b0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},b0.apply(this,arguments)}function yw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function eD(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?yw(Object(n),!0).forEach(function(r){Bl(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):yw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function tD(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function nD(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,X8(r.key),r)}}function rD(e,t,n){return t&&nD(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function aD(e,t,n){return t=Ap(t),oD(e,K8()?Reflect.construct(t,n||[],Ap(e).constructor):t.apply(e,n))}function oD(e,t){if(t&&(Ii(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return iD(e)}function iD(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function K8(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(K8=function(){return!!e})()}function Ap(e){return Ap=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Ap(e)}function sD(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&P0(e,t)}function P0(e,t){return P0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},P0(e,t)}function Bl(e,t,n){return t=X8(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function X8(e){var t=lD(e,"string");return Ii(t)=="symbol"?t:t+""}function lD(e,t){if(Ii(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ii(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var cn=32,ug=function(e){function t(){return tD(this,t),aD(this,t,arguments)}return sD(t,e),rD(t,[{key:"renderIcon",value:function(r){var a=this.props.inactiveColor,o=cn/2,i=cn/6,s=cn/3,l=r.inactive?a:r.color;if(r.type==="plainline")return A.createElement("line",{strokeWidth:4,fill:"none",stroke:l,strokeDasharray:r.payload.strokeDasharray,x1:0,y1:o,x2:cn,y2:o,className:"recharts-legend-icon"});if(r.type==="line")return A.createElement("path",{strokeWidth:4,fill:"none",stroke:l,d:"M0,".concat(o,"h").concat(s,`
             A`).concat(i,",").concat(i,",0,1,1,").concat(2*s,",").concat(o,`
             H`).concat(cn,"M").concat(2*s,",").concat(o,`
-            A`).concat(i,",").concat(i,",0,1,1,").concat(s,",").concat(o),className:"recharts-legend-icon"});if(r.type==="rect")return C.createElement("path",{stroke:"none",fill:l,d:"M0,".concat(cn/8,"h").concat(cn,"v").concat(cn*3/4,"h").concat(-cn,"z"),className:"recharts-legend-icon"});if(C.isValidElement(r.legendIcon)){var u=zI({},r);return delete u.legendIcon,C.cloneElement(r.legendIcon,u)}return C.createElement(md,{fill:l,cx:o,cy:o,size:cn,sizeType:"diameter",type:r.type})}},{key:"renderItems",value:function(){var r=this,a=this.props,o=a.payload,i=a.iconSize,s=a.layout,l=a.formatter,u=a.inactiveColor,f={x:0,y:0,width:cn,height:cn},c={display:s==="horizontal"?"inline-block":"block",marginRight:10},p={display:"inline-block",verticalAlign:"middle",marginRight:4};return o.map(function(d,h){var m=d.formatter||l,g=ue(Bl(Bl({"recharts-legend-item":!0},"legend-item-".concat(h),!0),"inactive",d.inactive));if(d.type==="none")return null;var v=oe(d.value)?null:d.value;$r(!oe(d.value),`The name property is also required when using a function for the dataKey of a chart's cartesian components. Ex: <Bar name="Name of my Data"/>`);var y=d.inactive?u:d.color;return C.createElement("li",bv({className:g,style:c,key:"legend-item-".concat(h)},Fl(r.props,d,h)),C.createElement(pv,{width:i,height:i,viewBox:f,style:p},r.renderIcon(d)),C.createElement("span",{className:"recharts-legend-item-text",style:{color:y}},m?m(v,d,h):v))})}},{key:"render",value:function(){var r=this.props,a=r.payload,o=r.layout,i=r.align;if(!a||!a.length)return null;var s={padding:0,margin:0,textAlign:o==="horizontal"?i:"left"};return C.createElement("ul",{className:"recharts-default-legend",style:s},this.renderItems())}}])}(k.PureComponent);Bl(ug,"displayName","Legend");Bl(ug,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var XI=Qp;function YI(){this.__data__=new XI,this.size=0}var QI=YI;function ZI(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}var JI=ZI;function eD(e){return this.__data__.get(e)}var tD=eD;function nD(e){return this.__data__.has(e)}var rD=nD,aD=Qp,oD=Q0,iD=Z0,sD=200;function lD(e,t){var n=this.__data__;if(n instanceof aD){var r=n.__data__;if(!oD||r.length<sD-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new iD(r)}return n.set(e,t),this.size=n.size,this}var uD=lD,cD=Qp,fD=QI,pD=JI,dD=tD,mD=rD,hD=uD;function Ss(e){var t=this.__data__=new cD(e);this.size=t.size}Ss.prototype.clear=fD;Ss.prototype.delete=pD;Ss.prototype.get=dD;Ss.prototype.has=mD;Ss.prototype.set=hD;var V8=Ss,vD="__lodash_hash_undefined__";function yD(e){return this.__data__.set(e,vD),this}var gD=yD;function xD(e){return this.__data__.has(e)}var wD=xD,bD=Z0,PD=gD,SD=wD;function Tf(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new bD;++t<n;)this.add(e[t])}Tf.prototype.add=Tf.prototype.push=PD;Tf.prototype.has=SD;var K8=Tf;function OD(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var X8=OD;function kD(e,t){return e.has(t)}var Y8=kD,_D=K8,AD=X8,CD=Y8,ED=1,TD=2;function jD(e,t,n,r,a,o){var i=n&ED,s=e.length,l=t.length;if(s!=l&&!(i&&l>s))return!1;var u=o.get(e),f=o.get(t);if(u&&f)return u==t&&f==e;var c=-1,p=!0,d=n&TD?new _D:void 0;for(o.set(e,t),o.set(t,e);++c<s;){var h=e[c],m=t[c];if(r)var g=i?r(m,h,c,t,e,o):r(h,m,c,e,t,o);if(g!==void 0){if(g)continue;p=!1;break}if(d){if(!AD(t,function(v,y){if(!CD(d,y)&&(h===v||a(h,v,n,r,o)))return d.push(y)})){p=!1;break}}else if(!(h===m||a(h,m,n,r,o))){p=!1;break}}return o.delete(e),o.delete(t),p}var Q8=jD,$D=gr,ND=$D.Uint8Array,MD=ND;function RD(e){var t=-1,n=Array(e.size);return e.forEach(function(r,a){n[++t]=[a,r]}),n}var ID=RD;function DD(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}var cg=DD,vw=$u,yw=MD,LD=Y0,FD=Q8,zD=ID,BD=cg,HD=1,GD=2,UD="[object Boolean]",WD="[object Date]",qD="[object Error]",VD="[object Map]",KD="[object Number]",XD="[object RegExp]",YD="[object Set]",QD="[object String]",ZD="[object Symbol]",JD="[object ArrayBuffer]",eL="[object DataView]",gw=vw?vw.prototype:void 0,Mm=gw?gw.valueOf:void 0;function tL(e,t,n,r,a,o,i){switch(n){case eL:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case JD:return!(e.byteLength!=t.byteLength||!o(new yw(e),new yw(t)));case UD:case WD:case KD:return LD(+e,+t);case qD:return e.name==t.name&&e.message==t.message;case XD:case QD:return e==t+"";case VD:var s=zD;case YD:var l=r&HD;if(s||(s=BD),e.size!=t.size&&!l)return!1;var u=i.get(e);if(u)return u==t;r|=GD,i.set(e,t);var f=FD(s(e),s(t),r,a,o,i);return i.delete(e),f;case ZD:if(Mm)return Mm.call(e)==Mm.call(t)}return!1}var nL=tL;function rL(e,t){for(var n=-1,r=t.length,a=e.length;++n<r;)e[a+n]=t[n];return e}var Z8=rL,aL=Z8,oL=Vt;function iL(e,t,n){var r=t(e);return oL(e)?r:aL(r,n(e))}var sL=iL;function lL(e,t){for(var n=-1,r=e==null?0:e.length,a=0,o=[];++n<r;){var i=e[n];t(i,n,e)&&(o[a++]=i)}return o}var uL=lL;function cL(){return[]}var fL=cL,pL=uL,dL=fL,mL=Object.prototype,hL=mL.propertyIsEnumerable,xw=Object.getOwnPropertySymbols,vL=xw?function(e){return e==null?[]:(e=Object(e),pL(xw(e),function(t){return hL.call(e,t)}))}:dL,yL=vL;function gL(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}var xL=gL,wL=Ur,bL=Wr,PL="[object Arguments]";function SL(e){return bL(e)&&wL(e)==PL}var OL=SL,ww=OL,kL=Wr,J8=Object.prototype,_L=J8.hasOwnProperty,AL=J8.propertyIsEnumerable,CL=ww(function(){return arguments}())?ww:function(e){return kL(e)&&_L.call(e,"callee")&&!AL.call(e,"callee")},fg=CL,jf={exports:{}};function EL(){return!1}var TL=EL;jf.exports;(function(e,t){var n=gr,r=TL,a=t&&!t.nodeType&&t,o=a&&!0&&e&&!e.nodeType&&e,i=o&&o.exports===a,s=i?n.Buffer:void 0,l=s?s.isBuffer:void 0,u=l||r;e.exports=u})(jf,jf.exports);var e7=jf.exports,jL=9007199254740991,$L=/^(?:0|[1-9]\d*)$/;function NL(e,t){var n=typeof e;return t=t??jL,!!t&&(n=="number"||n!="symbol"&&$L.test(e))&&e>-1&&e%1==0&&e<t}var pg=NL,ML=9007199254740991;function RL(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=ML}var dg=RL,IL=Ur,DL=dg,LL=Wr,FL="[object Arguments]",zL="[object Array]",BL="[object Boolean]",HL="[object Date]",GL="[object Error]",UL="[object Function]",WL="[object Map]",qL="[object Number]",VL="[object Object]",KL="[object RegExp]",XL="[object Set]",YL="[object String]",QL="[object WeakMap]",ZL="[object ArrayBuffer]",JL="[object DataView]",eF="[object Float32Array]",tF="[object Float64Array]",nF="[object Int8Array]",rF="[object Int16Array]",aF="[object Int32Array]",oF="[object Uint8Array]",iF="[object Uint8ClampedArray]",sF="[object Uint16Array]",lF="[object Uint32Array]",De={};De[eF]=De[tF]=De[nF]=De[rF]=De[aF]=De[oF]=De[iF]=De[sF]=De[lF]=!0;De[FL]=De[zL]=De[ZL]=De[BL]=De[JL]=De[HL]=De[GL]=De[UL]=De[WL]=De[qL]=De[VL]=De[KL]=De[XL]=De[YL]=De[QL]=!1;function uF(e){return LL(e)&&DL(e.length)&&!!De[IL(e)]}var cF=uF;function fF(e){return function(t){return e(t)}}var t7=fF,$f={exports:{}};$f.exports;(function(e,t){var n=l8,r=t&&!t.nodeType&&t,a=r&&!0&&e&&!e.nodeType&&e,o=a&&a.exports===r,i=o&&n.process,s=function(){try{var l=a&&a.require&&a.require("util").types;return l||i&&i.binding&&i.binding("util")}catch{}}();e.exports=s})($f,$f.exports);var pF=$f.exports,dF=cF,mF=t7,bw=pF,Pw=bw&&bw.isTypedArray,hF=Pw?mF(Pw):dF,n7=hF,vF=xL,yF=fg,gF=Vt,xF=e7,wF=pg,bF=n7,PF=Object.prototype,SF=PF.hasOwnProperty;function OF(e,t){var n=gF(e),r=!n&&yF(e),a=!n&&!r&&xF(e),o=!n&&!r&&!a&&bF(e),i=n||r||a||o,s=i?vF(e.length,String):[],l=s.length;for(var u in e)(t||SF.call(e,u))&&!(i&&(u=="length"||a&&(u=="offset"||u=="parent")||o&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||wF(u,l)))&&s.push(u);return s}var kF=OF,_F=Object.prototype;function AF(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||_F;return e===n}var CF=AF;function EF(e,t){return function(n){return e(t(n))}}var r7=EF,TF=r7,jF=TF(Object.keys,Object),$F=jF,NF=CF,MF=$F,RF=Object.prototype,IF=RF.hasOwnProperty;function DF(e){if(!NF(e))return MF(e);var t=[];for(var n in Object(e))IF.call(e,n)&&n!="constructor"&&t.push(n);return t}var LF=DF,FF=X0,zF=dg;function BF(e){return e!=null&&zF(e.length)&&!FF(e)}var Nu=BF,HF=kF,GF=LF,UF=Nu;function WF(e){return UF(e)?HF(e):GF(e)}var hd=WF,qF=sL,VF=yL,KF=hd;function XF(e){return qF(e,KF,VF)}var YF=XF,Sw=YF,QF=1,ZF=Object.prototype,JF=ZF.hasOwnProperty;function ez(e,t,n,r,a,o){var i=n&QF,s=Sw(e),l=s.length,u=Sw(t),f=u.length;if(l!=f&&!i)return!1;for(var c=l;c--;){var p=s[c];if(!(i?p in t:JF.call(t,p)))return!1}var d=o.get(e),h=o.get(t);if(d&&h)return d==t&&h==e;var m=!0;o.set(e,t),o.set(t,e);for(var g=i;++c<l;){p=s[c];var v=e[p],y=t[p];if(r)var x=i?r(y,v,p,t,e,o):r(v,y,p,e,t,o);if(!(x===void 0?v===y||a(v,y,n,r,o):x)){m=!1;break}g||(g=p=="constructor")}if(m&&!g){var P=e.constructor,w=t.constructor;P!=w&&"constructor"in e&&"constructor"in t&&!(typeof P=="function"&&P instanceof P&&typeof w=="function"&&w instanceof w)&&(m=!1)}return o.delete(e),o.delete(t),m}var tz=ez,nz=jo,rz=gr,az=nz(rz,"DataView"),oz=az,iz=jo,sz=gr,lz=iz(sz,"Promise"),uz=lz,cz=jo,fz=gr,pz=cz(fz,"Set"),a7=pz,dz=jo,mz=gr,hz=dz(mz,"WeakMap"),vz=hz,Sv=oz,Ov=Q0,kv=uz,_v=a7,Av=vz,o7=Ur,Os=c8,Ow="[object Map]",yz="[object Object]",kw="[object Promise]",_w="[object Set]",Aw="[object WeakMap]",Cw="[object DataView]",gz=Os(Sv),xz=Os(Ov),wz=Os(kv),bz=Os(_v),Pz=Os(Av),Va=o7;(Sv&&Va(new Sv(new ArrayBuffer(1)))!=Cw||Ov&&Va(new Ov)!=Ow||kv&&Va(kv.resolve())!=kw||_v&&Va(new _v)!=_w||Av&&Va(new Av)!=Aw)&&(Va=function(e){var t=o7(e),n=t==yz?e.constructor:void 0,r=n?Os(n):"";if(r)switch(r){case gz:return Cw;case xz:return Ow;case wz:return kw;case bz:return _w;case Pz:return Aw}return t});var Sz=Va,Rm=V8,Oz=Q8,kz=nL,_z=tz,Ew=Sz,Tw=Vt,jw=e7,Az=n7,Cz=1,$w="[object Arguments]",Nw="[object Array]",fc="[object Object]",Ez=Object.prototype,Mw=Ez.hasOwnProperty;function Tz(e,t,n,r,a,o){var i=Tw(e),s=Tw(t),l=i?Nw:Ew(e),u=s?Nw:Ew(t);l=l==$w?fc:l,u=u==$w?fc:u;var f=l==fc,c=u==fc,p=l==u;if(p&&jw(e)){if(!jw(t))return!1;i=!0,f=!1}if(p&&!f)return o||(o=new Rm),i||Az(e)?Oz(e,t,n,r,a,o):kz(e,t,l,n,r,a,o);if(!(n&Cz)){var d=f&&Mw.call(e,"__wrapped__"),h=c&&Mw.call(t,"__wrapped__");if(d||h){var m=d?e.value():e,g=h?t.value():t;return o||(o=new Rm),a(m,g,n,r,o)}}return p?(o||(o=new Rm),_z(e,t,n,r,a,o)):!1}var jz=Tz,$z=jz,Rw=Wr;function i7(e,t,n,r,a){return e===t?!0:e==null||t==null||!Rw(e)&&!Rw(t)?e!==e&&t!==t:$z(e,t,n,r,i7,a)}var mg=i7,Nz=V8,Mz=mg,Rz=1,Iz=2;function Dz(e,t,n,r){var a=n.length,o=a,i=!r;if(e==null)return!o;for(e=Object(e);a--;){var s=n[a];if(i&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++a<o;){s=n[a];var l=s[0],u=e[l],f=s[1];if(i&&s[2]){if(u===void 0&&!(l in e))return!1}else{var c=new Nz;if(r)var p=r(u,f,l,e,t,c);if(!(p===void 0?Mz(f,u,Rz|Iz,r,c):p))return!1}}return!0}var Lz=Dz,Fz=Ra;function zz(e){return e===e&&!Fz(e)}var s7=zz,Bz=s7,Hz=hd;function Gz(e){for(var t=Hz(e),n=t.length;n--;){var r=t[n],a=e[r];t[n]=[r,a,Bz(a)]}return t}var Uz=Gz;function Wz(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}var l7=Wz,qz=Lz,Vz=Uz,Kz=l7;function Xz(e){var t=Vz(e);return t.length==1&&t[0][2]?Kz(t[0][0],t[0][1]):function(n){return n===e||qz(n,e,t)}}var Yz=Xz;function Qz(e,t){return e!=null&&t in Object(e)}var Zz=Qz,Jz=h8,eB=fg,tB=Vt,nB=pg,rB=dg,aB=Jp;function oB(e,t,n){t=Jz(t,e);for(var r=-1,a=t.length,o=!1;++r<a;){var i=aB(t[r]);if(!(o=e!=null&&n(e,i)))break;e=e[i]}return o||++r!=a?o:(a=e==null?0:e.length,!!a&&rB(a)&&nB(i,a)&&(tB(e)||eB(e)))}var iB=oB,sB=Zz,lB=iB;function uB(e,t){return e!=null&&lB(e,t,sB)}var cB=uB,fB=mg,pB=v8,dB=cB,mB=K0,hB=s7,vB=l7,yB=Jp,gB=1,xB=2;function wB(e,t){return mB(e)&&hB(t)?vB(yB(e),t):function(n){var r=pB(n,e);return r===void 0&&r===t?dB(n,e):fB(t,r,gB|xB)}}var bB=wB;function PB(e){return e}var ks=PB;function SB(e){return function(t){return t==null?void 0:t[e]}}var OB=SB,kB=tg;function _B(e){return function(t){return kB(t,e)}}var AB=_B,CB=OB,EB=AB,TB=K0,jB=Jp;function $B(e){return TB(e)?CB(jB(e)):EB(e)}var NB=$B,MB=Yz,RB=bB,IB=ks,DB=Vt,LB=NB;function FB(e){return typeof e=="function"?e:e==null?IB:typeof e=="object"?DB(e)?RB(e[0],e[1]):MB(e):LB(e)}var Ia=FB;function zB(e,t,n,r){for(var a=e.length,o=n+(r?1:-1);r?o--:++o<a;)if(t(e[o],o,e))return o;return-1}var u7=zB;function BB(e){return e!==e}var HB=BB;function GB(e,t,n){for(var r=n-1,a=e.length;++r<a;)if(e[r]===t)return r;return-1}var UB=GB,WB=u7,qB=HB,VB=UB;function KB(e,t,n){return t===t?VB(e,t,n):WB(e,qB,n)}var XB=KB,YB=XB;function QB(e,t){var n=e==null?0:e.length;return!!n&&YB(e,t,0)>-1}var ZB=QB;function JB(e,t,n){for(var r=-1,a=e==null?0:e.length;++r<a;)if(n(t,e[r]))return!0;return!1}var eH=JB;function tH(){}var nH=tH,Im=a7,rH=nH,aH=cg,oH=1/0,iH=Im&&1/aH(new Im([,-0]))[1]==oH?function(e){return new Im(e)}:rH,sH=iH,lH=K8,uH=ZB,cH=eH,fH=Y8,pH=sH,dH=cg,mH=200;function hH(e,t,n){var r=-1,a=uH,o=e.length,i=!0,s=[],l=s;if(n)i=!1,a=cH;else if(o>=mH){var u=t?null:pH(e);if(u)return dH(u);i=!1,a=fH,l=new lH}else l=t?[]:s;e:for(;++r<o;){var f=e[r],c=t?t(f):f;if(f=n||f!==0?f:0,i&&c===c){for(var p=l.length;p--;)if(l[p]===c)continue e;t&&l.push(c),s.push(f)}else a(l,c,n)||(l!==s&&l.push(c),s.push(f))}return s}var vH=hH,yH=Ia,gH=vH;function xH(e,t){return e&&e.length?gH(e,yH(t)):[]}var wH=xH;const Iw=Ce(wH);function c7(e,t,n){return t===!0?Iw(e,n):oe(t)?Iw(e,t):e}function Di(e){"@babel/helpers - typeof";return Di=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Di(e)}var bH=["ref"];function Dw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function wr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Dw(Object(n),!0).forEach(function(r){vd(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Dw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function PH(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Lw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,p7(r.key),r)}}function SH(e,t,n){return t&&Lw(e.prototype,t),n&&Lw(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function OH(e,t,n){return t=Nf(t),kH(e,f7()?Reflect.construct(t,n||[],Nf(e).constructor):t.apply(e,n))}function kH(e,t){if(t&&(Di(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return _H(e)}function _H(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function f7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(f7=function(){return!!e})()}function Nf(e){return Nf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Nf(e)}function AH(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Cv(e,t)}function Cv(e,t){return Cv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Cv(e,t)}function vd(e,t,n){return t=p7(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p7(e){var t=CH(e,"string");return Di(t)=="symbol"?t:t+""}function CH(e,t){if(Di(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Di(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function EH(e,t){if(e==null)return{};var n=TH(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TH(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function jH(e){return e.value}function $H(e,t){if(C.isValidElement(e))return C.cloneElement(e,t);if(typeof e=="function")return C.createElement(e,t);t.ref;var n=EH(t,bH);return C.createElement(ug,n)}var Fw=1,hi=function(e){function t(){var n;PH(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=OH(this,t,[].concat(a)),vd(n,"lastBoundingBox",{width:-1,height:-1}),n}return AH(t,e),SH(t,[{key:"componentDidMount",value:function(){this.updateBBox()}},{key:"componentDidUpdate",value:function(){this.updateBBox()}},{key:"getBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var r=this.wrapperNode.getBoundingClientRect();return r.height=this.wrapperNode.offsetHeight,r.width=this.wrapperNode.offsetWidth,r}return null}},{key:"updateBBox",value:function(){var r=this.props.onBBoxUpdate,a=this.getBBox();a?(Math.abs(a.width-this.lastBoundingBox.width)>Fw||Math.abs(a.height-this.lastBoundingBox.height)>Fw)&&(this.lastBoundingBox.width=a.width,this.lastBoundingBox.height=a.height,r&&r(a)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,r&&r(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?wr({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(r){var a=this.props,o=a.layout,i=a.align,s=a.verticalAlign,l=a.margin,u=a.chartWidth,f=a.chartHeight,c,p;if(!r||(r.left===void 0||r.left===null)&&(r.right===void 0||r.right===null))if(i==="center"&&o==="vertical"){var d=this.getBBoxSnapshot();c={left:((u||0)-d.width)/2}}else c=i==="right"?{right:l&&l.right||0}:{left:l&&l.left||0};if(!r||(r.top===void 0||r.top===null)&&(r.bottom===void 0||r.bottom===null))if(s==="middle"){var h=this.getBBoxSnapshot();p={top:((f||0)-h.height)/2}}else p=s==="bottom"?{bottom:l&&l.bottom||0}:{top:l&&l.top||0};return wr(wr({},c),p)}},{key:"render",value:function(){var r=this,a=this.props,o=a.content,i=a.width,s=a.height,l=a.wrapperStyle,u=a.payloadUniqBy,f=a.payload,c=wr(wr({position:"absolute",width:i||"auto",height:s||"auto"},this.getDefaultPosition(l)),l);return C.createElement("div",{className:"recharts-legend-wrapper",style:c,ref:function(d){r.wrapperNode=d}},$H(o,wr(wr({},this.props),{},{payload:c7(f,u,jH)})))}}],[{key:"getWithHeight",value:function(r,a){var o=wr(wr({},this.defaultProps),r.props),i=o.layout;return i==="vertical"&&V(r.props.height)?{height:r.props.height}:i==="horizontal"?{width:r.props.width||a}:null}}])}(k.PureComponent);vd(hi,"displayName","Legend");vd(hi,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var zw=$u,NH=fg,MH=Vt,Bw=zw?zw.isConcatSpreadable:void 0;function RH(e){return MH(e)||NH(e)||!!(Bw&&e&&e[Bw])}var IH=RH,DH=Z8,LH=IH;function d7(e,t,n,r,a){var o=-1,i=e.length;for(n||(n=LH),a||(a=[]);++o<i;){var s=e[o];t>0&&n(s)?t>1?d7(s,t-1,n,r,a):DH(a,s):r||(a[a.length]=s)}return a}var m7=d7;function FH(e){return function(t,n,r){for(var a=-1,o=Object(t),i=r(t),s=i.length;s--;){var l=i[e?s:++a];if(n(o[l],l,o)===!1)break}return t}}var zH=FH,BH=zH,HH=BH(),GH=HH,UH=GH,WH=hd;function qH(e,t){return e&&UH(e,t,WH)}var h7=qH,VH=Nu;function KH(e,t){return function(n,r){if(n==null)return n;if(!VH(n))return e(n,r);for(var a=n.length,o=t?a:-1,i=Object(n);(t?o--:++o<a)&&r(i[o],o,i)!==!1;);return n}}var XH=KH,YH=h7,QH=XH,ZH=QH(YH),hg=ZH,JH=hg,eG=Nu;function tG(e,t){var n=-1,r=eG(e)?Array(e.length):[];return JH(e,function(a,o,i){r[++n]=t(a,o,i)}),r}var v7=tG;function nG(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}var rG=nG,Hw=ys;function aG(e,t){if(e!==t){var n=e!==void 0,r=e===null,a=e===e,o=Hw(e),i=t!==void 0,s=t===null,l=t===t,u=Hw(t);if(!s&&!u&&!o&&e>t||o&&i&&l&&!s&&!u||r&&i&&l||!n&&l||!a)return 1;if(!r&&!o&&!u&&e<t||u&&n&&a&&!r&&!o||s&&n&&a||!i&&a||!l)return-1}return 0}var oG=aG,iG=oG;function sG(e,t,n){for(var r=-1,a=e.criteria,o=t.criteria,i=a.length,s=n.length;++r<i;){var l=iG(a[r],o[r]);if(l){if(r>=s)return l;var u=n[r];return l*(u=="desc"?-1:1)}}return e.index-t.index}var lG=sG,Dm=eg,uG=tg,cG=Ia,fG=v7,pG=rG,dG=t7,mG=lG,hG=ks,vG=Vt;function yG(e,t,n){t.length?t=Dm(t,function(o){return vG(o)?function(i){return uG(i,o.length===1?o[0]:o)}:o}):t=[hG];var r=-1;t=Dm(t,dG(cG));var a=fG(e,function(o,i,s){var l=Dm(t,function(u){return u(o)});return{criteria:l,index:++r,value:o}});return pG(a,function(o,i){return mG(o,i,n)})}var gG=yG;function xG(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var wG=xG,bG=wG,Gw=Math.max;function PG(e,t,n){return t=Gw(t===void 0?e.length-1:t,0),function(){for(var r=arguments,a=-1,o=Gw(r.length-t,0),i=Array(o);++a<o;)i[a]=r[t+a];a=-1;for(var s=Array(t+1);++a<t;)s[a]=r[a];return s[t]=n(i),bG(e,this,s)}}var SG=PG;function OG(e){return function(){return e}}var kG=OG,_G=jo,AG=function(){try{var e=_G(Object,"defineProperty");return e({},"",{}),e}catch{}}(),y7=AG,CG=kG,Uw=y7,EG=ks,TG=Uw?function(e,t){return Uw(e,"toString",{configurable:!0,enumerable:!1,value:CG(t),writable:!0})}:EG,jG=TG,$G=800,NG=16,MG=Date.now;function RG(e){var t=0,n=0;return function(){var r=MG(),a=NG-(r-n);if(n=r,a>0){if(++t>=$G)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var IG=RG,DG=jG,LG=IG,FG=LG(DG),zG=FG,BG=ks,HG=SG,GG=zG;function UG(e,t){return GG(HG(e,t,BG),e+"")}var WG=UG,qG=Y0,VG=Nu,KG=pg,XG=Ra;function YG(e,t,n){if(!XG(n))return!1;var r=typeof t;return(r=="number"?VG(n)&&KG(t,n.length):r=="string"&&t in n)?qG(n[t],e):!1}var yd=YG,QG=m7,ZG=gG,JG=WG,Ww=yd,eU=JG(function(e,t){if(e==null)return[];var n=t.length;return n>1&&Ww(e,t[0],t[1])?t=[]:n>2&&Ww(t[0],t[1],t[2])&&(t=[t[0]]),ZG(e,QG(t,1),[])}),tU=eU;const vg=Ce(tU);function Hl(e){"@babel/helpers - typeof";return Hl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Hl(e)}function Ev(){return Ev=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ev.apply(this,arguments)}function nU(e,t){return iU(e)||oU(e,t)||aU(e,t)||rU()}function rU(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function aU(e,t){if(e){if(typeof e=="string")return qw(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return qw(e,t)}}function qw(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function oU(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function iU(e){if(Array.isArray(e))return e}function Vw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Lm(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Vw(Object(n),!0).forEach(function(r){sU(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Vw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function sU(e,t,n){return t=lU(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lU(e){var t=uU(e,"string");return Hl(t)=="symbol"?t:t+""}function uU(e,t){if(Hl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Hl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function cU(e){return Array.isArray(e)&&it(e[0])&&it(e[1])?e.join(" ~ "):e}var fU=function(t){var n=t.separator,r=n===void 0?" : ":n,a=t.contentStyle,o=a===void 0?{}:a,i=t.itemStyle,s=i===void 0?{}:i,l=t.labelStyle,u=l===void 0?{}:l,f=t.payload,c=t.formatter,p=t.itemSorter,d=t.wrapperClassName,h=t.labelClassName,m=t.label,g=t.labelFormatter,v=t.accessibilityLayer,y=v===void 0?!1:v,x=function(){if(f&&f.length){var T={padding:0,margin:0},N=(p?vg(f,p):f).map(function(M,I){if(M.type==="none")return null;var R=Lm({display:"block",paddingTop:4,paddingBottom:4,color:M.color||"#000"},s),L=M.formatter||c||cU,$=M.value,D=M.name,H=$,W=D;if(L&&H!=null&&W!=null){var G=L($,D,M,I,f);if(Array.isArray(G)){var Z=nU(G,2);H=Z[0],W=Z[1]}else H=G}return C.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(I),style:R},it(W)?C.createElement("span",{className:"recharts-tooltip-item-name"},W):null,it(W)?C.createElement("span",{className:"recharts-tooltip-item-separator"},r):null,C.createElement("span",{className:"recharts-tooltip-item-value"},H),C.createElement("span",{className:"recharts-tooltip-item-unit"},M.unit||""))});return C.createElement("ul",{className:"recharts-tooltip-item-list",style:T},N)}return null},P=Lm({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},o),w=Lm({margin:0},u),S=!te(m),O=S?m:"",_=ue("recharts-default-tooltip",d),A=ue("recharts-tooltip-label",h);S&&g&&f!==void 0&&f!==null&&(O=g(m,f));var j=y?{role:"status","aria-live":"assertive"}:{};return C.createElement("div",Ev({className:_,style:P},j),C.createElement("p",{className:A,style:w},C.isValidElement(O)?O:"".concat(O)),x())};function Gl(e){"@babel/helpers - typeof";return Gl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gl(e)}function pc(e,t,n){return t=pU(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pU(e){var t=dU(e,"string");return Gl(t)=="symbol"?t:t+""}function dU(e,t){if(Gl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Gl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Hs="recharts-tooltip-wrapper",mU={visibility:"hidden"};function hU(e){var t=e.coordinate,n=e.translateX,r=e.translateY;return ue(Hs,pc(pc(pc(pc({},"".concat(Hs,"-right"),V(n)&&t&&V(t.x)&&n>=t.x),"".concat(Hs,"-left"),V(n)&&t&&V(t.x)&&n<t.x),"".concat(Hs,"-bottom"),V(r)&&t&&V(t.y)&&r>=t.y),"".concat(Hs,"-top"),V(r)&&t&&V(t.y)&&r<t.y))}function Kw(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.key,a=e.offsetTopLeft,o=e.position,i=e.reverseDirection,s=e.tooltipDimension,l=e.viewBox,u=e.viewBoxDimension;if(o&&V(o[r]))return o[r];var f=n[r]-s-a,c=n[r]+a;if(t[r])return i[r]?f:c;if(i[r]){var p=f,d=l[r];return p<d?Math.max(c,l[r]):Math.max(f,l[r])}var h=c+s,m=l[r]+u;return h>m?Math.max(f,l[r]):Math.max(c,l[r])}function vU(e){var t=e.translateX,n=e.translateY,r=e.useTranslate3d;return{transform:r?"translate3d(".concat(t,"px, ").concat(n,"px, 0)"):"translate(".concat(t,"px, ").concat(n,"px)")}}function yU(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.offsetTopLeft,a=e.position,o=e.reverseDirection,i=e.tooltipBox,s=e.useTranslate3d,l=e.viewBox,u,f,c;return i.height>0&&i.width>0&&n?(f=Kw({allowEscapeViewBox:t,coordinate:n,key:"x",offsetTopLeft:r,position:a,reverseDirection:o,tooltipDimension:i.width,viewBox:l,viewBoxDimension:l.width}),c=Kw({allowEscapeViewBox:t,coordinate:n,key:"y",offsetTopLeft:r,position:a,reverseDirection:o,tooltipDimension:i.height,viewBox:l,viewBoxDimension:l.height}),u=vU({translateX:f,translateY:c,useTranslate3d:s})):u=mU,{cssProperties:u,cssClasses:hU({translateX:f,translateY:c,coordinate:n})}}function Li(e){"@babel/helpers - typeof";return Li=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Li(e)}function Xw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Yw(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Xw(Object(n),!0).forEach(function(r){jv(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function gU(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function xU(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,x7(r.key),r)}}function wU(e,t,n){return t&&xU(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function bU(e,t,n){return t=Mf(t),PU(e,g7()?Reflect.construct(t,n||[],Mf(e).constructor):t.apply(e,n))}function PU(e,t){if(t&&(Li(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return SU(e)}function SU(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(g7=function(){return!!e})()}function Mf(e){return Mf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Mf(e)}function OU(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Tv(e,t)}function Tv(e,t){return Tv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Tv(e,t)}function jv(e,t,n){return t=x7(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x7(e){var t=kU(e,"string");return Li(t)=="symbol"?t:t+""}function kU(e,t){if(Li(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Li(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Qw=1,_U=function(e){function t(){var n;gU(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=bU(this,t,[].concat(a)),jv(n,"state",{dismissed:!1,dismissedAtCoordinate:{x:0,y:0},lastBoundingBox:{width:-1,height:-1}}),jv(n,"handleKeyDown",function(i){if(i.key==="Escape"){var s,l,u,f;n.setState({dismissed:!0,dismissedAtCoordinate:{x:(s=(l=n.props.coordinate)===null||l===void 0?void 0:l.x)!==null&&s!==void 0?s:0,y:(u=(f=n.props.coordinate)===null||f===void 0?void 0:f.y)!==null&&u!==void 0?u:0}})}}),n}return OU(t,e),wU(t,[{key:"updateBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var r=this.wrapperNode.getBoundingClientRect();(Math.abs(r.width-this.state.lastBoundingBox.width)>Qw||Math.abs(r.height-this.state.lastBoundingBox.height)>Qw)&&this.setState({lastBoundingBox:{width:r.width,height:r.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var r,a;this.props.active&&this.updateBBox(),this.state.dismissed&&(((r=this.props.coordinate)===null||r===void 0?void 0:r.x)!==this.state.dismissedAtCoordinate.x||((a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var r=this,a=this.props,o=a.active,i=a.allowEscapeViewBox,s=a.animationDuration,l=a.animationEasing,u=a.children,f=a.coordinate,c=a.hasPayload,p=a.isAnimationActive,d=a.offset,h=a.position,m=a.reverseDirection,g=a.useTranslate3d,v=a.viewBox,y=a.wrapperStyle,x=yU({allowEscapeViewBox:i,coordinate:f,offsetTopLeft:d,position:h,reverseDirection:m,tooltipBox:this.state.lastBoundingBox,useTranslate3d:g,viewBox:v}),P=x.cssClasses,w=x.cssProperties,S=Yw(Yw({transition:p&&o?"transform ".concat(s,"ms ").concat(l):void 0},w),{},{pointerEvents:"none",visibility:!this.state.dismissed&&o&&c?"visible":"hidden",position:"absolute",top:0,left:0},y);return C.createElement("div",{tabIndex:-1,className:P,style:S,ref:function(_){r.wrapperNode=_}},u)}}])}(k.PureComponent),AU=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},Da={isSsr:AU()};function Fi(e){"@babel/helpers - typeof";return Fi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Fi(e)}function Zw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Jw(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Zw(Object(n),!0).forEach(function(r){yg(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function CU(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function EU(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,b7(r.key),r)}}function TU(e,t,n){return t&&EU(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function jU(e,t,n){return t=Rf(t),$U(e,w7()?Reflect.construct(t,n||[],Rf(e).constructor):t.apply(e,n))}function $U(e,t){if(t&&(Fi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return NU(e)}function NU(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function w7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(w7=function(){return!!e})()}function Rf(e){return Rf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Rf(e)}function MU(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&$v(e,t)}function $v(e,t){return $v=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},$v(e,t)}function yg(e,t,n){return t=b7(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b7(e){var t=RU(e,"string");return Fi(t)=="symbol"?t:t+""}function RU(e,t){if(Fi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Fi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function IU(e){return e.dataKey}function DU(e,t){return C.isValidElement(e)?C.cloneElement(e,t):typeof e=="function"?C.createElement(e,t):C.createElement(fU,t)}var Zn=function(e){function t(){return CU(this,t),jU(this,t,arguments)}return MU(t,e),TU(t,[{key:"render",value:function(){var r=this,a=this.props,o=a.active,i=a.allowEscapeViewBox,s=a.animationDuration,l=a.animationEasing,u=a.content,f=a.coordinate,c=a.filterNull,p=a.isAnimationActive,d=a.offset,h=a.payload,m=a.payloadUniqBy,g=a.position,v=a.reverseDirection,y=a.useTranslate3d,x=a.viewBox,P=a.wrapperStyle,w=h??[];c&&w.length&&(w=c7(h.filter(function(O){return O.value!=null&&(O.hide!==!0||r.props.includeHidden)}),m,IU));var S=w.length>0;return C.createElement(_U,{allowEscapeViewBox:i,animationDuration:s,animationEasing:l,isAnimationActive:p,active:o,coordinate:f,hasPayload:S,offset:d,position:g,reverseDirection:v,useTranslate3d:y,viewBox:x,wrapperStyle:P},DU(u,Jw(Jw({},this.props),{},{payload:w})))}}])}(k.PureComponent);yg(Zn,"displayName","Tooltip");yg(Zn,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!Da.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var LU=gr,FU=function(){return LU.Date.now()},zU=FU,BU=/\s/;function HU(e){for(var t=e.length;t--&&BU.test(e.charAt(t)););return t}var GU=HU,UU=GU,WU=/^\s+/;function qU(e){return e&&e.slice(0,UU(e)+1).replace(WU,"")}var VU=qU,KU=VU,e3=Ra,XU=ys,t3=NaN,YU=/^[-+]0x[0-9a-f]+$/i,QU=/^0b[01]+$/i,ZU=/^0o[0-7]+$/i,JU=parseInt;function eW(e){if(typeof e=="number")return e;if(XU(e))return t3;if(e3(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=e3(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=KU(e);var n=QU.test(e);return n||ZU.test(e)?JU(e.slice(2),n?2:8):YU.test(e)?t3:+e}var P7=eW,tW=Ra,Fm=zU,n3=P7,nW="Expected a function",rW=Math.max,aW=Math.min;function oW(e,t,n){var r,a,o,i,s,l,u=0,f=!1,c=!1,p=!0;if(typeof e!="function")throw new TypeError(nW);t=n3(t)||0,tW(n)&&(f=!!n.leading,c="maxWait"in n,o=c?rW(n3(n.maxWait)||0,t):o,p="trailing"in n?!!n.trailing:p);function d(S){var O=r,_=a;return r=a=void 0,u=S,i=e.apply(_,O),i}function h(S){return u=S,s=setTimeout(v,t),f?d(S):i}function m(S){var O=S-l,_=S-u,A=t-O;return c?aW(A,o-_):A}function g(S){var O=S-l,_=S-u;return l===void 0||O>=t||O<0||c&&_>=o}function v(){var S=Fm();if(g(S))return y(S);s=setTimeout(v,m(S))}function y(S){return s=void 0,p&&r?d(S):(r=a=void 0,i)}function x(){s!==void 0&&clearTimeout(s),u=0,r=l=a=s=void 0}function P(){return s===void 0?i:y(Fm())}function w(){var S=Fm(),O=g(S);if(r=arguments,a=this,l=S,O){if(s===void 0)return h(l);if(c)return clearTimeout(s),s=setTimeout(v,t),d(l)}return s===void 0&&(s=setTimeout(v,t)),i}return w.cancel=x,w.flush=P,w}var iW=oW,sW=iW,lW=Ra,uW="Expected a function";function cW(e,t,n){var r=!0,a=!0;if(typeof e!="function")throw new TypeError(uW);return lW(n)&&(r="leading"in n?!!n.leading:r,a="trailing"in n?!!n.trailing:a),sW(e,t,{leading:r,maxWait:t,trailing:a})}var fW=cW;const S7=Ce(fW);function Ul(e){"@babel/helpers - typeof";return Ul=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ul(e)}function r3(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function dc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?r3(Object(n),!0).forEach(function(r){pW(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r3(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function pW(e,t,n){return t=dW(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function dW(e){var t=mW(e,"string");return Ul(t)=="symbol"?t:t+""}function mW(e,t){if(Ul(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ul(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function hW(e,t){return xW(e)||gW(e,t)||yW(e,t)||vW()}function vW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function yW(e,t){if(e){if(typeof e=="string")return a3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a3(e,t)}}function a3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function gW(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function xW(e){if(Array.isArray(e))return e}var wW=k.forwardRef(function(e,t){var n=e.aspect,r=e.initialDimension,a=r===void 0?{width:-1,height:-1}:r,o=e.width,i=o===void 0?"100%":o,s=e.height,l=s===void 0?"100%":s,u=e.minWidth,f=u===void 0?0:u,c=e.minHeight,p=e.maxHeight,d=e.children,h=e.debounce,m=h===void 0?0:h,g=e.id,v=e.className,y=e.onResize,x=e.style,P=x===void 0?{}:x,w=k.useRef(null),S=k.useRef();S.current=y,k.useImperativeHandle(t,function(){return Object.defineProperty(w.current,"current",{get:function(){return console.warn("The usage of ref.current.current is deprecated and will no longer be supported."),w.current},configurable:!0})});var O=k.useState({containerWidth:a.width,containerHeight:a.height}),_=hW(O,2),A=_[0],j=_[1],E=k.useCallback(function(N,M){j(function(I){var R=Math.round(N),L=Math.round(M);return I.containerWidth===R&&I.containerHeight===L?I:{containerWidth:R,containerHeight:L}})},[]);k.useEffect(function(){var N=function(D){var H,W=D[0].contentRect,G=W.width,Z=W.height;E(G,Z),(H=S.current)===null||H===void 0||H.call(S,G,Z)};m>0&&(N=S7(N,m,{trailing:!0,leading:!1}));var M=new ResizeObserver(N),I=w.current.getBoundingClientRect(),R=I.width,L=I.height;return E(R,L),M.observe(w.current),function(){M.disconnect()}},[E,m]);var T=k.useMemo(function(){var N=A.containerWidth,M=A.containerHeight;if(N<0||M<0)return null;$r(Za(i)||Za(l),`The width(%s) and height(%s) are both fixed numbers,
-       maybe you don't need to use a ResponsiveContainer.`,i,l),$r(!n||n>0,"The aspect(%s) must be greater than zero.",n);var I=Za(i)?N:i,R=Za(l)?M:l;n&&n>0&&(I?R=I/n:R&&(I=R*n),p&&R>p&&(R=p)),$r(I>0||R>0,`The width(%s) and height(%s) of chart should be greater than 0,
+            A`).concat(i,",").concat(i,",0,1,1,").concat(s,",").concat(o),className:"recharts-legend-icon"});if(r.type==="rect")return A.createElement("path",{stroke:"none",fill:l,d:"M0,".concat(cn/8,"h").concat(cn,"v").concat(cn*3/4,"h").concat(-cn,"z"),className:"recharts-legend-icon"});if(A.isValidElement(r.legendIcon)){var u=eD({},r);return delete u.legendIcon,A.cloneElement(r.legendIcon,u)}return A.createElement(md,{fill:l,cx:o,cy:o,size:cn,sizeType:"diameter",type:r.type})}},{key:"renderItems",value:function(){var r=this,a=this.props,o=a.payload,i=a.iconSize,s=a.layout,l=a.formatter,u=a.inactiveColor,p={x:0,y:0,width:cn,height:cn},c={display:s==="horizontal"?"inline-block":"block",marginRight:10},f={display:"inline-block",verticalAlign:"middle",marginRight:4};return o.map(function(d,h){var m=d.formatter||l,g=ue(Bl(Bl({"recharts-legend-item":!0},"legend-item-".concat(h),!0),"inactive",d.inactive));if(d.type==="none")return null;var v=oe(d.value)?null:d.value;$r(!oe(d.value),`The name property is also required when using a function for the dataKey of a chart's cartesian components. Ex: <Bar name="Name of my Data"/>`);var y=d.inactive?u:d.color;return A.createElement("li",b0({className:g,style:c,key:"legend-item-".concat(h)},Fl(r.props,d,h)),A.createElement(f0,{width:i,height:i,viewBox:p,style:f},r.renderIcon(d)),A.createElement("span",{className:"recharts-legend-item-text",style:{color:y}},m?m(v,d,h):v))})}},{key:"render",value:function(){var r=this.props,a=r.payload,o=r.layout,i=r.align;if(!a||!a.length)return null;var s={padding:0,margin:0,textAlign:o==="horizontal"?i:"left"};return A.createElement("ul",{className:"recharts-default-legend",style:s},this.renderItems())}}])}(k.PureComponent);Bl(ug,"displayName","Legend");Bl(ug,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var uD=Qf;function cD(){this.__data__=new uD,this.size=0}var pD=cD;function fD(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}var dD=fD;function mD(e){return this.__data__.get(e)}var hD=mD;function vD(e){return this.__data__.has(e)}var yD=vD,gD=Qf,xD=Qy,wD=Zy,bD=200;function PD(e,t){var n=this.__data__;if(n instanceof gD){var r=n.__data__;if(!xD||r.length<bD-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new wD(r)}return n.set(e,t),this.size=n.size,this}var SD=PD,OD=Qf,kD=pD,_D=dD,CD=hD,AD=yD,ED=SD;function Ss(e){var t=this.__data__=new OD(e);this.size=t.size}Ss.prototype.clear=kD;Ss.prototype.delete=_D;Ss.prototype.get=CD;Ss.prototype.has=AD;Ss.prototype.set=ED;var Y8=Ss,TD="__lodash_hash_undefined__";function jD(e){return this.__data__.set(e,TD),this}var $D=jD;function ND(e){return this.__data__.has(e)}var MD=ND,RD=Zy,ID=$D,DD=MD;function Ep(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new RD;++t<n;)this.add(e[t])}Ep.prototype.add=Ep.prototype.push=ID;Ep.prototype.has=DD;var Q8=Ep;function LD(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var Z8=LD;function FD(e,t){return e.has(t)}var J8=FD,zD=Q8,BD=Z8,HD=J8,GD=1,UD=2;function WD(e,t,n,r,a,o){var i=n&GD,s=e.length,l=t.length;if(s!=l&&!(i&&l>s))return!1;var u=o.get(e),p=o.get(t);if(u&&p)return u==t&&p==e;var c=-1,f=!0,d=n&UD?new zD:void 0;for(o.set(e,t),o.set(t,e);++c<s;){var h=e[c],m=t[c];if(r)var g=i?r(m,h,c,t,e,o):r(h,m,c,e,t,o);if(g!==void 0){if(g)continue;f=!1;break}if(d){if(!BD(t,function(v,y){if(!HD(d,y)&&(h===v||a(h,v,n,r,o)))return d.push(y)})){f=!1;break}}else if(!(h===m||a(h,m,n,r,o))){f=!1;break}}return o.delete(e),o.delete(t),f}var e7=WD,qD=gr,VD=qD.Uint8Array,KD=VD;function XD(e){var t=-1,n=Array(e.size);return e.forEach(function(r,a){n[++t]=[a,r]}),n}var YD=XD;function QD(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}var cg=QD,gw=$u,xw=KD,ZD=Yy,JD=e7,eL=YD,tL=cg,nL=1,rL=2,aL="[object Boolean]",oL="[object Date]",iL="[object Error]",sL="[object Map]",lL="[object Number]",uL="[object RegExp]",cL="[object Set]",pL="[object String]",fL="[object Symbol]",dL="[object ArrayBuffer]",mL="[object DataView]",ww=gw?gw.prototype:void 0,Mm=ww?ww.valueOf:void 0;function hL(e,t,n,r,a,o,i){switch(n){case mL:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case dL:return!(e.byteLength!=t.byteLength||!o(new xw(e),new xw(t)));case aL:case oL:case lL:return ZD(+e,+t);case iL:return e.name==t.name&&e.message==t.message;case uL:case pL:return e==t+"";case sL:var s=eL;case cL:var l=r&nL;if(s||(s=tL),e.size!=t.size&&!l)return!1;var u=i.get(e);if(u)return u==t;r|=rL,i.set(e,t);var p=JD(s(e),s(t),r,a,o,i);return i.delete(e),p;case fL:if(Mm)return Mm.call(e)==Mm.call(t)}return!1}var vL=hL;function yL(e,t){for(var n=-1,r=t.length,a=e.length;++n<r;)e[a+n]=t[n];return e}var t7=yL,gL=t7,xL=Vt;function wL(e,t,n){var r=t(e);return xL(e)?r:gL(r,n(e))}var bL=wL;function PL(e,t){for(var n=-1,r=e==null?0:e.length,a=0,o=[];++n<r;){var i=e[n];t(i,n,e)&&(o[a++]=i)}return o}var SL=PL;function OL(){return[]}var kL=OL,_L=SL,CL=kL,AL=Object.prototype,EL=AL.propertyIsEnumerable,bw=Object.getOwnPropertySymbols,TL=bw?function(e){return e==null?[]:(e=Object(e),_L(bw(e),function(t){return EL.call(e,t)}))}:CL,jL=TL;function $L(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}var NL=$L,ML=Ur,RL=Wr,IL="[object Arguments]";function DL(e){return RL(e)&&ML(e)==IL}var LL=DL,Pw=LL,FL=Wr,n7=Object.prototype,zL=n7.hasOwnProperty,BL=n7.propertyIsEnumerable,HL=Pw(function(){return arguments}())?Pw:function(e){return FL(e)&&zL.call(e,"callee")&&!BL.call(e,"callee")},pg=HL,Tp={exports:{}};function GL(){return!1}var UL=GL;Tp.exports;(function(e,t){var n=gr,r=UL,a=t&&!t.nodeType&&t,o=a&&!0&&e&&!e.nodeType&&e,i=o&&o.exports===a,s=i?n.Buffer:void 0,l=s?s.isBuffer:void 0,u=l||r;e.exports=u})(Tp,Tp.exports);var r7=Tp.exports,WL=9007199254740991,qL=/^(?:0|[1-9]\d*)$/;function VL(e,t){var n=typeof e;return t=t??WL,!!t&&(n=="number"||n!="symbol"&&qL.test(e))&&e>-1&&e%1==0&&e<t}var fg=VL,KL=9007199254740991;function XL(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=KL}var dg=XL,YL=Ur,QL=dg,ZL=Wr,JL="[object Arguments]",eF="[object Array]",tF="[object Boolean]",nF="[object Date]",rF="[object Error]",aF="[object Function]",oF="[object Map]",iF="[object Number]",sF="[object Object]",lF="[object RegExp]",uF="[object Set]",cF="[object String]",pF="[object WeakMap]",fF="[object ArrayBuffer]",dF="[object DataView]",mF="[object Float32Array]",hF="[object Float64Array]",vF="[object Int8Array]",yF="[object Int16Array]",gF="[object Int32Array]",xF="[object Uint8Array]",wF="[object Uint8ClampedArray]",bF="[object Uint16Array]",PF="[object Uint32Array]",De={};De[mF]=De[hF]=De[vF]=De[yF]=De[gF]=De[xF]=De[wF]=De[bF]=De[PF]=!0;De[JL]=De[eF]=De[fF]=De[tF]=De[dF]=De[nF]=De[rF]=De[aF]=De[oF]=De[iF]=De[sF]=De[lF]=De[uF]=De[cF]=De[pF]=!1;function SF(e){return ZL(e)&&QL(e.length)&&!!De[YL(e)]}var OF=SF;function kF(e){return function(t){return e(t)}}var a7=kF,jp={exports:{}};jp.exports;(function(e,t){var n=p8,r=t&&!t.nodeType&&t,a=r&&!0&&e&&!e.nodeType&&e,o=a&&a.exports===r,i=o&&n.process,s=function(){try{var l=a&&a.require&&a.require("util").types;return l||i&&i.binding&&i.binding("util")}catch{}}();e.exports=s})(jp,jp.exports);var _F=jp.exports,CF=OF,AF=a7,Sw=_F,Ow=Sw&&Sw.isTypedArray,EF=Ow?AF(Ow):CF,o7=EF,TF=NL,jF=pg,$F=Vt,NF=r7,MF=fg,RF=o7,IF=Object.prototype,DF=IF.hasOwnProperty;function LF(e,t){var n=$F(e),r=!n&&jF(e),a=!n&&!r&&NF(e),o=!n&&!r&&!a&&RF(e),i=n||r||a||o,s=i?TF(e.length,String):[],l=s.length;for(var u in e)(t||DF.call(e,u))&&!(i&&(u=="length"||a&&(u=="offset"||u=="parent")||o&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||MF(u,l)))&&s.push(u);return s}var FF=LF,zF=Object.prototype;function BF(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||zF;return e===n}var HF=BF;function GF(e,t){return function(n){return e(t(n))}}var i7=GF,UF=i7,WF=UF(Object.keys,Object),qF=WF,VF=HF,KF=qF,XF=Object.prototype,YF=XF.hasOwnProperty;function QF(e){if(!VF(e))return KF(e);var t=[];for(var n in Object(e))YF.call(e,n)&&n!="constructor"&&t.push(n);return t}var ZF=QF,JF=Xy,ez=dg;function tz(e){return e!=null&&ez(e.length)&&!JF(e)}var Nu=tz,nz=FF,rz=ZF,az=Nu;function oz(e){return az(e)?nz(e):rz(e)}var hd=oz,iz=bL,sz=jL,lz=hd;function uz(e){return iz(e,lz,sz)}var cz=uz,kw=cz,pz=1,fz=Object.prototype,dz=fz.hasOwnProperty;function mz(e,t,n,r,a,o){var i=n&pz,s=kw(e),l=s.length,u=kw(t),p=u.length;if(l!=p&&!i)return!1;for(var c=l;c--;){var f=s[c];if(!(i?f in t:dz.call(t,f)))return!1}var d=o.get(e),h=o.get(t);if(d&&h)return d==t&&h==e;var m=!0;o.set(e,t),o.set(t,e);for(var g=i;++c<l;){f=s[c];var v=e[f],y=t[f];if(r)var x=i?r(y,v,f,t,e,o):r(v,y,f,e,t,o);if(!(x===void 0?v===y||a(v,y,n,r,o):x)){m=!1;break}g||(g=f=="constructor")}if(m&&!g){var P=e.constructor,w=t.constructor;P!=w&&"constructor"in e&&"constructor"in t&&!(typeof P=="function"&&P instanceof P&&typeof w=="function"&&w instanceof w)&&(m=!1)}return o.delete(e),o.delete(t),m}var hz=mz,vz=jo,yz=gr,gz=vz(yz,"DataView"),xz=gz,wz=jo,bz=gr,Pz=wz(bz,"Promise"),Sz=Pz,Oz=jo,kz=gr,_z=Oz(kz,"Set"),s7=_z,Cz=jo,Az=gr,Ez=Cz(Az,"WeakMap"),Tz=Ez,S0=xz,O0=Qy,k0=Sz,_0=s7,C0=Tz,l7=Ur,Os=d8,_w="[object Map]",jz="[object Object]",Cw="[object Promise]",Aw="[object Set]",Ew="[object WeakMap]",Tw="[object DataView]",$z=Os(S0),Nz=Os(O0),Mz=Os(k0),Rz=Os(_0),Iz=Os(C0),Va=l7;(S0&&Va(new S0(new ArrayBuffer(1)))!=Tw||O0&&Va(new O0)!=_w||k0&&Va(k0.resolve())!=Cw||_0&&Va(new _0)!=Aw||C0&&Va(new C0)!=Ew)&&(Va=function(e){var t=l7(e),n=t==jz?e.constructor:void 0,r=n?Os(n):"";if(r)switch(r){case $z:return Tw;case Nz:return _w;case Mz:return Cw;case Rz:return Aw;case Iz:return Ew}return t});var Dz=Va,Rm=Y8,Lz=e7,Fz=vL,zz=hz,jw=Dz,$w=Vt,Nw=r7,Bz=o7,Hz=1,Mw="[object Arguments]",Rw="[object Array]",pc="[object Object]",Gz=Object.prototype,Iw=Gz.hasOwnProperty;function Uz(e,t,n,r,a,o){var i=$w(e),s=$w(t),l=i?Rw:jw(e),u=s?Rw:jw(t);l=l==Mw?pc:l,u=u==Mw?pc:u;var p=l==pc,c=u==pc,f=l==u;if(f&&Nw(e)){if(!Nw(t))return!1;i=!0,p=!1}if(f&&!p)return o||(o=new Rm),i||Bz(e)?Lz(e,t,n,r,a,o):Fz(e,t,l,n,r,a,o);if(!(n&Hz)){var d=p&&Iw.call(e,"__wrapped__"),h=c&&Iw.call(t,"__wrapped__");if(d||h){var m=d?e.value():e,g=h?t.value():t;return o||(o=new Rm),a(m,g,n,r,o)}}return f?(o||(o=new Rm),zz(e,t,n,r,a,o)):!1}var Wz=Uz,qz=Wz,Dw=Wr;function u7(e,t,n,r,a){return e===t?!0:e==null||t==null||!Dw(e)&&!Dw(t)?e!==e&&t!==t:qz(e,t,n,r,u7,a)}var mg=u7,Vz=Y8,Kz=mg,Xz=1,Yz=2;function Qz(e,t,n,r){var a=n.length,o=a,i=!r;if(e==null)return!o;for(e=Object(e);a--;){var s=n[a];if(i&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++a<o;){s=n[a];var l=s[0],u=e[l],p=s[1];if(i&&s[2]){if(u===void 0&&!(l in e))return!1}else{var c=new Vz;if(r)var f=r(u,p,l,e,t,c);if(!(f===void 0?Kz(p,u,Xz|Yz,r,c):f))return!1}}return!0}var Zz=Qz,Jz=Ra;function eB(e){return e===e&&!Jz(e)}var c7=eB,tB=c7,nB=hd;function rB(e){for(var t=nB(e),n=t.length;n--;){var r=t[n],a=e[r];t[n]=[r,a,tB(a)]}return t}var aB=rB;function oB(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}var p7=oB,iB=Zz,sB=aB,lB=p7;function uB(e){var t=sB(e);return t.length==1&&t[0][2]?lB(t[0][0],t[0][1]):function(n){return n===e||iB(n,e,t)}}var cB=uB;function pB(e,t){return e!=null&&t in Object(e)}var fB=pB,dB=g8,mB=pg,hB=Vt,vB=fg,yB=dg,gB=Jf;function xB(e,t,n){t=dB(t,e);for(var r=-1,a=t.length,o=!1;++r<a;){var i=gB(t[r]);if(!(o=e!=null&&n(e,i)))break;e=e[i]}return o||++r!=a?o:(a=e==null?0:e.length,!!a&&yB(a)&&vB(i,a)&&(hB(e)||mB(e)))}var wB=xB,bB=fB,PB=wB;function SB(e,t){return e!=null&&PB(e,t,bB)}var OB=SB,kB=mg,_B=x8,CB=OB,AB=Ky,EB=c7,TB=p7,jB=Jf,$B=1,NB=2;function MB(e,t){return AB(e)&&EB(t)?TB(jB(e),t):function(n){var r=_B(n,e);return r===void 0&&r===t?CB(n,e):kB(t,r,$B|NB)}}var RB=MB;function IB(e){return e}var ks=IB;function DB(e){return function(t){return t==null?void 0:t[e]}}var LB=DB,FB=tg;function zB(e){return function(t){return FB(t,e)}}var BB=zB,HB=LB,GB=BB,UB=Ky,WB=Jf;function qB(e){return UB(e)?HB(WB(e)):GB(e)}var VB=qB,KB=cB,XB=RB,YB=ks,QB=Vt,ZB=VB;function JB(e){return typeof e=="function"?e:e==null?YB:typeof e=="object"?QB(e)?XB(e[0],e[1]):KB(e):ZB(e)}var Ia=JB;function eH(e,t,n,r){for(var a=e.length,o=n+(r?1:-1);r?o--:++o<a;)if(t(e[o],o,e))return o;return-1}var f7=eH;function tH(e){return e!==e}var nH=tH;function rH(e,t,n){for(var r=n-1,a=e.length;++r<a;)if(e[r]===t)return r;return-1}var aH=rH,oH=f7,iH=nH,sH=aH;function lH(e,t,n){return t===t?sH(e,t,n):oH(e,iH,n)}var uH=lH,cH=uH;function pH(e,t){var n=e==null?0:e.length;return!!n&&cH(e,t,0)>-1}var fH=pH;function dH(e,t,n){for(var r=-1,a=e==null?0:e.length;++r<a;)if(n(t,e[r]))return!0;return!1}var mH=dH;function hH(){}var vH=hH,Im=s7,yH=vH,gH=cg,xH=1/0,wH=Im&&1/gH(new Im([,-0]))[1]==xH?function(e){return new Im(e)}:yH,bH=wH,PH=Q8,SH=fH,OH=mH,kH=J8,_H=bH,CH=cg,AH=200;function EH(e,t,n){var r=-1,a=SH,o=e.length,i=!0,s=[],l=s;if(n)i=!1,a=OH;else if(o>=AH){var u=t?null:_H(e);if(u)return CH(u);i=!1,a=kH,l=new PH}else l=t?[]:s;e:for(;++r<o;){var p=e[r],c=t?t(p):p;if(p=n||p!==0?p:0,i&&c===c){for(var f=l.length;f--;)if(l[f]===c)continue e;t&&l.push(c),s.push(p)}else a(l,c,n)||(l!==s&&l.push(c),s.push(p))}return s}var TH=EH,jH=Ia,$H=TH;function NH(e,t){return e&&e.length?$H(e,jH(t)):[]}var MH=NH;const Lw=Ae(MH);function d7(e,t,n){return t===!0?Lw(e,n):oe(t)?Lw(e,t):e}function Di(e){"@babel/helpers - typeof";return Di=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Di(e)}var RH=["ref"];function Fw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function wr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Fw(Object(n),!0).forEach(function(r){vd(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Fw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function IH(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function zw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,h7(r.key),r)}}function DH(e,t,n){return t&&zw(e.prototype,t),n&&zw(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function LH(e,t,n){return t=$p(t),FH(e,m7()?Reflect.construct(t,n||[],$p(e).constructor):t.apply(e,n))}function FH(e,t){if(t&&(Di(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return zH(e)}function zH(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(m7=function(){return!!e})()}function $p(e){return $p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},$p(e)}function BH(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&A0(e,t)}function A0(e,t){return A0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},A0(e,t)}function vd(e,t,n){return t=h7(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h7(e){var t=HH(e,"string");return Di(t)=="symbol"?t:t+""}function HH(e,t){if(Di(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Di(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function GH(e,t){if(e==null)return{};var n=UH(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UH(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function WH(e){return e.value}function qH(e,t){if(A.isValidElement(e))return A.cloneElement(e,t);if(typeof e=="function")return A.createElement(e,t);t.ref;var n=GH(t,RH);return A.createElement(ug,n)}var Bw=1,hi=function(e){function t(){var n;IH(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=LH(this,t,[].concat(a)),vd(n,"lastBoundingBox",{width:-1,height:-1}),n}return BH(t,e),DH(t,[{key:"componentDidMount",value:function(){this.updateBBox()}},{key:"componentDidUpdate",value:function(){this.updateBBox()}},{key:"getBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var r=this.wrapperNode.getBoundingClientRect();return r.height=this.wrapperNode.offsetHeight,r.width=this.wrapperNode.offsetWidth,r}return null}},{key:"updateBBox",value:function(){var r=this.props.onBBoxUpdate,a=this.getBBox();a?(Math.abs(a.width-this.lastBoundingBox.width)>Bw||Math.abs(a.height-this.lastBoundingBox.height)>Bw)&&(this.lastBoundingBox.width=a.width,this.lastBoundingBox.height=a.height,r&&r(a)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,r&&r(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?wr({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(r){var a=this.props,o=a.layout,i=a.align,s=a.verticalAlign,l=a.margin,u=a.chartWidth,p=a.chartHeight,c,f;if(!r||(r.left===void 0||r.left===null)&&(r.right===void 0||r.right===null))if(i==="center"&&o==="vertical"){var d=this.getBBoxSnapshot();c={left:((u||0)-d.width)/2}}else c=i==="right"?{right:l&&l.right||0}:{left:l&&l.left||0};if(!r||(r.top===void 0||r.top===null)&&(r.bottom===void 0||r.bottom===null))if(s==="middle"){var h=this.getBBoxSnapshot();f={top:((p||0)-h.height)/2}}else f=s==="bottom"?{bottom:l&&l.bottom||0}:{top:l&&l.top||0};return wr(wr({},c),f)}},{key:"render",value:function(){var r=this,a=this.props,o=a.content,i=a.width,s=a.height,l=a.wrapperStyle,u=a.payloadUniqBy,p=a.payload,c=wr(wr({position:"absolute",width:i||"auto",height:s||"auto"},this.getDefaultPosition(l)),l);return A.createElement("div",{className:"recharts-legend-wrapper",style:c,ref:function(d){r.wrapperNode=d}},qH(o,wr(wr({},this.props),{},{payload:d7(p,u,WH)})))}}],[{key:"getWithHeight",value:function(r,a){var o=wr(wr({},this.defaultProps),r.props),i=o.layout;return i==="vertical"&&V(r.props.height)?{height:r.props.height}:i==="horizontal"?{width:r.props.width||a}:null}}])}(k.PureComponent);vd(hi,"displayName","Legend");vd(hi,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var Hw=$u,VH=pg,KH=Vt,Gw=Hw?Hw.isConcatSpreadable:void 0;function XH(e){return KH(e)||VH(e)||!!(Gw&&e&&e[Gw])}var YH=XH,QH=t7,ZH=YH;function v7(e,t,n,r,a){var o=-1,i=e.length;for(n||(n=ZH),a||(a=[]);++o<i;){var s=e[o];t>0&&n(s)?t>1?v7(s,t-1,n,r,a):QH(a,s):r||(a[a.length]=s)}return a}var y7=v7;function JH(e){return function(t,n,r){for(var a=-1,o=Object(t),i=r(t),s=i.length;s--;){var l=i[e?s:++a];if(n(o[l],l,o)===!1)break}return t}}var eG=JH,tG=eG,nG=tG(),rG=nG,aG=rG,oG=hd;function iG(e,t){return e&&aG(e,t,oG)}var g7=iG,sG=Nu;function lG(e,t){return function(n,r){if(n==null)return n;if(!sG(n))return e(n,r);for(var a=n.length,o=t?a:-1,i=Object(n);(t?o--:++o<a)&&r(i[o],o,i)!==!1;);return n}}var uG=lG,cG=g7,pG=uG,fG=pG(cG),hg=fG,dG=hg,mG=Nu;function hG(e,t){var n=-1,r=mG(e)?Array(e.length):[];return dG(e,function(a,o,i){r[++n]=t(a,o,i)}),r}var x7=hG;function vG(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}var yG=vG,Uw=ys;function gG(e,t){if(e!==t){var n=e!==void 0,r=e===null,a=e===e,o=Uw(e),i=t!==void 0,s=t===null,l=t===t,u=Uw(t);if(!s&&!u&&!o&&e>t||o&&i&&l&&!s&&!u||r&&i&&l||!n&&l||!a)return 1;if(!r&&!o&&!u&&e<t||u&&n&&a&&!r&&!o||s&&n&&a||!i&&a||!l)return-1}return 0}var xG=gG,wG=xG;function bG(e,t,n){for(var r=-1,a=e.criteria,o=t.criteria,i=a.length,s=n.length;++r<i;){var l=wG(a[r],o[r]);if(l){if(r>=s)return l;var u=n[r];return l*(u=="desc"?-1:1)}}return e.index-t.index}var PG=bG,Dm=eg,SG=tg,OG=Ia,kG=x7,_G=yG,CG=a7,AG=PG,EG=ks,TG=Vt;function jG(e,t,n){t.length?t=Dm(t,function(o){return TG(o)?function(i){return SG(i,o.length===1?o[0]:o)}:o}):t=[EG];var r=-1;t=Dm(t,CG(OG));var a=kG(e,function(o,i,s){var l=Dm(t,function(u){return u(o)});return{criteria:l,index:++r,value:o}});return _G(a,function(o,i){return AG(o,i,n)})}var $G=jG;function NG(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var MG=NG,RG=MG,Ww=Math.max;function IG(e,t,n){return t=Ww(t===void 0?e.length-1:t,0),function(){for(var r=arguments,a=-1,o=Ww(r.length-t,0),i=Array(o);++a<o;)i[a]=r[t+a];a=-1;for(var s=Array(t+1);++a<t;)s[a]=r[a];return s[t]=n(i),RG(e,this,s)}}var DG=IG;function LG(e){return function(){return e}}var FG=LG,zG=jo,BG=function(){try{var e=zG(Object,"defineProperty");return e({},"",{}),e}catch{}}(),w7=BG,HG=FG,qw=w7,GG=ks,UG=qw?function(e,t){return qw(e,"toString",{configurable:!0,enumerable:!1,value:HG(t),writable:!0})}:GG,WG=UG,qG=800,VG=16,KG=Date.now;function XG(e){var t=0,n=0;return function(){var r=KG(),a=VG-(r-n);if(n=r,a>0){if(++t>=qG)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var YG=XG,QG=WG,ZG=YG,JG=ZG(QG),eU=JG,tU=ks,nU=DG,rU=eU;function aU(e,t){return rU(nU(e,t,tU),e+"")}var oU=aU,iU=Yy,sU=Nu,lU=fg,uU=Ra;function cU(e,t,n){if(!uU(n))return!1;var r=typeof t;return(r=="number"?sU(n)&&lU(t,n.length):r=="string"&&t in n)?iU(n[t],e):!1}var yd=cU,pU=y7,fU=$G,dU=oU,Vw=yd,mU=dU(function(e,t){if(e==null)return[];var n=t.length;return n>1&&Vw(e,t[0],t[1])?t=[]:n>2&&Vw(t[0],t[1],t[2])&&(t=[t[0]]),fU(e,pU(t,1),[])}),hU=mU;const vg=Ae(hU);function Hl(e){"@babel/helpers - typeof";return Hl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Hl(e)}function E0(){return E0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},E0.apply(this,arguments)}function vU(e,t){return wU(e)||xU(e,t)||gU(e,t)||yU()}function yU(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function gU(e,t){if(e){if(typeof e=="string")return Kw(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Kw(e,t)}}function Kw(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function xU(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function wU(e){if(Array.isArray(e))return e}function Xw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Lm(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Xw(Object(n),!0).forEach(function(r){bU(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function bU(e,t,n){return t=PU(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function PU(e){var t=SU(e,"string");return Hl(t)=="symbol"?t:t+""}function SU(e,t){if(Hl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Hl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function OU(e){return Array.isArray(e)&&it(e[0])&&it(e[1])?e.join(" ~ "):e}var kU=function(t){var n=t.separator,r=n===void 0?" : ":n,a=t.contentStyle,o=a===void 0?{}:a,i=t.itemStyle,s=i===void 0?{}:i,l=t.labelStyle,u=l===void 0?{}:l,p=t.payload,c=t.formatter,f=t.itemSorter,d=t.wrapperClassName,h=t.labelClassName,m=t.label,g=t.labelFormatter,v=t.accessibilityLayer,y=v===void 0?!1:v,x=function(){if(p&&p.length){var T={padding:0,margin:0},N=(f?vg(p,f):p).map(function(M,I){if(M.type==="none")return null;var R=Lm({display:"block",paddingTop:4,paddingBottom:4,color:M.color||"#000"},s),L=M.formatter||c||OU,$=M.value,D=M.name,H=$,W=D;if(L&&H!=null&&W!=null){var G=L($,D,M,I,p);if(Array.isArray(G)){var Z=vU(G,2);H=Z[0],W=Z[1]}else H=G}return A.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(I),style:R},it(W)?A.createElement("span",{className:"recharts-tooltip-item-name"},W):null,it(W)?A.createElement("span",{className:"recharts-tooltip-item-separator"},r):null,A.createElement("span",{className:"recharts-tooltip-item-value"},H),A.createElement("span",{className:"recharts-tooltip-item-unit"},M.unit||""))});return A.createElement("ul",{className:"recharts-tooltip-item-list",style:T},N)}return null},P=Lm({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},o),w=Lm({margin:0},u),S=!te(m),O=S?m:"",_=ue("recharts-default-tooltip",d),C=ue("recharts-tooltip-label",h);S&&g&&p!==void 0&&p!==null&&(O=g(m,p));var j=y?{role:"status","aria-live":"assertive"}:{};return A.createElement("div",E0({className:_,style:P},j),A.createElement("p",{className:C,style:w},A.isValidElement(O)?O:"".concat(O)),x())};function Gl(e){"@babel/helpers - typeof";return Gl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gl(e)}function fc(e,t,n){return t=_U(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _U(e){var t=CU(e,"string");return Gl(t)=="symbol"?t:t+""}function CU(e,t){if(Gl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Gl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Hs="recharts-tooltip-wrapper",AU={visibility:"hidden"};function EU(e){var t=e.coordinate,n=e.translateX,r=e.translateY;return ue(Hs,fc(fc(fc(fc({},"".concat(Hs,"-right"),V(n)&&t&&V(t.x)&&n>=t.x),"".concat(Hs,"-left"),V(n)&&t&&V(t.x)&&n<t.x),"".concat(Hs,"-bottom"),V(r)&&t&&V(t.y)&&r>=t.y),"".concat(Hs,"-top"),V(r)&&t&&V(t.y)&&r<t.y))}function Yw(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.key,a=e.offsetTopLeft,o=e.position,i=e.reverseDirection,s=e.tooltipDimension,l=e.viewBox,u=e.viewBoxDimension;if(o&&V(o[r]))return o[r];var p=n[r]-s-a,c=n[r]+a;if(t[r])return i[r]?p:c;if(i[r]){var f=p,d=l[r];return f<d?Math.max(c,l[r]):Math.max(p,l[r])}var h=c+s,m=l[r]+u;return h>m?Math.max(p,l[r]):Math.max(c,l[r])}function TU(e){var t=e.translateX,n=e.translateY,r=e.useTranslate3d;return{transform:r?"translate3d(".concat(t,"px, ").concat(n,"px, 0)"):"translate(".concat(t,"px, ").concat(n,"px)")}}function jU(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.offsetTopLeft,a=e.position,o=e.reverseDirection,i=e.tooltipBox,s=e.useTranslate3d,l=e.viewBox,u,p,c;return i.height>0&&i.width>0&&n?(p=Yw({allowEscapeViewBox:t,coordinate:n,key:"x",offsetTopLeft:r,position:a,reverseDirection:o,tooltipDimension:i.width,viewBox:l,viewBoxDimension:l.width}),c=Yw({allowEscapeViewBox:t,coordinate:n,key:"y",offsetTopLeft:r,position:a,reverseDirection:o,tooltipDimension:i.height,viewBox:l,viewBoxDimension:l.height}),u=TU({translateX:p,translateY:c,useTranslate3d:s})):u=AU,{cssProperties:u,cssClasses:EU({translateX:p,translateY:c,coordinate:n})}}function Li(e){"@babel/helpers - typeof";return Li=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Li(e)}function Qw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Zw(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Qw(Object(n),!0).forEach(function(r){j0(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Qw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function $U(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function NU(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,P7(r.key),r)}}function MU(e,t,n){return t&&NU(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function RU(e,t,n){return t=Np(t),IU(e,b7()?Reflect.construct(t,n||[],Np(e).constructor):t.apply(e,n))}function IU(e,t){if(t&&(Li(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return DU(e)}function DU(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function b7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(b7=function(){return!!e})()}function Np(e){return Np=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Np(e)}function LU(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&T0(e,t)}function T0(e,t){return T0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},T0(e,t)}function j0(e,t,n){return t=P7(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function P7(e){var t=FU(e,"string");return Li(t)=="symbol"?t:t+""}function FU(e,t){if(Li(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Li(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Jw=1,zU=function(e){function t(){var n;$U(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=RU(this,t,[].concat(a)),j0(n,"state",{dismissed:!1,dismissedAtCoordinate:{x:0,y:0},lastBoundingBox:{width:-1,height:-1}}),j0(n,"handleKeyDown",function(i){if(i.key==="Escape"){var s,l,u,p;n.setState({dismissed:!0,dismissedAtCoordinate:{x:(s=(l=n.props.coordinate)===null||l===void 0?void 0:l.x)!==null&&s!==void 0?s:0,y:(u=(p=n.props.coordinate)===null||p===void 0?void 0:p.y)!==null&&u!==void 0?u:0}})}}),n}return LU(t,e),MU(t,[{key:"updateBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var r=this.wrapperNode.getBoundingClientRect();(Math.abs(r.width-this.state.lastBoundingBox.width)>Jw||Math.abs(r.height-this.state.lastBoundingBox.height)>Jw)&&this.setState({lastBoundingBox:{width:r.width,height:r.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var r,a;this.props.active&&this.updateBBox(),this.state.dismissed&&(((r=this.props.coordinate)===null||r===void 0?void 0:r.x)!==this.state.dismissedAtCoordinate.x||((a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var r=this,a=this.props,o=a.active,i=a.allowEscapeViewBox,s=a.animationDuration,l=a.animationEasing,u=a.children,p=a.coordinate,c=a.hasPayload,f=a.isAnimationActive,d=a.offset,h=a.position,m=a.reverseDirection,g=a.useTranslate3d,v=a.viewBox,y=a.wrapperStyle,x=jU({allowEscapeViewBox:i,coordinate:p,offsetTopLeft:d,position:h,reverseDirection:m,tooltipBox:this.state.lastBoundingBox,useTranslate3d:g,viewBox:v}),P=x.cssClasses,w=x.cssProperties,S=Zw(Zw({transition:f&&o?"transform ".concat(s,"ms ").concat(l):void 0},w),{},{pointerEvents:"none",visibility:!this.state.dismissed&&o&&c?"visible":"hidden",position:"absolute",top:0,left:0},y);return A.createElement("div",{tabIndex:-1,className:P,style:S,ref:function(_){r.wrapperNode=_}},u)}}])}(k.PureComponent),BU=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},Da={isSsr:BU()};function Fi(e){"@babel/helpers - typeof";return Fi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Fi(e)}function e3(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function t3(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?e3(Object(n),!0).forEach(function(r){yg(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):e3(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function HU(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function GU(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,O7(r.key),r)}}function UU(e,t,n){return t&&GU(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function WU(e,t,n){return t=Mp(t),qU(e,S7()?Reflect.construct(t,n||[],Mp(e).constructor):t.apply(e,n))}function qU(e,t){if(t&&(Fi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return VU(e)}function VU(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function S7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(S7=function(){return!!e})()}function Mp(e){return Mp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Mp(e)}function KU(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&$0(e,t)}function $0(e,t){return $0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},$0(e,t)}function yg(e,t,n){return t=O7(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function O7(e){var t=XU(e,"string");return Fi(t)=="symbol"?t:t+""}function XU(e,t){if(Fi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Fi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function YU(e){return e.dataKey}function QU(e,t){return A.isValidElement(e)?A.cloneElement(e,t):typeof e=="function"?A.createElement(e,t):A.createElement(kU,t)}var Zn=function(e){function t(){return HU(this,t),WU(this,t,arguments)}return KU(t,e),UU(t,[{key:"render",value:function(){var r=this,a=this.props,o=a.active,i=a.allowEscapeViewBox,s=a.animationDuration,l=a.animationEasing,u=a.content,p=a.coordinate,c=a.filterNull,f=a.isAnimationActive,d=a.offset,h=a.payload,m=a.payloadUniqBy,g=a.position,v=a.reverseDirection,y=a.useTranslate3d,x=a.viewBox,P=a.wrapperStyle,w=h??[];c&&w.length&&(w=d7(h.filter(function(O){return O.value!=null&&(O.hide!==!0||r.props.includeHidden)}),m,YU));var S=w.length>0;return A.createElement(zU,{allowEscapeViewBox:i,animationDuration:s,animationEasing:l,isAnimationActive:f,active:o,coordinate:p,hasPayload:S,offset:d,position:g,reverseDirection:v,useTranslate3d:y,viewBox:x,wrapperStyle:P},QU(u,t3(t3({},this.props),{},{payload:w})))}}])}(k.PureComponent);yg(Zn,"displayName","Tooltip");yg(Zn,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!Da.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var ZU=gr,JU=function(){return ZU.Date.now()},eW=JU,tW=/\s/;function nW(e){for(var t=e.length;t--&&tW.test(e.charAt(t)););return t}var rW=nW,aW=rW,oW=/^\s+/;function iW(e){return e&&e.slice(0,aW(e)+1).replace(oW,"")}var sW=iW,lW=sW,n3=Ra,uW=ys,r3=NaN,cW=/^[-+]0x[0-9a-f]+$/i,pW=/^0b[01]+$/i,fW=/^0o[0-7]+$/i,dW=parseInt;function mW(e){if(typeof e=="number")return e;if(uW(e))return r3;if(n3(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=n3(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=lW(e);var n=pW.test(e);return n||fW.test(e)?dW(e.slice(2),n?2:8):cW.test(e)?r3:+e}var k7=mW,hW=Ra,Fm=eW,a3=k7,vW="Expected a function",yW=Math.max,gW=Math.min;function xW(e,t,n){var r,a,o,i,s,l,u=0,p=!1,c=!1,f=!0;if(typeof e!="function")throw new TypeError(vW);t=a3(t)||0,hW(n)&&(p=!!n.leading,c="maxWait"in n,o=c?yW(a3(n.maxWait)||0,t):o,f="trailing"in n?!!n.trailing:f);function d(S){var O=r,_=a;return r=a=void 0,u=S,i=e.apply(_,O),i}function h(S){return u=S,s=setTimeout(v,t),p?d(S):i}function m(S){var O=S-l,_=S-u,C=t-O;return c?gW(C,o-_):C}function g(S){var O=S-l,_=S-u;return l===void 0||O>=t||O<0||c&&_>=o}function v(){var S=Fm();if(g(S))return y(S);s=setTimeout(v,m(S))}function y(S){return s=void 0,f&&r?d(S):(r=a=void 0,i)}function x(){s!==void 0&&clearTimeout(s),u=0,r=l=a=s=void 0}function P(){return s===void 0?i:y(Fm())}function w(){var S=Fm(),O=g(S);if(r=arguments,a=this,l=S,O){if(s===void 0)return h(l);if(c)return clearTimeout(s),s=setTimeout(v,t),d(l)}return s===void 0&&(s=setTimeout(v,t)),i}return w.cancel=x,w.flush=P,w}var wW=xW,bW=wW,PW=Ra,SW="Expected a function";function OW(e,t,n){var r=!0,a=!0;if(typeof e!="function")throw new TypeError(SW);return PW(n)&&(r="leading"in n?!!n.leading:r,a="trailing"in n?!!n.trailing:a),bW(e,t,{leading:r,maxWait:t,trailing:a})}var kW=OW;const _7=Ae(kW);function Ul(e){"@babel/helpers - typeof";return Ul=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ul(e)}function o3(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function dc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?o3(Object(n),!0).forEach(function(r){_W(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o3(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function _W(e,t,n){return t=CW(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function CW(e){var t=AW(e,"string");return Ul(t)=="symbol"?t:t+""}function AW(e,t){if(Ul(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ul(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function EW(e,t){return NW(e)||$W(e,t)||jW(e,t)||TW()}function TW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function jW(e,t){if(e){if(typeof e=="string")return i3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i3(e,t)}}function i3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function $W(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function NW(e){if(Array.isArray(e))return e}var MW=k.forwardRef(function(e,t){var n=e.aspect,r=e.initialDimension,a=r===void 0?{width:-1,height:-1}:r,o=e.width,i=o===void 0?"100%":o,s=e.height,l=s===void 0?"100%":s,u=e.minWidth,p=u===void 0?0:u,c=e.minHeight,f=e.maxHeight,d=e.children,h=e.debounce,m=h===void 0?0:h,g=e.id,v=e.className,y=e.onResize,x=e.style,P=x===void 0?{}:x,w=k.useRef(null),S=k.useRef();S.current=y,k.useImperativeHandle(t,function(){return Object.defineProperty(w.current,"current",{get:function(){return console.warn("The usage of ref.current.current is deprecated and will no longer be supported."),w.current},configurable:!0})});var O=k.useState({containerWidth:a.width,containerHeight:a.height}),_=EW(O,2),C=_[0],j=_[1],E=k.useCallback(function(N,M){j(function(I){var R=Math.round(N),L=Math.round(M);return I.containerWidth===R&&I.containerHeight===L?I:{containerWidth:R,containerHeight:L}})},[]);k.useEffect(function(){var N=function(D){var H,W=D[0].contentRect,G=W.width,Z=W.height;E(G,Z),(H=S.current)===null||H===void 0||H.call(S,G,Z)};m>0&&(N=_7(N,m,{trailing:!0,leading:!1}));var M=new ResizeObserver(N),I=w.current.getBoundingClientRect(),R=I.width,L=I.height;return E(R,L),M.observe(w.current),function(){M.disconnect()}},[E,m]);var T=k.useMemo(function(){var N=C.containerWidth,M=C.containerHeight;if(N<0||M<0)return null;$r(Za(i)||Za(l),`The width(%s) and height(%s) are both fixed numbers,
+       maybe you don't need to use a ResponsiveContainer.`,i,l),$r(!n||n>0,"The aspect(%s) must be greater than zero.",n);var I=Za(i)?N:i,R=Za(l)?M:l;n&&n>0&&(I?R=I/n:R&&(I=R*n),f&&R>f&&(R=f)),$r(I>0||R>0,`The width(%s) and height(%s) of chart should be greater than 0,
        please check the style of container, or the props width(%s) and height(%s),
        or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the
-       height and width.`,I,R,i,l,f,c,n);var L=!Array.isArray(d)&&jr(d.type).endsWith("Chart");return C.Children.map(d,function($){return C.isValidElement($)?k.cloneElement($,dc({width:I,height:R},L?{style:dc({height:"100%",width:"100%",maxHeight:R,maxWidth:I},$.props.style)}:{})):$})},[n,d,l,p,c,f,A,i]);return C.createElement("div",{id:g?"".concat(g):void 0,className:ue("recharts-responsive-container",v),style:dc(dc({},P),{},{width:i,height:l,minWidth:f,minHeight:c,maxHeight:p}),ref:w},T)}),gg=function(t){return null};gg.displayName="Cell";function Wl(e){"@babel/helpers - typeof";return Wl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wl(e)}function o3(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Nv(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?o3(Object(n),!0).forEach(function(r){bW(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o3(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function bW(e,t,n){return t=PW(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function PW(e){var t=SW(e,"string");return Wl(t)=="symbol"?t:t+""}function SW(e,t){if(Wl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Wl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var zo={widthCache:{},cacheCount:0},OW=2e3,kW={position:"absolute",top:"-20000px",left:0,padding:0,margin:0,border:"none",whiteSpace:"pre"},i3="recharts_measurement_span";function _W(e){var t=Nv({},e);return Object.keys(t).forEach(function(n){t[n]||delete t[n]}),t}var pl=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||Da.isSsr)return{width:0,height:0};var r=_W(n),a=JSON.stringify({text:t,copyStyle:r});if(zo.widthCache[a])return zo.widthCache[a];try{var o=document.getElementById(i3);o||(o=document.createElement("span"),o.setAttribute("id",i3),o.setAttribute("aria-hidden","true"),document.body.appendChild(o));var i=Nv(Nv({},kW),r);Object.assign(o.style,i),o.textContent="".concat(t);var s=o.getBoundingClientRect(),l={width:s.width,height:s.height};return zo.widthCache[a]=l,++zo.cacheCount>OW&&(zo.cacheCount=0,zo.widthCache={}),l}catch{return{width:0,height:0}}},AW=function(t){return{top:t.top+window.scrollY-document.documentElement.clientTop,left:t.left+window.scrollX-document.documentElement.clientLeft}};function ql(e){"@babel/helpers - typeof";return ql=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ql(e)}function If(e,t){return jW(e)||TW(e,t)||EW(e,t)||CW()}function CW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function EW(e,t){if(e){if(typeof e=="string")return s3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s3(e,t)}}function s3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function TW(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function jW(e){if(Array.isArray(e))return e}function $W(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l3(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,MW(r.key),r)}}function NW(e,t,n){return t&&l3(e.prototype,t),n&&l3(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function MW(e){var t=RW(e,"string");return ql(t)=="symbol"?t:t+""}function RW(e,t){if(ql(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ql(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var u3=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,c3=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,IW=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,DW=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,O7={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},LW=Object.keys(O7),ni="NaN";function FW(e,t){return e*O7[t]}var mc=function(){function e(t,n){$W(this,e),this.num=t,this.unit=n,this.num=t,this.unit=n,Number.isNaN(t)&&(this.unit=""),n!==""&&!IW.test(n)&&(this.num=NaN,this.unit=""),LW.includes(n)&&(this.num=FW(t,n),this.unit="px")}return NW(e,[{key:"add",value:function(n){return this.unit!==n.unit?new e(NaN,""):new e(this.num+n.num,this.unit)}},{key:"subtract",value:function(n){return this.unit!==n.unit?new e(NaN,""):new e(this.num-n.num,this.unit)}},{key:"multiply",value:function(n){return this.unit!==""&&n.unit!==""&&this.unit!==n.unit?new e(NaN,""):new e(this.num*n.num,this.unit||n.unit)}},{key:"divide",value:function(n){return this.unit!==""&&n.unit!==""&&this.unit!==n.unit?new e(NaN,""):new e(this.num/n.num,this.unit||n.unit)}},{key:"toString",value:function(){return"".concat(this.num).concat(this.unit)}},{key:"isNaN",value:function(){return Number.isNaN(this.num)}}],[{key:"parse",value:function(n){var r,a=(r=DW.exec(n))!==null&&r!==void 0?r:[],o=If(a,3),i=o[1],s=o[2];return new e(parseFloat(i),s??"")}}])}();function k7(e){if(e.includes(ni))return ni;for(var t=e;t.includes("*")||t.includes("/");){var n,r=(n=u3.exec(t))!==null&&n!==void 0?n:[],a=If(r,4),o=a[1],i=a[2],s=a[3],l=mc.parse(o??""),u=mc.parse(s??""),f=i==="*"?l.multiply(u):l.divide(u);if(f.isNaN())return ni;t=t.replace(u3,f.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var c,p=(c=c3.exec(t))!==null&&c!==void 0?c:[],d=If(p,4),h=d[1],m=d[2],g=d[3],v=mc.parse(h??""),y=mc.parse(g??""),x=m==="+"?v.add(y):v.subtract(y);if(x.isNaN())return ni;t=t.replace(c3,x.toString())}return t}var f3=/\(([^()]*)\)/;function zW(e){for(var t=e;t.includes("(");){var n=f3.exec(t),r=If(n,2),a=r[1];t=t.replace(f3,k7(a))}return t}function BW(e){var t=e.replace(/\s+/g,"");return t=zW(t),t=k7(t),t}function HW(e){try{return BW(e)}catch{return ni}}function zm(e){var t=HW(e.slice(5,-1));return t===ni?"":t}var GW=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],UW=["dx","dy","angle","className","breakAll"];function Mv(){return Mv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Mv.apply(this,arguments)}function p3(e,t){if(e==null)return{};var n=WW(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WW(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function d3(e,t){return XW(e)||KW(e,t)||VW(e,t)||qW()}function qW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function VW(e,t){if(e){if(typeof e=="string")return m3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return m3(e,t)}}function m3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function KW(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function XW(e){if(Array.isArray(e))return e}var _7=/[ \f\n\r\t\v\u2028\u2029]+/,A7=function(t){var n=t.children,r=t.breakAll,a=t.style;try{var o=[];te(n)||(r?o=n.toString().split(""):o=n.toString().split(_7));var i=o.map(function(l){return{word:l,width:pl(l,a).width}}),s=r?0:pl(" ",a).width;return{wordsWithComputedWidth:i,spaceWidth:s}}catch{return null}},YW=function(t,n,r,a,o){var i=t.maxLines,s=t.children,l=t.style,u=t.breakAll,f=V(i),c=s,p=function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return I.reduce(function(R,L){var $=L.word,D=L.width,H=R[R.length-1];if(H&&(a==null||o||H.width+D+r<Number(a)))H.words.push($),H.width+=D+r;else{var W={words:[$],width:D};R.push(W)}return R},[])},d=p(n),h=function(I){return I.reduce(function(R,L){return R.width>L.width?R:L})};if(!f)return d;for(var m="…",g=function(I){var R=c.slice(0,I),L=A7({breakAll:u,style:l,children:R+m}).wordsWithComputedWidth,$=p(L),D=$.length>i||h($).width>Number(a);return[D,$]},v=0,y=c.length-1,x=0,P;v<=y&&x<=c.length-1;){var w=Math.floor((v+y)/2),S=w-1,O=g(S),_=d3(O,2),A=_[0],j=_[1],E=g(w),T=d3(E,1),N=T[0];if(!A&&!N&&(v=w+1),A&&N&&(y=w-1),!A&&N){P=j;break}x++}return P||d},h3=function(t){var n=te(t)?[]:t.toString().split(_7);return[{words:n}]},QW=function(t){var n=t.width,r=t.scaleToFit,a=t.children,o=t.style,i=t.breakAll,s=t.maxLines;if((n||r)&&!Da.isSsr){var l,u,f=A7({breakAll:i,children:a,style:o});if(f){var c=f.wordsWithComputedWidth,p=f.spaceWidth;l=c,u=p}else return h3(a);return YW({breakAll:i,children:a,maxLines:s,style:o},l,u,n,r)}return h3(a)},v3="#808080",Df=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,o=a===void 0?0:a,i=t.lineHeight,s=i===void 0?"1em":i,l=t.capHeight,u=l===void 0?"0.71em":l,f=t.scaleToFit,c=f===void 0?!1:f,p=t.textAnchor,d=p===void 0?"start":p,h=t.verticalAnchor,m=h===void 0?"end":h,g=t.fill,v=g===void 0?v3:g,y=p3(t,GW),x=k.useMemo(function(){return QW({breakAll:y.breakAll,children:y.children,maxLines:y.maxLines,scaleToFit:c,style:y.style,width:y.width})},[y.breakAll,y.children,y.maxLines,c,y.style,y.width]),P=y.dx,w=y.dy,S=y.angle,O=y.className,_=y.breakAll,A=p3(y,UW);if(!it(r)||!it(o))return null;var j=r+(V(P)?P:0),E=o+(V(w)?w:0),T;switch(m){case"start":T=zm("calc(".concat(u,")"));break;case"middle":T=zm("calc(".concat((x.length-1)/2," * -").concat(s," + (").concat(u," / 2))"));break;default:T=zm("calc(".concat(x.length-1," * -").concat(s,")"));break}var N=[];if(c){var M=x[0].width,I=y.width;N.push("scale(".concat((V(I)?I/M:1)/M,")"))}return S&&N.push("rotate(".concat(S,", ").concat(j,", ").concat(E,")")),N.length&&(A.transform=N.join(" ")),C.createElement("text",Mv({},re(A,!0),{x:j,y:E,className:ue("recharts-text",O),textAnchor:d,fill:v.includes("url")?v3:v}),x.map(function(R,L){var $=R.words.join(_?"":" ");return C.createElement("tspan",{x:j,dy:L===0?T:s,key:"".concat($,"-").concat(L)},$)}))};function Oa(e,t){return e==null||t==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function ZW(e,t){return e==null||t==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function xg(e){let t,n,r;e.length!==2?(t=Oa,n=(s,l)=>Oa(e(s),l),r=(s,l)=>e(s)-l):(t=e===Oa||e===ZW?e:JW,n=e,r=e);function a(s,l,u=0,f=s.length){if(u<f){if(t(l,l)!==0)return f;do{const c=u+f>>>1;n(s[c],l)<0?u=c+1:f=c}while(u<f)}return u}function o(s,l,u=0,f=s.length){if(u<f){if(t(l,l)!==0)return f;do{const c=u+f>>>1;n(s[c],l)<=0?u=c+1:f=c}while(u<f)}return u}function i(s,l,u=0,f=s.length){const c=a(s,l,u,f-1);return c>u&&r(s[c-1],l)>-r(s[c],l)?c-1:c}return{left:a,center:i,right:o}}function JW(){return 0}function C7(e){return e===null?NaN:+e}function*eq(e,t){for(let n of e)n!=null&&(n=+n)>=n&&(yield n)}const tq=xg(Oa),Mu=tq.right;xg(C7).center;class y3 extends Map{constructor(t,n=aq){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),t!=null)for(const[r,a]of t)this.set(r,a)}get(t){return super.get(g3(this,t))}has(t){return super.has(g3(this,t))}set(t,n){return super.set(nq(this,t),n)}delete(t){return super.delete(rq(this,t))}}function g3({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):n}function nq({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function rq({_intern:e,_key:t},n){const r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function aq(e){return e!==null&&typeof e=="object"?e.valueOf():e}function oq(e=Oa){if(e===Oa)return E7;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,n)=>{const r=e(t,n);return r||r===0?r:(e(n,n)===0)-(e(t,t)===0)}}function E7(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(e<t?-1:e>t?1:0)}const iq=Math.sqrt(50),sq=Math.sqrt(10),lq=Math.sqrt(2);function Lf(e,t,n){const r=(t-e)/Math.max(0,n),a=Math.floor(Math.log10(r)),o=r/Math.pow(10,a),i=o>=iq?10:o>=sq?5:o>=lq?2:1;let s,l,u;return a<0?(u=Math.pow(10,-a)/i,s=Math.round(e*u),l=Math.round(t*u),s/u<e&&++s,l/u>t&&--l,u=-u):(u=Math.pow(10,a)*i,s=Math.round(e/u),l=Math.round(t/u),s*u<e&&++s,l*u>t&&--l),l<s&&.5<=n&&n<2?Lf(e,t,n*2):[s,l,u]}function Rv(e,t,n){if(t=+t,e=+e,n=+n,!(n>0))return[];if(e===t)return[e];const r=t<e,[a,o,i]=r?Lf(t,e,n):Lf(e,t,n);if(!(o>=a))return[];const s=o-a+1,l=new Array(s);if(r)if(i<0)for(let u=0;u<s;++u)l[u]=(o-u)/-i;else for(let u=0;u<s;++u)l[u]=(o-u)*i;else if(i<0)for(let u=0;u<s;++u)l[u]=(a+u)/-i;else for(let u=0;u<s;++u)l[u]=(a+u)*i;return l}function Iv(e,t,n){return t=+t,e=+e,n=+n,Lf(e,t,n)[2]}function Dv(e,t,n){t=+t,e=+e,n=+n;const r=t<e,a=r?Iv(t,e,n):Iv(e,t,n);return(r?-1:1)*(a<0?1/-a:a)}function x3(e,t){let n;for(const r of e)r!=null&&(n<r||n===void 0&&r>=r)&&(n=r);return n}function w3(e,t){let n;for(const r of e)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);return n}function T7(e,t,n=0,r=1/0,a){if(t=Math.floor(t),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(e.length-1,r)),!(n<=t&&t<=r))return e;for(a=a===void 0?E7:oq(a);r>n;){if(r-n>600){const l=r-n+1,u=t-n+1,f=Math.log(l),c=.5*Math.exp(2*f/3),p=.5*Math.sqrt(f*c*(l-c)/l)*(u-l/2<0?-1:1),d=Math.max(n,Math.floor(t-u*c/l+p)),h=Math.min(r,Math.floor(t+(l-u)*c/l+p));T7(e,t,d,h,a)}const o=e[t];let i=n,s=r;for(Gs(e,n,t),a(e[r],o)>0&&Gs(e,n,r);i<s;){for(Gs(e,i,s),++i,--s;a(e[i],o)<0;)++i;for(;a(e[s],o)>0;)--s}a(e[n],o)===0?Gs(e,n,s):(++s,Gs(e,s,r)),s<=t&&(n=s+1),t<=s&&(r=s-1)}return e}function Gs(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function uq(e,t,n){if(e=Float64Array.from(eq(e)),!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return w3(e);if(t>=1)return x3(e);var r,a=(r-1)*t,o=Math.floor(a),i=x3(T7(e,o).subarray(0,o+1)),s=w3(e.subarray(o+1));return i+(s-i)*(a-o)}}function cq(e,t,n=C7){if(!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return+n(e[0],0,e);if(t>=1)return+n(e[r-1],r-1,e);var r,a=(r-1)*t,o=Math.floor(a),i=+n(e[o],o,e),s=+n(e[o+1],o+1,e);return i+(s-i)*(a-o)}}function fq(e,t,n){e=+e,t=+t,n=(a=arguments.length)<2?(t=e,e=0,1):a<3?1:+n;for(var r=-1,a=Math.max(0,Math.ceil((t-e)/n))|0,o=new Array(a);++r<a;)o[r]=e+r*n;return o}function Sn(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}function qr(e,t){switch(arguments.length){case 0:break;case 1:{typeof e=="function"?this.interpolator(e):this.range(e);break}default:{this.domain(e),typeof t=="function"?this.interpolator(t):this.range(t);break}}return this}const Lv=Symbol("implicit");function wg(){var e=new y3,t=[],n=[],r=Lv;function a(o){let i=e.get(o);if(i===void 0){if(r!==Lv)return r;e.set(o,i=t.push(o)-1)}return n[i%n.length]}return a.domain=function(o){if(!arguments.length)return t.slice();t=[],e=new y3;for(const i of o)e.has(i)||e.set(i,t.push(i)-1);return a},a.range=function(o){return arguments.length?(n=Array.from(o),a):n.slice()},a.unknown=function(o){return arguments.length?(r=o,a):r},a.copy=function(){return wg(t,n).unknown(r)},Sn.apply(a,arguments),a}function Vl(){var e=wg().unknown(void 0),t=e.domain,n=e.range,r=0,a=1,o,i,s=!1,l=0,u=0,f=.5;delete e.unknown;function c(){var p=t().length,d=a<r,h=d?a:r,m=d?r:a;o=(m-h)/Math.max(1,p-l+u*2),s&&(o=Math.floor(o)),h+=(m-h-o*(p-l))*f,i=o*(1-l),s&&(h=Math.round(h),i=Math.round(i));var g=fq(p).map(function(v){return h+o*v});return n(d?g.reverse():g)}return e.domain=function(p){return arguments.length?(t(p),c()):t()},e.range=function(p){return arguments.length?([r,a]=p,r=+r,a=+a,c()):[r,a]},e.rangeRound=function(p){return[r,a]=p,r=+r,a=+a,s=!0,c()},e.bandwidth=function(){return i},e.step=function(){return o},e.round=function(p){return arguments.length?(s=!!p,c()):s},e.padding=function(p){return arguments.length?(l=Math.min(1,u=+p),c()):l},e.paddingInner=function(p){return arguments.length?(l=Math.min(1,p),c()):l},e.paddingOuter=function(p){return arguments.length?(u=+p,c()):u},e.align=function(p){return arguments.length?(f=Math.max(0,Math.min(1,p)),c()):f},e.copy=function(){return Vl(t(),[r,a]).round(s).paddingInner(l).paddingOuter(u).align(f)},Sn.apply(c(),arguments)}function j7(e){var t=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,delete e.paddingOuter,e.copy=function(){return j7(t())},e}function dl(){return j7(Vl.apply(null,arguments).paddingInner(1))}function bg(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function $7(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Ru(){}var Kl=.7,Ff=1/Kl,vi="\\s*([+-]?\\d+)\\s*",Xl="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",pr="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",pq=/^#([0-9a-f]{3,8})$/,dq=new RegExp(`^rgb\\(${vi},${vi},${vi}\\)$`),mq=new RegExp(`^rgb\\(${pr},${pr},${pr}\\)$`),hq=new RegExp(`^rgba\\(${vi},${vi},${vi},${Xl}\\)$`),vq=new RegExp(`^rgba\\(${pr},${pr},${pr},${Xl}\\)$`),yq=new RegExp(`^hsl\\(${Xl},${pr},${pr}\\)$`),gq=new RegExp(`^hsla\\(${Xl},${pr},${pr},${Xl}\\)$`),b3={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};bg(Ru,Yl,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:P3,formatHex:P3,formatHex8:xq,formatHsl:wq,formatRgb:S3,toString:S3});function P3(){return this.rgb().formatHex()}function xq(){return this.rgb().formatHex8()}function wq(){return N7(this).formatHsl()}function S3(){return this.rgb().formatRgb()}function Yl(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=pq.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?O3(t):n===3?new Ht(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?hc(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?hc(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=dq.exec(e))?new Ht(t[1],t[2],t[3],1):(t=mq.exec(e))?new Ht(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=hq.exec(e))?hc(t[1],t[2],t[3],t[4]):(t=vq.exec(e))?hc(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=yq.exec(e))?A3(t[1],t[2]/100,t[3]/100,1):(t=gq.exec(e))?A3(t[1],t[2]/100,t[3]/100,t[4]):b3.hasOwnProperty(e)?O3(b3[e]):e==="transparent"?new Ht(NaN,NaN,NaN,0):null}function O3(e){return new Ht(e>>16&255,e>>8&255,e&255,1)}function hc(e,t,n,r){return r<=0&&(e=t=n=NaN),new Ht(e,t,n,r)}function bq(e){return e instanceof Ru||(e=Yl(e)),e?(e=e.rgb(),new Ht(e.r,e.g,e.b,e.opacity)):new Ht}function Fv(e,t,n,r){return arguments.length===1?bq(e):new Ht(e,t,n,r??1)}function Ht(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}bg(Ht,Fv,$7(Ru,{brighter(e){return e=e==null?Ff:Math.pow(Ff,e),new Ht(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Kl:Math.pow(Kl,e),new Ht(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Ht(fo(this.r),fo(this.g),fo(this.b),zf(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:k3,formatHex:k3,formatHex8:Pq,formatRgb:_3,toString:_3}));function k3(){return`#${Ja(this.r)}${Ja(this.g)}${Ja(this.b)}`}function Pq(){return`#${Ja(this.r)}${Ja(this.g)}${Ja(this.b)}${Ja((isNaN(this.opacity)?1:this.opacity)*255)}`}function _3(){const e=zf(this.opacity);return`${e===1?"rgb(":"rgba("}${fo(this.r)}, ${fo(this.g)}, ${fo(this.b)}${e===1?")":`, ${e})`}`}function zf(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function fo(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Ja(e){return e=fo(e),(e<16?"0":"")+e.toString(16)}function A3(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new In(e,t,n,r)}function N7(e){if(e instanceof In)return new In(e.h,e.s,e.l,e.opacity);if(e instanceof Ru||(e=Yl(e)),!e)return new In;if(e instanceof In)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,a=Math.min(t,n,r),o=Math.max(t,n,r),i=NaN,s=o-a,l=(o+a)/2;return s?(t===o?i=(n-r)/s+(n<r)*6:n===o?i=(r-t)/s+2:i=(t-n)/s+4,s/=l<.5?o+a:2-o-a,i*=60):s=l>0&&l<1?0:i,new In(i,s,l,e.opacity)}function Sq(e,t,n,r){return arguments.length===1?N7(e):new In(e,t,n,r??1)}function In(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}bg(In,Sq,$7(Ru,{brighter(e){return e=e==null?Ff:Math.pow(Ff,e),new In(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Kl:Math.pow(Kl,e),new In(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,a=2*n-r;return new Ht(Bm(e>=240?e-240:e+120,a,r),Bm(e,a,r),Bm(e<120?e+240:e-120,a,r),this.opacity)},clamp(){return new In(C3(this.h),vc(this.s),vc(this.l),zf(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=zf(this.opacity);return`${e===1?"hsl(":"hsla("}${C3(this.h)}, ${vc(this.s)*100}%, ${vc(this.l)*100}%${e===1?")":`, ${e})`}`}}));function C3(e){return e=(e||0)%360,e<0?e+360:e}function vc(e){return Math.max(0,Math.min(1,e||0))}function Bm(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const Pg=e=>()=>e;function Oq(e,t){return function(n){return e+n*t}}function kq(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function _q(e){return(e=+e)==1?M7:function(t,n){return n-t?kq(t,n,e):Pg(isNaN(t)?n:t)}}function M7(e,t){var n=t-e;return n?Oq(e,n):Pg(isNaN(e)?t:e)}const E3=function e(t){var n=_q(t);function r(a,o){var i=n((a=Fv(a)).r,(o=Fv(o)).r),s=n(a.g,o.g),l=n(a.b,o.b),u=M7(a.opacity,o.opacity);return function(f){return a.r=i(f),a.g=s(f),a.b=l(f),a.opacity=u(f),a+""}}return r.gamma=e,r}(1);function Aq(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,r=t.slice(),a;return function(o){for(a=0;a<n;++a)r[a]=e[a]*(1-o)+t[a]*o;return r}}function Cq(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Eq(e,t){var n=t?t.length:0,r=e?Math.min(n,e.length):0,a=new Array(r),o=new Array(n),i;for(i=0;i<r;++i)a[i]=_s(e[i],t[i]);for(;i<n;++i)o[i]=t[i];return function(s){for(i=0;i<r;++i)o[i]=a[i](s);return o}}function Tq(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function Bf(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function jq(e,t){var n={},r={},a;(e===null||typeof e!="object")&&(e={}),(t===null||typeof t!="object")&&(t={});for(a in t)a in e?n[a]=_s(e[a],t[a]):r[a]=t[a];return function(o){for(a in n)r[a]=n[a](o);return r}}var zv=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Hm=new RegExp(zv.source,"g");function $q(e){return function(){return e}}function Nq(e){return function(t){return e(t)+""}}function Mq(e,t){var n=zv.lastIndex=Hm.lastIndex=0,r,a,o,i=-1,s=[],l=[];for(e=e+"",t=t+"";(r=zv.exec(e))&&(a=Hm.exec(t));)(o=a.index)>n&&(o=t.slice(n,o),s[i]?s[i]+=o:s[++i]=o),(r=r[0])===(a=a[0])?s[i]?s[i]+=a:s[++i]=a:(s[++i]=null,l.push({i,x:Bf(r,a)})),n=Hm.lastIndex;return n<t.length&&(o=t.slice(n),s[i]?s[i]+=o:s[++i]=o),s.length<2?l[0]?Nq(l[0].x):$q(t):(t=l.length,function(u){for(var f=0,c;f<t;++f)s[(c=l[f]).i]=c.x(u);return s.join("")})}function _s(e,t){var n=typeof t,r;return t==null||n==="boolean"?Pg(t):(n==="number"?Bf:n==="string"?(r=Yl(t))?(t=r,E3):Mq:t instanceof Yl?E3:t instanceof Date?Tq:Cq(t)?Aq:Array.isArray(t)?Eq:typeof t.valueOf!="function"&&typeof t.toString!="function"||isNaN(t)?jq:Bf)(e,t)}function Sg(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}function Rq(e,t){t===void 0&&(t=e,e=_s);for(var n=0,r=t.length-1,a=t[0],o=new Array(r<0?0:r);n<r;)o[n]=e(a,a=t[++n]);return function(i){var s=Math.max(0,Math.min(r-1,Math.floor(i*=r)));return o[s](i-s)}}function Iq(e){return function(){return e}}function Hf(e){return+e}var T3=[0,1];function It(e){return e}function Bv(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:Iq(isNaN(t)?NaN:.5)}function Dq(e,t){var n;return e>t&&(n=e,e=t,t=n),function(r){return Math.max(e,Math.min(t,r))}}function Lq(e,t,n){var r=e[0],a=e[1],o=t[0],i=t[1];return a<r?(r=Bv(a,r),o=n(i,o)):(r=Bv(r,a),o=n(o,i)),function(s){return o(r(s))}}function Fq(e,t,n){var r=Math.min(e.length,t.length)-1,a=new Array(r),o=new Array(r),i=-1;for(e[r]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());++i<r;)a[i]=Bv(e[i],e[i+1]),o[i]=n(t[i],t[i+1]);return function(s){var l=Mu(e,s,1,r)-1;return o[l](a[l](s))}}function Iu(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function gd(){var e=T3,t=T3,n=_s,r,a,o,i=It,s,l,u;function f(){var p=Math.min(e.length,t.length);return i!==It&&(i=Dq(e[0],e[p-1])),s=p>2?Fq:Lq,l=u=null,c}function c(p){return p==null||isNaN(p=+p)?o:(l||(l=s(e.map(r),t,n)))(r(i(p)))}return c.invert=function(p){return i(a((u||(u=s(t,e.map(r),Bf)))(p)))},c.domain=function(p){return arguments.length?(e=Array.from(p,Hf),f()):e.slice()},c.range=function(p){return arguments.length?(t=Array.from(p),f()):t.slice()},c.rangeRound=function(p){return t=Array.from(p),n=Sg,f()},c.clamp=function(p){return arguments.length?(i=p?!0:It,f()):i!==It},c.interpolate=function(p){return arguments.length?(n=p,f()):n},c.unknown=function(p){return arguments.length?(o=p,c):o},function(p,d){return r=p,a=d,f()}}function Og(){return gd()(It,It)}function zq(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Gf(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function zi(e){return e=Gf(Math.abs(e)),e?e[1]:NaN}function Bq(e,t){return function(n,r){for(var a=n.length,o=[],i=0,s=e[0],l=0;a>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),o.push(n.substring(a-=s,a+s)),!((l+=s+1)>r));)s=e[i=(i+1)%e.length];return o.reverse().join(t)}}function Hq(e){return function(t){return t.replace(/[0-9]/g,function(n){return e[+n]})}}var Gq=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ql(e){if(!(t=Gq.exec(e)))throw new Error("invalid format: "+e);var t;return new kg({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}Ql.prototype=kg.prototype;function kg(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}kg.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Uq(e){e:for(var t=e.length,n=1,r=-1,a;n<t;++n)switch(e[n]){case".":r=a=n;break;case"0":r===0&&(r=n),a=n;break;default:if(!+e[n])break e;r>0&&(r=0);break}return r>0?e.slice(0,r)+e.slice(a+1):e}var R7;function Wq(e,t){var n=Gf(e,t);if(!n)return e+"";var r=n[0],a=n[1],o=a-(R7=Math.max(-8,Math.min(8,Math.floor(a/3)))*3)+1,i=r.length;return o===i?r:o>i?r+new Array(o-i+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Gf(e,Math.max(0,t+o-1))[0]}function j3(e,t){var n=Gf(e,t);if(!n)return e+"";var r=n[0],a=n[1];return a<0?"0."+new Array(-a).join("0")+r:r.length>a+1?r.slice(0,a+1)+"."+r.slice(a+1):r+new Array(a-r.length+2).join("0")}const $3={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:zq,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>j3(e*100,t),r:j3,s:Wq,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function N3(e){return e}var M3=Array.prototype.map,R3=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function qq(e){var t=e.grouping===void 0||e.thousands===void 0?N3:Bq(M3.call(e.grouping,Number),e.thousands+""),n=e.currency===void 0?"":e.currency[0]+"",r=e.currency===void 0?"":e.currency[1]+"",a=e.decimal===void 0?".":e.decimal+"",o=e.numerals===void 0?N3:Hq(M3.call(e.numerals,String)),i=e.percent===void 0?"%":e.percent+"",s=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function u(c){c=Ql(c);var p=c.fill,d=c.align,h=c.sign,m=c.symbol,g=c.zero,v=c.width,y=c.comma,x=c.precision,P=c.trim,w=c.type;w==="n"?(y=!0,w="g"):$3[w]||(x===void 0&&(x=12),P=!0,w="g"),(g||p==="0"&&d==="=")&&(g=!0,p="0",d="=");var S=m==="$"?n:m==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",O=m==="$"?r:/[%p]/.test(w)?i:"",_=$3[w],A=/[defgprs%]/.test(w);x=x===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function j(E){var T=S,N=O,M,I,R;if(w==="c")N=_(E)+N,E="";else{E=+E;var L=E<0||1/E<0;if(E=isNaN(E)?l:_(Math.abs(E),x),P&&(E=Uq(E)),L&&+E==0&&h!=="+"&&(L=!1),T=(L?h==="("?h:s:h==="-"||h==="("?"":h)+T,N=(w==="s"?R3[8+R7/3]:"")+N+(L&&h==="("?")":""),A){for(M=-1,I=E.length;++M<I;)if(R=E.charCodeAt(M),48>R||R>57){N=(R===46?a+E.slice(M+1):E.slice(M))+N,E=E.slice(0,M);break}}}y&&!g&&(E=t(E,1/0));var $=T.length+E.length+N.length,D=$<v?new Array(v-$+1).join(p):"";switch(y&&g&&(E=t(D+E,D.length?v-N.length:1/0),D=""),d){case"<":E=T+E+N+D;break;case"=":E=T+D+E+N;break;case"^":E=D.slice(0,$=D.length>>1)+T+E+N+D.slice($);break;default:E=D+T+E+N;break}return o(E)}return j.toString=function(){return c+""},j}function f(c,p){var d=u((c=Ql(c),c.type="f",c)),h=Math.max(-8,Math.min(8,Math.floor(zi(p)/3)))*3,m=Math.pow(10,-h),g=R3[8+h/3];return function(v){return d(m*v)+g}}return{format:u,formatPrefix:f}}var yc,_g,I7;Vq({thousands:",",grouping:[3],currency:["$",""]});function Vq(e){return yc=qq(e),_g=yc.format,I7=yc.formatPrefix,yc}function Kq(e){return Math.max(0,-zi(Math.abs(e)))}function Xq(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(zi(t)/3)))*3-zi(Math.abs(e)))}function Yq(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,zi(t)-zi(e))+1}function D7(e,t,n,r){var a=Dv(e,t,n),o;switch(r=Ql(r??",f"),r.type){case"s":{var i=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(o=Xq(a,i))&&(r.precision=o),I7(r,i)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(o=Yq(a,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=o-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(o=Kq(a))&&(r.precision=o-(r.type==="%")*2);break}}return _g(r)}function La(e){var t=e.domain;return e.ticks=function(n){var r=t();return Rv(r[0],r[r.length-1],n??10)},e.tickFormat=function(n,r){var a=t();return D7(a[0],a[a.length-1],n??10,r)},e.nice=function(n){n==null&&(n=10);var r=t(),a=0,o=r.length-1,i=r[a],s=r[o],l,u,f=10;for(s<i&&(u=i,i=s,s=u,u=a,a=o,o=u);f-- >0;){if(u=Iv(i,s,n),u===l)return r[a]=i,r[o]=s,t(r);if(u>0)i=Math.floor(i/u)*u,s=Math.ceil(s/u)*u;else if(u<0)i=Math.ceil(i*u)/u,s=Math.floor(s*u)/u;else break;l=u}return e},e}function Uf(){var e=Og();return e.copy=function(){return Iu(e,Uf())},Sn.apply(e,arguments),La(e)}function L7(e){var t;function n(r){return r==null||isNaN(r=+r)?t:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(e=Array.from(r,Hf),n):e.slice()},n.unknown=function(r){return arguments.length?(t=r,n):t},n.copy=function(){return L7(e).unknown(t)},e=arguments.length?Array.from(e,Hf):[0,1],La(n)}function F7(e,t){e=e.slice();var n=0,r=e.length-1,a=e[n],o=e[r],i;return o<a&&(i=n,n=r,r=i,i=a,a=o,o=i),e[n]=t.floor(a),e[r]=t.ceil(o),e}function I3(e){return Math.log(e)}function D3(e){return Math.exp(e)}function Qq(e){return-Math.log(-e)}function Zq(e){return-Math.exp(-e)}function Jq(e){return isFinite(e)?+("1e"+e):e<0?0:e}function eV(e){return e===10?Jq:e===Math.E?Math.exp:t=>Math.pow(e,t)}function tV(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function L3(e){return(t,n)=>-e(-t,n)}function Ag(e){const t=e(I3,D3),n=t.domain;let r=10,a,o;function i(){return a=tV(r),o=eV(r),n()[0]<0?(a=L3(a),o=L3(o),e(Qq,Zq)):e(I3,D3),t}return t.base=function(s){return arguments.length?(r=+s,i()):r},t.domain=function(s){return arguments.length?(n(s),i()):n()},t.ticks=s=>{const l=n();let u=l[0],f=l[l.length-1];const c=f<u;c&&([u,f]=[f,u]);let p=a(u),d=a(f),h,m;const g=s==null?10:+s;let v=[];if(!(r%1)&&d-p<g){if(p=Math.floor(p),d=Math.ceil(d),u>0){for(;p<=d;++p)for(h=1;h<r;++h)if(m=p<0?h/o(-p):h*o(p),!(m<u)){if(m>f)break;v.push(m)}}else for(;p<=d;++p)for(h=r-1;h>=1;--h)if(m=p>0?h/o(-p):h*o(p),!(m<u)){if(m>f)break;v.push(m)}v.length*2<g&&(v=Rv(u,f,g))}else v=Rv(p,d,Math.min(d-p,g)).map(o);return c?v.reverse():v},t.tickFormat=(s,l)=>{if(s==null&&(s=10),l==null&&(l=r===10?"s":","),typeof l!="function"&&(!(r%1)&&(l=Ql(l)).precision==null&&(l.trim=!0),l=_g(l)),s===1/0)return l;const u=Math.max(1,r*s/t.ticks().length);return f=>{let c=f/o(Math.round(a(f)));return c*r<r-.5&&(c*=r),c<=u?l(f):""}},t.nice=()=>n(F7(n(),{floor:s=>o(Math.floor(a(s))),ceil:s=>o(Math.ceil(a(s)))})),t}function z7(){const e=Ag(gd()).domain([1,10]);return e.copy=()=>Iu(e,z7()).base(e.base()),Sn.apply(e,arguments),e}function F3(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function z3(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function Cg(e){var t=1,n=e(F3(t),z3(t));return n.constant=function(r){return arguments.length?e(F3(t=+r),z3(t)):t},La(n)}function B7(){var e=Cg(gd());return e.copy=function(){return Iu(e,B7()).constant(e.constant())},Sn.apply(e,arguments)}function B3(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function nV(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function rV(e){return e<0?-e*e:e*e}function Eg(e){var t=e(It,It),n=1;function r(){return n===1?e(It,It):n===.5?e(nV,rV):e(B3(n),B3(1/n))}return t.exponent=function(a){return arguments.length?(n=+a,r()):n},La(t)}function Tg(){var e=Eg(gd());return e.copy=function(){return Iu(e,Tg()).exponent(e.exponent())},Sn.apply(e,arguments),e}function aV(){return Tg.apply(null,arguments).exponent(.5)}function H3(e){return Math.sign(e)*e*e}function oV(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function H7(){var e=Og(),t=[0,1],n=!1,r;function a(o){var i=oV(e(o));return isNaN(i)?r:n?Math.round(i):i}return a.invert=function(o){return e.invert(H3(o))},a.domain=function(o){return arguments.length?(e.domain(o),a):e.domain()},a.range=function(o){return arguments.length?(e.range((t=Array.from(o,Hf)).map(H3)),a):t.slice()},a.rangeRound=function(o){return a.range(o).round(!0)},a.round=function(o){return arguments.length?(n=!!o,a):n},a.clamp=function(o){return arguments.length?(e.clamp(o),a):e.clamp()},a.unknown=function(o){return arguments.length?(r=o,a):r},a.copy=function(){return H7(e.domain(),t).round(n).clamp(e.clamp()).unknown(r)},Sn.apply(a,arguments),La(a)}function G7(){var e=[],t=[],n=[],r;function a(){var i=0,s=Math.max(1,t.length);for(n=new Array(s-1);++i<s;)n[i-1]=cq(e,i/s);return o}function o(i){return i==null||isNaN(i=+i)?r:t[Mu(n,i)]}return o.invertExtent=function(i){var s=t.indexOf(i);return s<0?[NaN,NaN]:[s>0?n[s-1]:e[0],s<n.length?n[s]:e[e.length-1]]},o.domain=function(i){if(!arguments.length)return e.slice();e=[];for(let s of i)s!=null&&!isNaN(s=+s)&&e.push(s);return e.sort(Oa),a()},o.range=function(i){return arguments.length?(t=Array.from(i),a()):t.slice()},o.unknown=function(i){return arguments.length?(r=i,o):r},o.quantiles=function(){return n.slice()},o.copy=function(){return G7().domain(e).range(t).unknown(r)},Sn.apply(o,arguments)}function U7(){var e=0,t=1,n=1,r=[.5],a=[0,1],o;function i(l){return l!=null&&l<=l?a[Mu(r,l,0,n)]:o}function s(){var l=-1;for(r=new Array(n);++l<n;)r[l]=((l+1)*t-(l-n)*e)/(n+1);return i}return i.domain=function(l){return arguments.length?([e,t]=l,e=+e,t=+t,s()):[e,t]},i.range=function(l){return arguments.length?(n=(a=Array.from(l)).length-1,s()):a.slice()},i.invertExtent=function(l){var u=a.indexOf(l);return u<0?[NaN,NaN]:u<1?[e,r[0]]:u>=n?[r[n-1],t]:[r[u-1],r[u]]},i.unknown=function(l){return arguments.length&&(o=l),i},i.thresholds=function(){return r.slice()},i.copy=function(){return U7().domain([e,t]).range(a).unknown(o)},Sn.apply(La(i),arguments)}function W7(){var e=[.5],t=[0,1],n,r=1;function a(o){return o!=null&&o<=o?t[Mu(e,o,0,r)]:n}return a.domain=function(o){return arguments.length?(e=Array.from(o),r=Math.min(e.length,t.length-1),a):e.slice()},a.range=function(o){return arguments.length?(t=Array.from(o),r=Math.min(e.length,t.length-1),a):t.slice()},a.invertExtent=function(o){var i=t.indexOf(o);return[e[i-1],e[i]]},a.unknown=function(o){return arguments.length?(n=o,a):n},a.copy=function(){return W7().domain(e).range(t).unknown(n)},Sn.apply(a,arguments)}const Gm=new Date,Um=new Date;function lt(e,t,n,r){function a(o){return e(o=arguments.length===0?new Date:new Date(+o)),o}return a.floor=o=>(e(o=new Date(+o)),o),a.ceil=o=>(e(o=new Date(o-1)),t(o,1),e(o),o),a.round=o=>{const i=a(o),s=a.ceil(o);return o-i<s-o?i:s},a.offset=(o,i)=>(t(o=new Date(+o),i==null?1:Math.floor(i)),o),a.range=(o,i,s)=>{const l=[];if(o=a.ceil(o),s=s==null?1:Math.floor(s),!(o<i)||!(s>0))return l;let u;do l.push(u=new Date(+o)),t(o,s),e(o);while(u<o&&o<i);return l},a.filter=o=>lt(i=>{if(i>=i)for(;e(i),!o(i);)i.setTime(i-1)},(i,s)=>{if(i>=i)if(s<0)for(;++s<=0;)for(;t(i,-1),!o(i););else for(;--s>=0;)for(;t(i,1),!o(i););}),n&&(a.count=(o,i)=>(Gm.setTime(+o),Um.setTime(+i),e(Gm),e(Um),Math.floor(n(Gm,Um))),a.every=o=>(o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?a.filter(r?i=>r(i)%o===0:i=>a.count(0,i)%o===0):a)),a}const Wf=lt(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Wf.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?lt(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):Wf);Wf.range;const Ar=1e3,vn=Ar*60,Cr=vn*60,zr=Cr*24,jg=zr*7,G3=zr*30,Wm=zr*365,eo=lt(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*Ar)},(e,t)=>(t-e)/Ar,e=>e.getUTCSeconds());eo.range;const $g=lt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Ar)},(e,t)=>{e.setTime(+e+t*vn)},(e,t)=>(t-e)/vn,e=>e.getMinutes());$g.range;const Ng=lt(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*vn)},(e,t)=>(t-e)/vn,e=>e.getUTCMinutes());Ng.range;const Mg=lt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Ar-e.getMinutes()*vn)},(e,t)=>{e.setTime(+e+t*Cr)},(e,t)=>(t-e)/Cr,e=>e.getHours());Mg.range;const Rg=lt(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Cr)},(e,t)=>(t-e)/Cr,e=>e.getUTCHours());Rg.range;const Du=lt(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*vn)/zr,e=>e.getDate()-1);Du.range;const xd=lt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/zr,e=>e.getUTCDate()-1);xd.range;const q7=lt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/zr,e=>Math.floor(e/zr));q7.range;function No(e){return lt(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,n)=>{t.setDate(t.getDate()+n*7)},(t,n)=>(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*vn)/jg)}const wd=No(0),qf=No(1),iV=No(2),sV=No(3),Bi=No(4),lV=No(5),uV=No(6);wd.range;qf.range;iV.range;sV.range;Bi.range;lV.range;uV.range;function Mo(e){return lt(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCDate(t.getUTCDate()+n*7)},(t,n)=>(n-t)/jg)}const bd=Mo(0),Vf=Mo(1),cV=Mo(2),fV=Mo(3),Hi=Mo(4),pV=Mo(5),dV=Mo(6);bd.range;Vf.range;cV.range;fV.range;Hi.range;pV.range;dV.range;const Ig=lt(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());Ig.range;const Dg=lt(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Dg.range;const Br=lt(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Br.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:lt(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n*e)});Br.range;const Hr=lt(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Hr.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:lt(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)});Hr.range;function V7(e,t,n,r,a,o){const i=[[eo,1,Ar],[eo,5,5*Ar],[eo,15,15*Ar],[eo,30,30*Ar],[o,1,vn],[o,5,5*vn],[o,15,15*vn],[o,30,30*vn],[a,1,Cr],[a,3,3*Cr],[a,6,6*Cr],[a,12,12*Cr],[r,1,zr],[r,2,2*zr],[n,1,jg],[t,1,G3],[t,3,3*G3],[e,1,Wm]];function s(u,f,c){const p=f<u;p&&([u,f]=[f,u]);const d=c&&typeof c.range=="function"?c:l(u,f,c),h=d?d.range(u,+f+1):[];return p?h.reverse():h}function l(u,f,c){const p=Math.abs(f-u)/c,d=xg(([,,g])=>g).right(i,p);if(d===i.length)return e.every(Dv(u/Wm,f/Wm,c));if(d===0)return Wf.every(Math.max(Dv(u,f,c),1));const[h,m]=i[p/i[d-1][2]<i[d][2]/p?d-1:d];return h.every(m)}return[s,l]}const[mV,hV]=V7(Hr,Dg,bd,q7,Rg,Ng),[vV,yV]=V7(Br,Ig,wd,Du,Mg,$g);function qm(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function Vm(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function Us(e,t,n){return{y:e,m:t,d:n,H:0,M:0,S:0,L:0}}function gV(e){var t=e.dateTime,n=e.date,r=e.time,a=e.periods,o=e.days,i=e.shortDays,s=e.months,l=e.shortMonths,u=Ws(a),f=qs(a),c=Ws(o),p=qs(o),d=Ws(i),h=qs(i),m=Ws(s),g=qs(s),v=Ws(l),y=qs(l),x={a:L,A:$,b:D,B:H,c:null,d:X3,e:X3,f:BV,g:QV,G:JV,H:LV,I:FV,j:zV,L:K7,m:HV,M:GV,p:W,q:G,Q:Z3,s:J3,S:UV,u:WV,U:qV,V:VV,w:KV,W:XV,x:null,X:null,y:YV,Y:ZV,Z:eK,"%":Q3},P={a:Z,A:ie,b:ve,B:Pe,c:null,d:Y3,e:Y3,f:aK,g:mK,G:vK,H:tK,I:nK,j:rK,L:Y7,m:oK,M:iK,p:J,q:le,Q:Z3,s:J3,S:sK,u:lK,U:uK,V:cK,w:fK,W:pK,x:null,X:null,y:dK,Y:hK,Z:yK,"%":Q3},w={a:j,A:E,b:T,B:N,c:M,d:V3,e:V3,f:MV,g:q3,G:W3,H:K3,I:K3,j:TV,L:NV,m:EV,M:jV,p:A,q:CV,Q:IV,s:DV,S:$V,u:SV,U:OV,V:kV,w:PV,W:_V,x:I,X:R,y:q3,Y:W3,Z:AV,"%":RV};x.x=S(n,x),x.X=S(r,x),x.c=S(t,x),P.x=S(n,P),P.X=S(r,P),P.c=S(t,P);function S(q,K){return function(X){var F=[],fe=-1,ne=0,Ne=q.length,Me,Ze,Xn;for(X instanceof Date||(X=new Date(+X));++fe<Ne;)q.charCodeAt(fe)===37&&(F.push(q.slice(ne,fe)),(Ze=U3[Me=q.charAt(++fe)])!=null?Me=q.charAt(++fe):Ze=Me==="e"?" ":"0",(Xn=K[Me])&&(Me=Xn(X,Ze)),F.push(Me),ne=fe+1);return F.push(q.slice(ne,fe)),F.join("")}}function O(q,K){return function(X){var F=Us(1900,void 0,1),fe=_(F,q,X+="",0),ne,Ne;if(fe!=X.length)return null;if("Q"in F)return new Date(F.Q);if("s"in F)return new Date(F.s*1e3+("L"in F?F.L:0));if(K&&!("Z"in F)&&(F.Z=0),"p"in F&&(F.H=F.H%12+F.p*12),F.m===void 0&&(F.m="q"in F?F.q:0),"V"in F){if(F.V<1||F.V>53)return null;"w"in F||(F.w=1),"Z"in F?(ne=Vm(Us(F.y,0,1)),Ne=ne.getUTCDay(),ne=Ne>4||Ne===0?Vf.ceil(ne):Vf(ne),ne=xd.offset(ne,(F.V-1)*7),F.y=ne.getUTCFullYear(),F.m=ne.getUTCMonth(),F.d=ne.getUTCDate()+(F.w+6)%7):(ne=qm(Us(F.y,0,1)),Ne=ne.getDay(),ne=Ne>4||Ne===0?qf.ceil(ne):qf(ne),ne=Du.offset(ne,(F.V-1)*7),F.y=ne.getFullYear(),F.m=ne.getMonth(),F.d=ne.getDate()+(F.w+6)%7)}else("W"in F||"U"in F)&&("w"in F||(F.w="u"in F?F.u%7:"W"in F?1:0),Ne="Z"in F?Vm(Us(F.y,0,1)).getUTCDay():qm(Us(F.y,0,1)).getDay(),F.m=0,F.d="W"in F?(F.w+6)%7+F.W*7-(Ne+5)%7:F.w+F.U*7-(Ne+6)%7);return"Z"in F?(F.H+=F.Z/100|0,F.M+=F.Z%100,Vm(F)):qm(F)}}function _(q,K,X,F){for(var fe=0,ne=K.length,Ne=X.length,Me,Ze;fe<ne;){if(F>=Ne)return-1;if(Me=K.charCodeAt(fe++),Me===37){if(Me=K.charAt(fe++),Ze=w[Me in U3?K.charAt(fe++):Me],!Ze||(F=Ze(q,X,F))<0)return-1}else if(Me!=X.charCodeAt(F++))return-1}return F}function A(q,K,X){var F=u.exec(K.slice(X));return F?(q.p=f.get(F[0].toLowerCase()),X+F[0].length):-1}function j(q,K,X){var F=d.exec(K.slice(X));return F?(q.w=h.get(F[0].toLowerCase()),X+F[0].length):-1}function E(q,K,X){var F=c.exec(K.slice(X));return F?(q.w=p.get(F[0].toLowerCase()),X+F[0].length):-1}function T(q,K,X){var F=v.exec(K.slice(X));return F?(q.m=y.get(F[0].toLowerCase()),X+F[0].length):-1}function N(q,K,X){var F=m.exec(K.slice(X));return F?(q.m=g.get(F[0].toLowerCase()),X+F[0].length):-1}function M(q,K,X){return _(q,t,K,X)}function I(q,K,X){return _(q,n,K,X)}function R(q,K,X){return _(q,r,K,X)}function L(q){return i[q.getDay()]}function $(q){return o[q.getDay()]}function D(q){return l[q.getMonth()]}function H(q){return s[q.getMonth()]}function W(q){return a[+(q.getHours()>=12)]}function G(q){return 1+~~(q.getMonth()/3)}function Z(q){return i[q.getUTCDay()]}function ie(q){return o[q.getUTCDay()]}function ve(q){return l[q.getUTCMonth()]}function Pe(q){return s[q.getUTCMonth()]}function J(q){return a[+(q.getUTCHours()>=12)]}function le(q){return 1+~~(q.getUTCMonth()/3)}return{format:function(q){var K=S(q+="",x);return K.toString=function(){return q},K},parse:function(q){var K=O(q+="",!1);return K.toString=function(){return q},K},utcFormat:function(q){var K=S(q+="",P);return K.toString=function(){return q},K},utcParse:function(q){var K=O(q+="",!0);return K.toString=function(){return q},K}}}var U3={"-":"",_:" ",0:"0"},dt=/^\s*\d+/,xV=/^%/,wV=/[\\^$*+?|[\]().{}]/g;function he(e,t,n){var r=e<0?"-":"",a=(r?-e:e)+"",o=a.length;return r+(o<n?new Array(n-o+1).join(t)+a:a)}function bV(e){return e.replace(wV,"\\$&")}function Ws(e){return new RegExp("^(?:"+e.map(bV).join("|")+")","i")}function qs(e){return new Map(e.map((t,n)=>[t.toLowerCase(),n]))}function PV(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function SV(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function OV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function kV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function _V(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function W3(e,t,n){var r=dt.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function q3(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function AV(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function CV(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.q=r[0]*3-3,n+r[0].length):-1}function EV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function V3(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function TV(e,t,n){var r=dt.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function K3(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function jV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function $V(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function NV(e,t,n){var r=dt.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function MV(e,t,n){var r=dt.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function RV(e,t,n){var r=xV.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function IV(e,t,n){var r=dt.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function DV(e,t,n){var r=dt.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function X3(e,t){return he(e.getDate(),t,2)}function LV(e,t){return he(e.getHours(),t,2)}function FV(e,t){return he(e.getHours()%12||12,t,2)}function zV(e,t){return he(1+Du.count(Br(e),e),t,3)}function K7(e,t){return he(e.getMilliseconds(),t,3)}function BV(e,t){return K7(e,t)+"000"}function HV(e,t){return he(e.getMonth()+1,t,2)}function GV(e,t){return he(e.getMinutes(),t,2)}function UV(e,t){return he(e.getSeconds(),t,2)}function WV(e){var t=e.getDay();return t===0?7:t}function qV(e,t){return he(wd.count(Br(e)-1,e),t,2)}function X7(e){var t=e.getDay();return t>=4||t===0?Bi(e):Bi.ceil(e)}function VV(e,t){return e=X7(e),he(Bi.count(Br(e),e)+(Br(e).getDay()===4),t,2)}function KV(e){return e.getDay()}function XV(e,t){return he(qf.count(Br(e)-1,e),t,2)}function YV(e,t){return he(e.getFullYear()%100,t,2)}function QV(e,t){return e=X7(e),he(e.getFullYear()%100,t,2)}function ZV(e,t){return he(e.getFullYear()%1e4,t,4)}function JV(e,t){var n=e.getDay();return e=n>=4||n===0?Bi(e):Bi.ceil(e),he(e.getFullYear()%1e4,t,4)}function eK(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+he(t/60|0,"0",2)+he(t%60,"0",2)}function Y3(e,t){return he(e.getUTCDate(),t,2)}function tK(e,t){return he(e.getUTCHours(),t,2)}function nK(e,t){return he(e.getUTCHours()%12||12,t,2)}function rK(e,t){return he(1+xd.count(Hr(e),e),t,3)}function Y7(e,t){return he(e.getUTCMilliseconds(),t,3)}function aK(e,t){return Y7(e,t)+"000"}function oK(e,t){return he(e.getUTCMonth()+1,t,2)}function iK(e,t){return he(e.getUTCMinutes(),t,2)}function sK(e,t){return he(e.getUTCSeconds(),t,2)}function lK(e){var t=e.getUTCDay();return t===0?7:t}function uK(e,t){return he(bd.count(Hr(e)-1,e),t,2)}function Q7(e){var t=e.getUTCDay();return t>=4||t===0?Hi(e):Hi.ceil(e)}function cK(e,t){return e=Q7(e),he(Hi.count(Hr(e),e)+(Hr(e).getUTCDay()===4),t,2)}function fK(e){return e.getUTCDay()}function pK(e,t){return he(Vf.count(Hr(e)-1,e),t,2)}function dK(e,t){return he(e.getUTCFullYear()%100,t,2)}function mK(e,t){return e=Q7(e),he(e.getUTCFullYear()%100,t,2)}function hK(e,t){return he(e.getUTCFullYear()%1e4,t,4)}function vK(e,t){var n=e.getUTCDay();return e=n>=4||n===0?Hi(e):Hi.ceil(e),he(e.getUTCFullYear()%1e4,t,4)}function yK(){return"+0000"}function Q3(){return"%"}function Z3(e){return+e}function J3(e){return Math.floor(+e/1e3)}var Bo,Z7,J7;gK({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function gK(e){return Bo=gV(e),Z7=Bo.format,Bo.parse,J7=Bo.utcFormat,Bo.utcParse,Bo}function xK(e){return new Date(e)}function wK(e){return e instanceof Date?+e:+new Date(+e)}function Lg(e,t,n,r,a,o,i,s,l,u){var f=Og(),c=f.invert,p=f.domain,d=u(".%L"),h=u(":%S"),m=u("%I:%M"),g=u("%I %p"),v=u("%a %d"),y=u("%b %d"),x=u("%B"),P=u("%Y");function w(S){return(l(S)<S?d:s(S)<S?h:i(S)<S?m:o(S)<S?g:r(S)<S?a(S)<S?v:y:n(S)<S?x:P)(S)}return f.invert=function(S){return new Date(c(S))},f.domain=function(S){return arguments.length?p(Array.from(S,wK)):p().map(xK)},f.ticks=function(S){var O=p();return e(O[0],O[O.length-1],S??10)},f.tickFormat=function(S,O){return O==null?w:u(O)},f.nice=function(S){var O=p();return(!S||typeof S.range!="function")&&(S=t(O[0],O[O.length-1],S??10)),S?p(F7(O,S)):f},f.copy=function(){return Iu(f,Lg(e,t,n,r,a,o,i,s,l,u))},f}function bK(){return Sn.apply(Lg(vV,yV,Br,Ig,wd,Du,Mg,$g,eo,Z7).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function PK(){return Sn.apply(Lg(mV,hV,Hr,Dg,bd,xd,Rg,Ng,eo,J7).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function Pd(){var e=0,t=1,n,r,a,o,i=It,s=!1,l;function u(c){return c==null||isNaN(c=+c)?l:i(a===0?.5:(c=(o(c)-n)*a,s?Math.max(0,Math.min(1,c)):c))}u.domain=function(c){return arguments.length?([e,t]=c,n=o(e=+e),r=o(t=+t),a=n===r?0:1/(r-n),u):[e,t]},u.clamp=function(c){return arguments.length?(s=!!c,u):s},u.interpolator=function(c){return arguments.length?(i=c,u):i};function f(c){return function(p){var d,h;return arguments.length?([d,h]=p,i=c(d,h),u):[i(0),i(1)]}}return u.range=f(_s),u.rangeRound=f(Sg),u.unknown=function(c){return arguments.length?(l=c,u):l},function(c){return o=c,n=c(e),r=c(t),a=n===r?0:1/(r-n),u}}function Fa(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function eP(){var e=La(Pd()(It));return e.copy=function(){return Fa(e,eP())},qr.apply(e,arguments)}function tP(){var e=Ag(Pd()).domain([1,10]);return e.copy=function(){return Fa(e,tP()).base(e.base())},qr.apply(e,arguments)}function nP(){var e=Cg(Pd());return e.copy=function(){return Fa(e,nP()).constant(e.constant())},qr.apply(e,arguments)}function Fg(){var e=Eg(Pd());return e.copy=function(){return Fa(e,Fg()).exponent(e.exponent())},qr.apply(e,arguments)}function SK(){return Fg.apply(null,arguments).exponent(.5)}function rP(){var e=[],t=It;function n(r){if(r!=null&&!isNaN(r=+r))return t((Mu(e,r,1)-1)/(e.length-1))}return n.domain=function(r){if(!arguments.length)return e.slice();e=[];for(let a of r)a!=null&&!isNaN(a=+a)&&e.push(a);return e.sort(Oa),n},n.interpolator=function(r){return arguments.length?(t=r,n):t},n.range=function(){return e.map((r,a)=>t(a/(e.length-1)))},n.quantiles=function(r){return Array.from({length:r+1},(a,o)=>uq(e,o/r))},n.copy=function(){return rP(t).domain(e)},qr.apply(n,arguments)}function Sd(){var e=0,t=.5,n=1,r=1,a,o,i,s,l,u=It,f,c=!1,p;function d(m){return isNaN(m=+m)?p:(m=.5+((m=+f(m))-o)*(r*m<r*o?s:l),u(c?Math.max(0,Math.min(1,m)):m))}d.domain=function(m){return arguments.length?([e,t,n]=m,a=f(e=+e),o=f(t=+t),i=f(n=+n),s=a===o?0:.5/(o-a),l=o===i?0:.5/(i-o),r=o<a?-1:1,d):[e,t,n]},d.clamp=function(m){return arguments.length?(c=!!m,d):c},d.interpolator=function(m){return arguments.length?(u=m,d):u};function h(m){return function(g){var v,y,x;return arguments.length?([v,y,x]=g,u=Rq(m,[v,y,x]),d):[u(0),u(.5),u(1)]}}return d.range=h(_s),d.rangeRound=h(Sg),d.unknown=function(m){return arguments.length?(p=m,d):p},function(m){return f=m,a=m(e),o=m(t),i=m(n),s=a===o?0:.5/(o-a),l=o===i?0:.5/(i-o),r=o<a?-1:1,d}}function aP(){var e=La(Sd()(It));return e.copy=function(){return Fa(e,aP())},qr.apply(e,arguments)}function oP(){var e=Ag(Sd()).domain([.1,1,10]);return e.copy=function(){return Fa(e,oP()).base(e.base())},qr.apply(e,arguments)}function iP(){var e=Cg(Sd());return e.copy=function(){return Fa(e,iP()).constant(e.constant())},qr.apply(e,arguments)}function zg(){var e=Eg(Sd());return e.copy=function(){return Fa(e,zg()).exponent(e.exponent())},qr.apply(e,arguments)}function OK(){return zg.apply(null,arguments).exponent(.5)}const eb=Object.freeze(Object.defineProperty({__proto__:null,scaleBand:Vl,scaleDiverging:aP,scaleDivergingLog:oP,scaleDivergingPow:zg,scaleDivergingSqrt:OK,scaleDivergingSymlog:iP,scaleIdentity:L7,scaleImplicit:Lv,scaleLinear:Uf,scaleLog:z7,scaleOrdinal:wg,scalePoint:dl,scalePow:Tg,scaleQuantile:G7,scaleQuantize:U7,scaleRadial:H7,scaleSequential:eP,scaleSequentialLog:tP,scaleSequentialPow:Fg,scaleSequentialQuantile:rP,scaleSequentialSqrt:SK,scaleSequentialSymlog:nP,scaleSqrt:aV,scaleSymlog:B7,scaleThreshold:W7,scaleTime:bK,scaleUtc:PK,tickFormat:D7},Symbol.toStringTag,{value:"Module"}));var kK=ys;function _K(e,t,n){for(var r=-1,a=e.length;++r<a;){var o=e[r],i=t(o);if(i!=null&&(s===void 0?i===i&&!kK(i):n(i,s)))var s=i,l=o}return l}var sP=_K;function AK(e,t){return e>t}var CK=AK,EK=sP,TK=CK,jK=ks;function $K(e){return e&&e.length?EK(e,jK,TK):void 0}var NK=$K;const da=Ce(NK);function MK(e,t){return e<t}var RK=MK,IK=sP,DK=RK,LK=ks;function FK(e){return e&&e.length?IK(e,LK,DK):void 0}var zK=FK;const Od=Ce(zK);var BK=eg,HK=Ia,GK=v7,UK=Vt;function WK(e,t){var n=UK(e)?BK:GK;return n(e,HK(t))}var qK=WK,VK=m7,KK=qK;function XK(e,t){return VK(KK(e,t),1)}var YK=XK;const QK=Ce(YK);var ZK=mg;function JK(e,t){return ZK(e,t)}var eX=JK;const ko=Ce(eX);var As=1e9,tX={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},Hg,Be=!0,bn="[DecimalError] ",po=bn+"Invalid argument: ",Bg=bn+"Exponent out of range: ",Cs=Math.floor,Ka=Math.pow,nX=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Jt,ut=1e7,Le=7,lP=9007199254740991,Kf=Cs(lP/Le),Q={};Q.absoluteValue=Q.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};Q.comparedTo=Q.cmp=function(e){var t,n,r,a,o=this;if(e=new o.constructor(e),o.s!==e.s)return o.s||-e.s;if(o.e!==e.e)return o.e>e.e^o.s<0?1:-1;for(r=o.d.length,a=e.d.length,t=0,n=r<a?r:a;t<n;++t)if(o.d[t]!==e.d[t])return o.d[t]>e.d[t]^o.s<0?1:-1;return r===a?0:r>a^o.s<0?1:-1};Q.decimalPlaces=Q.dp=function(){var e=this,t=e.d.length-1,n=(t-e.e)*Le;if(t=e.d[t],t)for(;t%10==0;t/=10)n--;return n<0?0:n};Q.dividedBy=Q.div=function(e){return Nr(this,new this.constructor(e))};Q.dividedToIntegerBy=Q.idiv=function(e){var t=this,n=t.constructor;return Te(Nr(t,new n(e),0,1),n.precision)};Q.equals=Q.eq=function(e){return!this.cmp(e)};Q.exponent=function(){return tt(this)};Q.greaterThan=Q.gt=function(e){return this.cmp(e)>0};Q.greaterThanOrEqualTo=Q.gte=function(e){return this.cmp(e)>=0};Q.isInteger=Q.isint=function(){return this.e>this.d.length-2};Q.isNegative=Q.isneg=function(){return this.s<0};Q.isPositive=Q.ispos=function(){return this.s>0};Q.isZero=function(){return this.s===0};Q.lessThan=Q.lt=function(e){return this.cmp(e)<0};Q.lessThanOrEqualTo=Q.lte=function(e){return this.cmp(e)<1};Q.logarithm=Q.log=function(e){var t,n=this,r=n.constructor,a=r.precision,o=a+5;if(e===void 0)e=new r(10);else if(e=new r(e),e.s<1||e.eq(Jt))throw Error(bn+"NaN");if(n.s<1)throw Error(bn+(n.s?"NaN":"-Infinity"));return n.eq(Jt)?new r(0):(Be=!1,t=Nr(Zl(n,o),Zl(e,o),o),Be=!0,Te(t,a))};Q.minus=Q.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?fP(t,e):uP(t,(e.s=-e.s,e))};Q.modulo=Q.mod=function(e){var t,n=this,r=n.constructor,a=r.precision;if(e=new r(e),!e.s)throw Error(bn+"NaN");return n.s?(Be=!1,t=Nr(n,e,0,1).times(e),Be=!0,n.minus(t)):Te(new r(n),a)};Q.naturalExponential=Q.exp=function(){return cP(this)};Q.naturalLogarithm=Q.ln=function(){return Zl(this)};Q.negated=Q.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};Q.plus=Q.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?uP(t,e):fP(t,(e.s=-e.s,e))};Q.precision=Q.sd=function(e){var t,n,r,a=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(po+e);if(t=tt(a)+1,r=a.d.length-1,n=r*Le+1,r=a.d[r],r){for(;r%10==0;r/=10)n--;for(r=a.d[0];r>=10;r/=10)n++}return e&&t>n?t:n};Q.squareRoot=Q.sqrt=function(){var e,t,n,r,a,o,i,s=this,l=s.constructor;if(s.s<1){if(!s.s)return new l(0);throw Error(bn+"NaN")}for(e=tt(s),Be=!1,a=Math.sqrt(+s),a==0||a==1/0?(t=or(s.d),(t.length+e)%2==0&&(t+="0"),a=Math.sqrt(t),e=Cs((e+1)/2)-(e<0||e%2),a==1/0?t="5e"+e:(t=a.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),r=new l(t)):r=new l(a.toString()),n=l.precision,a=i=n+3;;)if(o=r,r=o.plus(Nr(s,o,i+2)).times(.5),or(o.d).slice(0,i)===(t=or(r.d)).slice(0,i)){if(t=t.slice(i-3,i+1),a==i&&t=="4999"){if(Te(o,n+1,0),o.times(o).eq(s)){r=o;break}}else if(t!="9999")break;i+=4}return Be=!0,Te(r,n)};Q.times=Q.mul=function(e){var t,n,r,a,o,i,s,l,u,f=this,c=f.constructor,p=f.d,d=(e=new c(e)).d;if(!f.s||!e.s)return new c(0);for(e.s*=f.s,n=f.e+e.e,l=p.length,u=d.length,l<u&&(o=p,p=d,d=o,i=l,l=u,u=i),o=[],i=l+u,r=i;r--;)o.push(0);for(r=u;--r>=0;){for(t=0,a=l+r;a>r;)s=o[a]+d[r]*p[a-r-1]+t,o[a--]=s%ut|0,t=s/ut|0;o[a]=(o[a]+t)%ut|0}for(;!o[--i];)o.pop();return t?++n:o.shift(),e.d=o,e.e=n,Be?Te(e,c.precision):e};Q.toDecimalPlaces=Q.todp=function(e,t){var n=this,r=n.constructor;return n=new r(n),e===void 0?n:(vr(e,0,As),t===void 0?t=r.rounding:vr(t,0,8),Te(n,e+tt(n)+1,t))};Q.toExponential=function(e,t){var n,r=this,a=r.constructor;return e===void 0?n=_o(r,!0):(vr(e,0,As),t===void 0?t=a.rounding:vr(t,0,8),r=Te(new a(r),e+1,t),n=_o(r,!0,e+1)),n};Q.toFixed=function(e,t){var n,r,a=this,o=a.constructor;return e===void 0?_o(a):(vr(e,0,As),t===void 0?t=o.rounding:vr(t,0,8),r=Te(new o(a),e+tt(a)+1,t),n=_o(r.abs(),!1,e+tt(r)+1),a.isneg()&&!a.isZero()?"-"+n:n)};Q.toInteger=Q.toint=function(){var e=this,t=e.constructor;return Te(new t(e),tt(e)+1,t.rounding)};Q.toNumber=function(){return+this};Q.toPower=Q.pow=function(e){var t,n,r,a,o,i,s=this,l=s.constructor,u=12,f=+(e=new l(e));if(!e.s)return new l(Jt);if(s=new l(s),!s.s){if(e.s<1)throw Error(bn+"Infinity");return s}if(s.eq(Jt))return s;if(r=l.precision,e.eq(Jt))return Te(s,r);if(t=e.e,n=e.d.length-1,i=t>=n,o=s.s,i){if((n=f<0?-f:f)<=lP){for(a=new l(Jt),t=Math.ceil(r/Le+4),Be=!1;n%2&&(a=a.times(s),nb(a.d,t)),n=Cs(n/2),n!==0;)s=s.times(s),nb(s.d,t);return Be=!0,e.s<0?new l(Jt).div(a):Te(a,r)}}else if(o<0)throw Error(bn+"NaN");return o=o<0&&e.d[Math.max(t,n)]&1?-1:1,s.s=1,Be=!1,a=e.times(Zl(s,r+u)),Be=!0,a=cP(a),a.s=o,a};Q.toPrecision=function(e,t){var n,r,a=this,o=a.constructor;return e===void 0?(n=tt(a),r=_o(a,n<=o.toExpNeg||n>=o.toExpPos)):(vr(e,1,As),t===void 0?t=o.rounding:vr(t,0,8),a=Te(new o(a),e,t),n=tt(a),r=_o(a,e<=n||n<=o.toExpNeg,e)),r};Q.toSignificantDigits=Q.tosd=function(e,t){var n=this,r=n.constructor;return e===void 0?(e=r.precision,t=r.rounding):(vr(e,1,As),t===void 0?t=r.rounding:vr(t,0,8)),Te(new r(n),e,t)};Q.toString=Q.valueOf=Q.val=Q.toJSON=Q[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=tt(e),n=e.constructor;return _o(e,t<=n.toExpNeg||t>=n.toExpPos)};function uP(e,t){var n,r,a,o,i,s,l,u,f=e.constructor,c=f.precision;if(!e.s||!t.s)return t.s||(t=new f(e)),Be?Te(t,c):t;if(l=e.d,u=t.d,i=e.e,a=t.e,l=l.slice(),o=i-a,o){for(o<0?(r=l,o=-o,s=u.length):(r=u,a=i,s=l.length),i=Math.ceil(c/Le),s=i>s?i+1:s+1,o>s&&(o=s,r.length=1),r.reverse();o--;)r.push(0);r.reverse()}for(s=l.length,o=u.length,s-o<0&&(o=s,r=u,u=l,l=r),n=0;o;)n=(l[--o]=l[o]+u[o]+n)/ut|0,l[o]%=ut;for(n&&(l.unshift(n),++a),s=l.length;l[--s]==0;)l.pop();return t.d=l,t.e=a,Be?Te(t,c):t}function vr(e,t,n){if(e!==~~e||e<t||e>n)throw Error(po+e)}function or(e){var t,n,r,a=e.length-1,o="",i=e[0];if(a>0){for(o+=i,t=1;t<a;t++)r=e[t]+"",n=Le-r.length,n&&(o+=na(n)),o+=r;i=e[t],r=i+"",n=Le-r.length,n&&(o+=na(n))}else if(i===0)return"0";for(;i%10===0;)i/=10;return o+i}var Nr=function(){function e(r,a){var o,i=0,s=r.length;for(r=r.slice();s--;)o=r[s]*a+i,r[s]=o%ut|0,i=o/ut|0;return i&&r.unshift(i),r}function t(r,a,o,i){var s,l;if(o!=i)l=o>i?1:-1;else for(s=l=0;s<o;s++)if(r[s]!=a[s]){l=r[s]>a[s]?1:-1;break}return l}function n(r,a,o){for(var i=0;o--;)r[o]-=i,i=r[o]<a[o]?1:0,r[o]=i*ut+r[o]-a[o];for(;!r[0]&&r.length>1;)r.shift()}return function(r,a,o,i){var s,l,u,f,c,p,d,h,m,g,v,y,x,P,w,S,O,_,A=r.constructor,j=r.s==a.s?1:-1,E=r.d,T=a.d;if(!r.s)return new A(r);if(!a.s)throw Error(bn+"Division by zero");for(l=r.e-a.e,O=T.length,w=E.length,d=new A(j),h=d.d=[],u=0;T[u]==(E[u]||0);)++u;if(T[u]>(E[u]||0)&&--l,o==null?y=o=A.precision:i?y=o+(tt(r)-tt(a))+1:y=o,y<0)return new A(0);if(y=y/Le+2|0,u=0,O==1)for(f=0,T=T[0],y++;(u<w||f)&&y--;u++)x=f*ut+(E[u]||0),h[u]=x/T|0,f=x%T|0;else{for(f=ut/(T[0]+1)|0,f>1&&(T=e(T,f),E=e(E,f),O=T.length,w=E.length),P=O,m=E.slice(0,O),g=m.length;g<O;)m[g++]=0;_=T.slice(),_.unshift(0),S=T[0],T[1]>=ut/2&&++S;do f=0,s=t(T,m,O,g),s<0?(v=m[0],O!=g&&(v=v*ut+(m[1]||0)),f=v/S|0,f>1?(f>=ut&&(f=ut-1),c=e(T,f),p=c.length,g=m.length,s=t(c,m,p,g),s==1&&(f--,n(c,O<p?_:T,p))):(f==0&&(s=f=1),c=T.slice()),p=c.length,p<g&&c.unshift(0),n(m,c,g),s==-1&&(g=m.length,s=t(T,m,O,g),s<1&&(f++,n(m,O<g?_:T,g))),g=m.length):s===0&&(f++,m=[0]),h[u++]=f,s&&m[0]?m[g++]=E[P]||0:(m=[E[P]],g=1);while((P++<w||m[0]!==void 0)&&y--)}return h[0]||h.shift(),d.e=l,Te(d,i?o+tt(d)+1:o)}}();function cP(e,t){var n,r,a,o,i,s,l=0,u=0,f=e.constructor,c=f.precision;if(tt(e)>16)throw Error(Bg+tt(e));if(!e.s)return new f(Jt);for(Be=!1,s=c,i=new f(.03125);e.abs().gte(.1);)e=e.times(i),u+=5;for(r=Math.log(Ka(2,u))/Math.LN10*2+5|0,s+=r,n=a=o=new f(Jt),f.precision=s;;){if(a=Te(a.times(e),s),n=n.times(++l),i=o.plus(Nr(a,n,s)),or(i.d).slice(0,s)===or(o.d).slice(0,s)){for(;u--;)o=Te(o.times(o),s);return f.precision=c,t==null?(Be=!0,Te(o,c)):o}o=i}}function tt(e){for(var t=e.e*Le,n=e.d[0];n>=10;n/=10)t++;return t}function Km(e,t,n){if(t>e.LN10.sd())throw Be=!0,n&&(e.precision=n),Error(bn+"LN10 precision limit exceeded");return Te(new e(e.LN10),t)}function na(e){for(var t="";e--;)t+="0";return t}function Zl(e,t){var n,r,a,o,i,s,l,u,f,c=1,p=10,d=e,h=d.d,m=d.constructor,g=m.precision;if(d.s<1)throw Error(bn+(d.s?"NaN":"-Infinity"));if(d.eq(Jt))return new m(0);if(t==null?(Be=!1,u=g):u=t,d.eq(10))return t==null&&(Be=!0),Km(m,u);if(u+=p,m.precision=u,n=or(h),r=n.charAt(0),o=tt(d),Math.abs(o)<15e14){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)d=d.times(e),n=or(d.d),r=n.charAt(0),c++;o=tt(d),r>1?(d=new m("0."+n),o++):d=new m(r+"."+n.slice(1))}else return l=Km(m,u+2,g).times(o+""),d=Zl(new m(r+"."+n.slice(1)),u-p).plus(l),m.precision=g,t==null?(Be=!0,Te(d,g)):d;for(s=i=d=Nr(d.minus(Jt),d.plus(Jt),u),f=Te(d.times(d),u),a=3;;){if(i=Te(i.times(f),u),l=s.plus(Nr(i,new m(a),u)),or(l.d).slice(0,u)===or(s.d).slice(0,u))return s=s.times(2),o!==0&&(s=s.plus(Km(m,u+2,g).times(o+""))),s=Nr(s,new m(c),u),m.precision=g,t==null?(Be=!0,Te(s,g)):s;s=l,a+=2}}function tb(e,t){var n,r,a;for((n=t.indexOf("."))>-1&&(t=t.replace(".","")),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;t.charCodeAt(r)===48;)++r;for(a=t.length;t.charCodeAt(a-1)===48;)--a;if(t=t.slice(r,a),t){if(a-=r,n=n-r-1,e.e=Cs(n/Le),e.d=[],r=(n+1)%Le,n<0&&(r+=Le),r<a){for(r&&e.d.push(+t.slice(0,r)),a-=Le;r<a;)e.d.push(+t.slice(r,r+=Le));t=t.slice(r),r=Le-t.length}else r-=a;for(;r--;)t+="0";if(e.d.push(+t),Be&&(e.e>Kf||e.e<-Kf))throw Error(Bg+n)}else e.s=0,e.e=0,e.d=[0];return e}function Te(e,t,n){var r,a,o,i,s,l,u,f,c=e.d;for(i=1,o=c[0];o>=10;o/=10)i++;if(r=t-i,r<0)r+=Le,a=t,u=c[f=0];else{if(f=Math.ceil((r+1)/Le),o=c.length,f>=o)return e;for(u=o=c[f],i=1;o>=10;o/=10)i++;r%=Le,a=r-Le+i}if(n!==void 0&&(o=Ka(10,i-a-1),s=u/o%10|0,l=t<0||c[f+1]!==void 0||u%o,l=n<4?(s||l)&&(n==0||n==(e.s<0?3:2)):s>5||s==5&&(n==4||l||n==6&&(r>0?a>0?u/Ka(10,i-a):0:c[f-1])%10&1||n==(e.s<0?8:7))),t<1||!c[0])return l?(o=tt(e),c.length=1,t=t-o-1,c[0]=Ka(10,(Le-t%Le)%Le),e.e=Cs(-t/Le)||0):(c.length=1,c[0]=e.e=e.s=0),e;if(r==0?(c.length=f,o=1,f--):(c.length=f+1,o=Ka(10,Le-r),c[f]=a>0?(u/Ka(10,i-a)%Ka(10,a)|0)*o:0),l)for(;;)if(f==0){(c[0]+=o)==ut&&(c[0]=1,++e.e);break}else{if(c[f]+=o,c[f]!=ut)break;c[f--]=0,o=1}for(r=c.length;c[--r]===0;)c.pop();if(Be&&(e.e>Kf||e.e<-Kf))throw Error(Bg+tt(e));return e}function fP(e,t){var n,r,a,o,i,s,l,u,f,c,p=e.constructor,d=p.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new p(e),Be?Te(t,d):t;if(l=e.d,c=t.d,r=t.e,u=e.e,l=l.slice(),i=u-r,i){for(f=i<0,f?(n=l,i=-i,s=c.length):(n=c,r=u,s=l.length),a=Math.max(Math.ceil(d/Le),s)+2,i>a&&(i=a,n.length=1),n.reverse(),a=i;a--;)n.push(0);n.reverse()}else{for(a=l.length,s=c.length,f=a<s,f&&(s=a),a=0;a<s;a++)if(l[a]!=c[a]){f=l[a]<c[a];break}i=0}for(f&&(n=l,l=c,c=n,t.s=-t.s),s=l.length,a=c.length-s;a>0;--a)l[s++]=0;for(a=c.length;a>i;){if(l[--a]<c[a]){for(o=a;o&&l[--o]===0;)l[o]=ut-1;--l[o],l[a]+=ut}l[a]-=c[a]}for(;l[--s]===0;)l.pop();for(;l[0]===0;l.shift())--r;return l[0]?(t.d=l,t.e=r,Be?Te(t,d):t):new p(0)}function _o(e,t,n){var r,a=tt(e),o=or(e.d),i=o.length;return t?(n&&(r=n-i)>0?o=o.charAt(0)+"."+o.slice(1)+na(r):i>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(a<0?"e":"e+")+a):a<0?(o="0."+na(-a-1)+o,n&&(r=n-i)>0&&(o+=na(r))):a>=i?(o+=na(a+1-i),n&&(r=n-a-1)>0&&(o=o+"."+na(r))):((r=a+1)<i&&(o=o.slice(0,r)+"."+o.slice(r)),n&&(r=n-i)>0&&(a+1===i&&(o+="."),o+=na(r))),e.s<0?"-"+o:o}function nb(e,t){if(e.length>t)return e.length=t,!0}function pP(e){var t,n,r;function a(o){var i=this;if(!(i instanceof a))return new a(o);if(i.constructor=a,o instanceof a){i.s=o.s,i.e=o.e,i.d=(o=o.d)?o.slice():o;return}if(typeof o=="number"){if(o*0!==0)throw Error(po+o);if(o>0)i.s=1;else if(o<0)o=-o,i.s=-1;else{i.s=0,i.e=0,i.d=[0];return}if(o===~~o&&o<1e7){i.e=0,i.d=[o];return}return tb(i,o.toString())}else if(typeof o!="string")throw Error(po+o);if(o.charCodeAt(0)===45?(o=o.slice(1),i.s=-1):i.s=1,nX.test(o))tb(i,o);else throw Error(po+o)}if(a.prototype=Q,a.ROUND_UP=0,a.ROUND_DOWN=1,a.ROUND_CEIL=2,a.ROUND_FLOOR=3,a.ROUND_HALF_UP=4,a.ROUND_HALF_DOWN=5,a.ROUND_HALF_EVEN=6,a.ROUND_HALF_CEIL=7,a.ROUND_HALF_FLOOR=8,a.clone=pP,a.config=a.set=rX,e===void 0&&(e={}),e)for(r=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t<r.length;)e.hasOwnProperty(n=r[t++])||(e[n]=this[n]);return a.config(e),a}function rX(e){if(!e||typeof e!="object")throw Error(bn+"Object expected");var t,n,r,a=["precision",1,As,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(t=0;t<a.length;t+=3)if((r=e[n=a[t]])!==void 0)if(Cs(r)===r&&r>=a[t+1]&&r<=a[t+2])this[n]=r;else throw Error(po+n+": "+r);if((r=e[n="LN10"])!==void 0)if(r==Math.LN10)this[n]=new this(r);else throw Error(po+n+": "+r);return this}var Hg=pP(tX);Jt=new Hg(1);const Ae=Hg;function aX(e){return lX(e)||sX(e)||iX(e)||oX()}function oX(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function iX(e,t){if(e){if(typeof e=="string")return Hv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Hv(e,t)}}function sX(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function lX(e){if(Array.isArray(e))return Hv(e)}function Hv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var uX=function(t){return t},dP={},mP=function(t){return t===dP},rb=function(t){return function n(){return arguments.length===0||arguments.length===1&&mP(arguments.length<=0?void 0:arguments[0])?n:t.apply(void 0,arguments)}},cX=function e(t,n){return t===1?n:rb(function(){for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];var i=a.filter(function(s){return s!==dP}).length;return i>=t?n.apply(void 0,a):e(t-i,rb(function(){for(var s=arguments.length,l=new Array(s),u=0;u<s;u++)l[u]=arguments[u];var f=a.map(function(c){return mP(c)?l.shift():c});return n.apply(void 0,aX(f).concat(l))}))})},kd=function(t){return cX(t.length,t)},Gv=function(t,n){for(var r=[],a=t;a<n;++a)r[a-t]=a;return r},fX=kd(function(e,t){return Array.isArray(t)?t.map(e):Object.keys(t).map(function(n){return t[n]}).map(e)}),pX=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return uX;var a=n.reverse(),o=a[0],i=a.slice(1);return function(){return i.reduce(function(s,l){return l(s)},o.apply(void 0,arguments))}},Uv=function(t){return Array.isArray(t)?t.reverse():t.split("").reverse.join("")},hP=function(t){var n=null,r=null;return function(){for(var a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return n&&o.every(function(s,l){return s===n[l]})||(n=o,r=t.apply(void 0,o)),r}};function dX(e){var t;return e===0?t=1:t=Math.floor(new Ae(e).abs().log(10).toNumber())+1,t}function mX(e,t,n){for(var r=new Ae(e),a=0,o=[];r.lt(t)&&a<1e5;)o.push(r.toNumber()),r=r.add(n),a++;return o}var hX=kd(function(e,t,n){var r=+e,a=+t;return r+n*(a-r)}),vX=kd(function(e,t,n){var r=t-+e;return r=r||1/0,(n-e)/r}),yX=kd(function(e,t,n){var r=t-+e;return r=r||1/0,Math.max(0,Math.min(1,(n-e)/r))});const _d={rangeStep:mX,getDigitCount:dX,interpolateNumber:hX,uninterpolateNumber:vX,uninterpolateTruncation:yX};function Wv(e){return wX(e)||xX(e)||vP(e)||gX()}function gX(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function xX(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function wX(e){if(Array.isArray(e))return qv(e)}function Jl(e,t){return SX(e)||PX(e,t)||vP(e,t)||bX()}function bX(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function vP(e,t){if(e){if(typeof e=="string")return qv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return qv(e,t)}}function qv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function PX(e,t){if(!(typeof Symbol>"u"||!(Symbol.iterator in Object(e)))){var n=[],r=!0,a=!1,o=void 0;try{for(var i=e[Symbol.iterator](),s;!(r=(s=i.next()).done)&&(n.push(s.value),!(t&&n.length===t));r=!0);}catch(l){a=!0,o=l}finally{try{!r&&i.return!=null&&i.return()}finally{if(a)throw o}}return n}}function SX(e){if(Array.isArray(e))return e}function yP(e){var t=Jl(e,2),n=t[0],r=t[1],a=n,o=r;return n>r&&(a=r,o=n),[a,o]}function gP(e,t,n){if(e.lte(0))return new Ae(0);var r=_d.getDigitCount(e.toNumber()),a=new Ae(10).pow(r),o=e.div(a),i=r!==1?.05:.1,s=new Ae(Math.ceil(o.div(i).toNumber())).add(n).mul(i),l=s.mul(a);return t?l:new Ae(Math.ceil(l))}function OX(e,t,n){var r=1,a=new Ae(e);if(!a.isint()&&n){var o=Math.abs(e);o<1?(r=new Ae(10).pow(_d.getDigitCount(e)-1),a=new Ae(Math.floor(a.div(r).toNumber())).mul(r)):o>1&&(a=new Ae(Math.floor(e)))}else e===0?a=new Ae(Math.floor((t-1)/2)):n||(a=new Ae(Math.floor(e)));var i=Math.floor((t-1)/2),s=pX(fX(function(l){return a.add(new Ae(l-i).mul(r)).toNumber()}),Gv);return s(0,t)}function xP(e,t,n,r){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((t-e)/(n-1)))return{step:new Ae(0),tickMin:new Ae(0),tickMax:new Ae(0)};var o=gP(new Ae(t).sub(e).div(n-1),r,a),i;e<=0&&t>=0?i=new Ae(0):(i=new Ae(e).add(t).div(2),i=i.sub(new Ae(i).mod(o)));var s=Math.ceil(i.sub(e).div(o).toNumber()),l=Math.ceil(new Ae(t).sub(i).div(o).toNumber()),u=s+l+1;return u>n?xP(e,t,n,r,a+1):(u<n&&(l=t>0?l+(n-u):l,s=t>0?s:s+(n-u)),{step:o,tickMin:i.sub(new Ae(s).mul(o)),tickMax:i.add(new Ae(l).mul(o))})}function kX(e){var t=Jl(e,2),n=t[0],r=t[1],a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=Math.max(a,2),s=yP([n,r]),l=Jl(s,2),u=l[0],f=l[1];if(u===-1/0||f===1/0){var c=f===1/0?[u].concat(Wv(Gv(0,a-1).map(function(){return 1/0}))):[].concat(Wv(Gv(0,a-1).map(function(){return-1/0})),[f]);return n>r?Uv(c):c}if(u===f)return OX(u,a,o);var p=xP(u,f,i,o),d=p.step,h=p.tickMin,m=p.tickMax,g=_d.rangeStep(h,m.add(new Ae(.1).mul(d)),d);return n>r?Uv(g):g}function _X(e,t){var n=Jl(e,2),r=n[0],a=n[1],o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=yP([r,a]),s=Jl(i,2),l=s[0],u=s[1];if(l===-1/0||u===1/0)return[r,a];if(l===u)return[l];var f=Math.max(t,2),c=gP(new Ae(u).sub(l).div(f-1),o,0),p=[].concat(Wv(_d.rangeStep(new Ae(l),new Ae(u).sub(new Ae(.99).mul(c)),c)),[u]);return r>a?Uv(p):p}var AX=hP(kX),CX=hP(_X),EX="Invariant failed";function Ao(e,t){throw new Error(EX)}var TX=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function Gi(e){"@babel/helpers - typeof";return Gi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gi(e)}function Xf(){return Xf=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Xf.apply(this,arguments)}function jX(e,t){return RX(e)||MX(e,t)||NX(e,t)||$X()}function $X(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function NX(e,t){if(e){if(typeof e=="string")return ab(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ab(e,t)}}function ab(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function MX(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function RX(e){if(Array.isArray(e))return e}function IX(e,t){if(e==null)return{};var n=DX(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DX(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function LX(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function FX(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,PP(r.key),r)}}function zX(e,t,n){return t&&FX(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function BX(e,t,n){return t=Yf(t),HX(e,wP()?Reflect.construct(t,n||[],Yf(e).constructor):t.apply(e,n))}function HX(e,t){if(t&&(Gi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return GX(e)}function GX(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function wP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(wP=function(){return!!e})()}function Yf(e){return Yf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Yf(e)}function UX(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Vv(e,t)}function Vv(e,t){return Vv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Vv(e,t)}function bP(e,t,n){return t=PP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function PP(e){var t=WX(e,"string");return Gi(t)=="symbol"?t:t+""}function WX(e,t){if(Gi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Gi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Es=function(e){function t(){return LX(this,t),BX(this,t,arguments)}return UX(t,e),zX(t,[{key:"render",value:function(){var r=this.props,a=r.offset,o=r.layout,i=r.width,s=r.dataKey,l=r.data,u=r.dataPointFormatter,f=r.xAxis,c=r.yAxis,p=IX(r,TX),d=re(p,!1);this.props.direction==="x"&&f.type!=="number"&&Ao();var h=l.map(function(m){var g=u(m,s),v=g.x,y=g.y,x=g.value,P=g.errorVal;if(!P)return null;var w=[],S,O;if(Array.isArray(P)){var _=jX(P,2);S=_[0],O=_[1]}else S=O=P;if(o==="vertical"){var A=f.scale,j=y+a,E=j+i,T=j-i,N=A(x-S),M=A(x+O);w.push({x1:M,y1:E,x2:M,y2:T}),w.push({x1:N,y1:j,x2:M,y2:j}),w.push({x1:N,y1:E,x2:N,y2:T})}else if(o==="horizontal"){var I=c.scale,R=v+a,L=R-i,$=R+i,D=I(x-S),H=I(x+O);w.push({x1:L,y1:H,x2:$,y2:H}),w.push({x1:R,y1:D,x2:R,y2:H}),w.push({x1:L,y1:D,x2:$,y2:D})}return C.createElement(ye,Xf({className:"recharts-errorBar",key:"bar-".concat(w.map(function(W){return"".concat(W.x1,"-").concat(W.x2,"-").concat(W.y1,"-").concat(W.y2)}))},d),w.map(function(W){return C.createElement("line",Xf({},W,{key:"line-".concat(W.x1,"-").concat(W.x2,"-").concat(W.y1,"-").concat(W.y2)}))}))});return C.createElement(ye,{className:"recharts-errorBars"},h)}}])}(C.Component);bP(Es,"defaultProps",{stroke:"black",strokeWidth:1.5,width:5,offset:0,layout:"horizontal"});bP(Es,"displayName","ErrorBar");function eu(e){"@babel/helpers - typeof";return eu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},eu(e)}function ob(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ga(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?ob(Object(n),!0).forEach(function(r){qX(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ob(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function qX(e,t,n){return t=VX(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function VX(e){var t=KX(e,"string");return eu(t)=="symbol"?t:t+""}function KX(e,t){if(eu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(eu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var SP=function(t){var n=t.children,r=t.formattedGraphicalItems,a=t.legendWidth,o=t.legendContent,i=Qt(n,hi);if(!i)return null;var s=hi.defaultProps,l=s!==void 0?Ga(Ga({},s),i.props):{},u;return i.props&&i.props.payload?u=i.props&&i.props.payload:o==="children"?u=(r||[]).reduce(function(f,c){var p=c.item,d=c.props,h=d.sectors||d.data||[];return f.concat(h.map(function(m){return{type:i.props.iconType||p.props.legendType,value:m.name,color:m.fill,payload:m}}))},[]):u=(r||[]).map(function(f){var c=f.item,p=c.type.defaultProps,d=p!==void 0?Ga(Ga({},p),c.props):{},h=d.dataKey,m=d.name,g=d.legendType,v=d.hide;return{inactive:v,dataKey:h,type:l.iconType||g||"square",color:Gg(c),value:m||h,payload:d}}),Ga(Ga(Ga({},l),hi.getWithHeight(i,a)),{},{payload:u,item:i})};function tu(e){"@babel/helpers - typeof";return tu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tu(e)}function ib(e){return ZX(e)||QX(e)||YX(e)||XX()}function XX(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function YX(e,t){if(e){if(typeof e=="string")return Kv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Kv(e,t)}}function QX(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function ZX(e){if(Array.isArray(e))return Kv(e)}function Kv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function sb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ve(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?sb(Object(n),!0).forEach(function(r){yi(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):sb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function yi(e,t,n){return t=JX(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function JX(e){var t=eY(e,"string");return tu(t)=="symbol"?t:t+""}function eY(e,t){if(tu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(tu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function st(e,t,n){return te(e)||te(t)?n:it(t)?gn(e,t,n):oe(t)?t(e):n}function ml(e,t,n,r){var a=QK(e,function(s){return st(s,t)});if(n==="number"){var o=a.filter(function(s){return V(s)||parseFloat(s)});return o.length?[Od(o),da(o)]:[1/0,-1/0]}var i=r?a.filter(function(s){return!te(s)}):a;return i.map(function(s){return it(s)||s instanceof Date?s:""})}var tY=function(t){var n,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],a=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,i=-1,s=(n=r==null?void 0:r.length)!==null&&n!==void 0?n:0;if(s<=1)return 0;if(o&&o.axisType==="angleAxis"&&Math.abs(Math.abs(o.range[1]-o.range[0])-360)<=1e-6)for(var l=o.range,u=0;u<s;u++){var f=u>0?a[u-1].coordinate:a[s-1].coordinate,c=a[u].coordinate,p=u>=s-1?a[0].coordinate:a[u+1].coordinate,d=void 0;if(Dn(c-f)!==Dn(p-c)){var h=[];if(Dn(p-c)===Dn(l[1]-l[0])){d=p;var m=c+l[1]-l[0];h[0]=Math.min(m,(m+f)/2),h[1]=Math.max(m,(m+f)/2)}else{d=f;var g=p+l[1]-l[0];h[0]=Math.min(c,(g+c)/2),h[1]=Math.max(c,(g+c)/2)}var v=[Math.min(c,(d+c)/2),Math.max(c,(d+c)/2)];if(t>v[0]&&t<=v[1]||t>=h[0]&&t<=h[1]){i=a[u].index;break}}else{var y=Math.min(f,p),x=Math.max(f,p);if(t>(y+c)/2&&t<=(x+c)/2){i=a[u].index;break}}}else for(var P=0;P<s;P++)if(P===0&&t<=(r[P].coordinate+r[P+1].coordinate)/2||P>0&&P<s-1&&t>(r[P].coordinate+r[P-1].coordinate)/2&&t<=(r[P].coordinate+r[P+1].coordinate)/2||P===s-1&&t>(r[P].coordinate+r[P-1].coordinate)/2){i=r[P].index;break}return i},Gg=function(t){var n,r=t,a=r.type.displayName,o=(n=t.type)!==null&&n!==void 0&&n.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,i=o.stroke,s=o.fill,l;switch(a){case"Line":l=i;break;case"Area":case"Radar":l=i&&i!=="none"?i:s;break;default:l=s;break}return l},nY=function(t){var n=t.barSize,r=t.totalSize,a=t.stackGroups,o=a===void 0?{}:a;if(!o)return{};for(var i={},s=Object.keys(o),l=0,u=s.length;l<u;l++)for(var f=o[s[l]].stackGroups,c=Object.keys(f),p=0,d=c.length;p<d;p++){var h=f[c[p]],m=h.items,g=h.cateAxisId,v=m.filter(function(O){return jr(O.type).indexOf("Bar")>=0});if(v&&v.length){var y=v[0].type.defaultProps,x=y!==void 0?Ve(Ve({},y),v[0].props):v[0].props,P=x.barSize,w=x[g];i[w]||(i[w]=[]);var S=te(P)?n:P;i[w].push({item:v[0],stackList:v.slice(1),barSize:te(S)?void 0:Oo(S,r,0)})}}return i},rY=function(t){var n=t.barGap,r=t.barCategoryGap,a=t.bandSize,o=t.sizeList,i=o===void 0?[]:o,s=t.maxBarSize,l=i.length;if(l<1)return null;var u=Oo(n,a,0,!0),f,c=[];if(i[0].barSize===+i[0].barSize){var p=!1,d=a/l,h=i.reduce(function(P,w){return P+w.barSize||0},0);h+=(l-1)*u,h>=a&&(h-=(l-1)*u,u=0),h>=a&&d>0&&(p=!0,d*=.9,h=l*d);var m=(a-h)/2>>0,g={offset:m-u,size:0};f=i.reduce(function(P,w){var S={item:w.item,position:{offset:g.offset+g.size+u,size:p?d:w.barSize}},O=[].concat(ib(P),[S]);return g=O[O.length-1].position,w.stackList&&w.stackList.length&&w.stackList.forEach(function(_){O.push({item:_,position:g})}),O},c)}else{var v=Oo(r,a,0,!0);a-2*v-(l-1)*u<=0&&(u=0);var y=(a-2*v-(l-1)*u)/l;y>1&&(y>>=0);var x=s===+s?Math.min(y,s):y;f=i.reduce(function(P,w,S){var O=[].concat(ib(P),[{item:w.item,position:{offset:v+(y+u)*S+(y-x)/2,size:x}}]);return w.stackList&&w.stackList.length&&w.stackList.forEach(function(_){O.push({item:_,position:O[O.length-1].position})}),O},c)}return f},aY=function(t,n,r,a){var o=r.children,i=r.width,s=r.margin,l=i-(s.left||0)-(s.right||0),u=SP({children:o,legendWidth:l});if(u){var f=a||{},c=f.width,p=f.height,d=u.align,h=u.verticalAlign,m=u.layout;if((m==="vertical"||m==="horizontal"&&h==="middle")&&d!=="center"&&V(t[d]))return Ve(Ve({},t),{},yi({},d,t[d]+(c||0)));if((m==="horizontal"||m==="vertical"&&d==="center")&&h!=="middle"&&V(t[h]))return Ve(Ve({},t),{},yi({},h,t[h]+(p||0)))}return t},oY=function(t,n,r){return te(n)?!0:t==="horizontal"?n==="yAxis":t==="vertical"||r==="x"?n==="xAxis":r==="y"?n==="yAxis":!0},OP=function(t,n,r,a,o){var i=n.props.children,s=qt(i,Es).filter(function(u){return oY(a,o,u.props.direction)});if(s&&s.length){var l=s.map(function(u){return u.props.dataKey});return t.reduce(function(u,f){var c=st(f,r);if(te(c))return u;var p=Array.isArray(c)?[Od(c),da(c)]:[c,c],d=l.reduce(function(h,m){var g=st(f,m,0),v=p[0]-Math.abs(Array.isArray(g)?g[0]:g),y=p[1]+Math.abs(Array.isArray(g)?g[1]:g);return[Math.min(v,h[0]),Math.max(y,h[1])]},[1/0,-1/0]);return[Math.min(d[0],u[0]),Math.max(d[1],u[1])]},[1/0,-1/0])}return null},iY=function(t,n,r,a,o){var i=n.map(function(s){return OP(t,s,r,o,a)}).filter(function(s){return!te(s)});return i&&i.length?i.reduce(function(s,l){return[Math.min(s[0],l[0]),Math.max(s[1],l[1])]},[1/0,-1/0]):null},kP=function(t,n,r,a,o){var i=n.map(function(l){var u=l.props.dataKey;return r==="number"&&u&&OP(t,l,u,a)||ml(t,u,r,o)});if(r==="number")return i.reduce(function(l,u){return[Math.min(l[0],u[0]),Math.max(l[1],u[1])]},[1/0,-1/0]);var s={};return i.reduce(function(l,u){for(var f=0,c=u.length;f<c;f++)s[u[f]]||(s[u[f]]=!0,l.push(u[f]));return l},[])},_P=function(t,n){return t==="horizontal"&&n==="xAxis"||t==="vertical"&&n==="yAxis"||t==="centric"&&n==="angleAxis"||t==="radial"&&n==="radiusAxis"},AP=function(t,n,r,a){if(a)return t.map(function(l){return l.coordinate});var o,i,s=t.map(function(l){return l.coordinate===n&&(o=!0),l.coordinate===r&&(i=!0),l.coordinate});return o||s.push(n),i||s.push(r),s},Er=function(t,n,r){if(!t)return null;var a=t.scale,o=t.duplicateDomain,i=t.type,s=t.range,l=t.realScaleType==="scaleBand"?a.bandwidth()/2:2,u=(n||r)&&i==="category"&&a.bandwidth?a.bandwidth()/l:0;if(u=t.axisType==="angleAxis"&&(s==null?void 0:s.length)>=2?Dn(s[0]-s[1])*2*u:u,n&&(t.ticks||t.niceTicks)){var f=(t.ticks||t.niceTicks).map(function(c){var p=o?o.indexOf(c):c;return{coordinate:a(p)+u,value:c,offset:u}});return f.filter(function(c){return!Ps(c.coordinate)})}return t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map(function(c,p){return{coordinate:a(c)+u,value:c,index:p,offset:u}}):a.ticks&&!r?a.ticks(t.tickCount).map(function(c){return{coordinate:a(c)+u,value:c,offset:u}}):a.domain().map(function(c,p){return{coordinate:a(c)+u,value:o?o[c]:c,index:p,offset:u}})},Xm=new WeakMap,gc=function(t,n){if(typeof n!="function")return t;Xm.has(t)||Xm.set(t,new WeakMap);var r=Xm.get(t);if(r.has(n))return r.get(n);var a=function(){t.apply(void 0,arguments),n.apply(void 0,arguments)};return r.set(n,a),a},sY=function(t,n,r){var a=t.scale,o=t.type,i=t.layout,s=t.axisType;if(a==="auto")return i==="radial"&&s==="radiusAxis"?{scale:Vl(),realScaleType:"band"}:i==="radial"&&s==="angleAxis"?{scale:Uf(),realScaleType:"linear"}:o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?{scale:dl(),realScaleType:"point"}:o==="category"?{scale:Vl(),realScaleType:"band"}:{scale:Uf(),realScaleType:"linear"};if(So(a)){var l="scale".concat(cd(a));return{scale:(eb[l]||dl)(),realScaleType:eb[l]?l:"point"}}return oe(a)?{scale:a}:{scale:dl(),realScaleType:"point"}},lb=1e-4,lY=function(t){var n=t.domain();if(!(!n||n.length<=2)){var r=n.length,a=t.range(),o=Math.min(a[0],a[1])-lb,i=Math.max(a[0],a[1])+lb,s=t(n[0]),l=t(n[r-1]);(s<o||s>i||l<o||l>i)&&t.domain([n[0],n[r-1]])}},uY=function(t,n){if(!t)return null;for(var r=0,a=t.length;r<a;r++)if(t[r].item===n)return t[r].position;return null},cY=function(t,n){if(!n||n.length!==2||!V(n[0])||!V(n[1]))return t;var r=Math.min(n[0],n[1]),a=Math.max(n[0],n[1]),o=[t[0],t[1]];return(!V(t[0])||t[0]<r)&&(o[0]=r),(!V(t[1])||t[1]>a)&&(o[1]=a),o[0]>a&&(o[0]=a),o[1]<r&&(o[1]=r),o},fY=function(t){var n=t.length;if(!(n<=0))for(var r=0,a=t[0].length;r<a;++r)for(var o=0,i=0,s=0;s<n;++s){var l=Ps(t[s][r][1])?t[s][r][0]:t[s][r][1];l>=0?(t[s][r][0]=o,t[s][r][1]=o+l,o=t[s][r][1]):(t[s][r][0]=i,t[s][r][1]=i+l,i=t[s][r][1])}},pY=function(t){var n=t.length;if(!(n<=0))for(var r=0,a=t[0].length;r<a;++r)for(var o=0,i=0;i<n;++i){var s=Ps(t[i][r][1])?t[i][r][0]:t[i][r][1];s>=0?(t[i][r][0]=o,t[i][r][1]=o+s,o=t[i][r][1]):(t[i][r][0]=0,t[i][r][1]=0)}},dY={sign:fY,expand:AI,none:Ri,silhouette:CI,wiggle:EI,positive:pY},mY=function(t,n,r){var a=n.map(function(s){return s.props.dataKey}),o=dY[r],i=_I().keys(a).value(function(s,l){return+st(s,l,0)}).order(xv).offset(o);return i(t)},hY=function(t,n,r,a,o,i){if(!t)return null;var s=i?n.reverse():n,l={},u=s.reduce(function(c,p){var d,h=(d=p.type)!==null&&d!==void 0&&d.defaultProps?Ve(Ve({},p.type.defaultProps),p.props):p.props,m=h.stackId,g=h.hide;if(g)return c;var v=h[r],y=c[v]||{hasStack:!1,stackGroups:{}};if(it(m)){var x=y.stackGroups[m]||{numericAxisId:r,cateAxisId:a,items:[]};x.items.push(p),y.hasStack=!0,y.stackGroups[m]=x}else y.stackGroups[$o("_stackId_")]={numericAxisId:r,cateAxisId:a,items:[p]};return Ve(Ve({},c),{},yi({},v,y))},l),f={};return Object.keys(u).reduce(function(c,p){var d=u[p];if(d.hasStack){var h={};d.stackGroups=Object.keys(d.stackGroups).reduce(function(m,g){var v=d.stackGroups[g];return Ve(Ve({},m),{},yi({},g,{numericAxisId:r,cateAxisId:a,items:v.items,stackedData:mY(t,v.items,o)}))},h)}return Ve(Ve({},c),{},yi({},p,d))},f)},vY=function(t,n){var r=n.realScaleType,a=n.type,o=n.tickCount,i=n.originalDomain,s=n.allowDecimals,l=r||n.scale;if(l!=="auto"&&l!=="linear")return null;if(o&&a==="number"&&i&&(i[0]==="auto"||i[1]==="auto")){var u=t.domain();if(!u.length)return null;var f=AX(u,o,s);return t.domain([Od(f),da(f)]),{niceTicks:f}}if(o&&a==="number"){var c=t.domain(),p=CX(c,o,s);return{niceTicks:p}}return null};function Ui(e){var t=e.axis,n=e.ticks,r=e.bandSize,a=e.entry,o=e.index,i=e.dataKey;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!te(a[t.dataKey])){var s=Pf(n,"value",a[t.dataKey]);if(s)return s.coordinate+r/2}return n[o]?n[o].coordinate+r/2:null}var l=st(a,te(i)?t.dataKey:i);return te(l)?null:t.scale(l)}var ub=function(t){var n=t.axis,r=t.ticks,a=t.offset,o=t.bandSize,i=t.entry,s=t.index;if(n.type==="category")return r[s]?r[s].coordinate+a:null;var l=st(i,n.dataKey,n.domain[s]);return te(l)?null:n.scale(l)-o/2+a},yY=function(t){var n=t.numericAxis,r=n.scale.domain();if(n.type==="number"){var a=Math.min(r[0],r[1]),o=Math.max(r[0],r[1]);return a<=0&&o>=0?0:o<0?o:a}return r[0]},gY=function(t,n){var r,a=(r=t.type)!==null&&r!==void 0&&r.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,o=a.stackId;if(it(o)){var i=n[o];if(i){var s=i.items.indexOf(t);return s>=0?i.stackedData[s]:null}}return null},xY=function(t){return t.reduce(function(n,r){return[Od(r.concat([n[0]]).filter(V)),da(r.concat([n[1]]).filter(V))]},[1/0,-1/0])},CP=function(t,n,r){return Object.keys(t).reduce(function(a,o){var i=t[o],s=i.stackedData,l=s.reduce(function(u,f){var c=xY(f.slice(n,r+1));return[Math.min(u[0],c[0]),Math.max(u[1],c[1])]},[1/0,-1/0]);return[Math.min(l[0],a[0]),Math.max(l[1],a[1])]},[1/0,-1/0]).map(function(a){return a===1/0||a===-1/0?0:a})},cb=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,fb=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Xv=function(t,n,r){if(oe(t))return t(n,r);if(!Array.isArray(t))return n;var a=[];if(V(t[0]))a[0]=r?t[0]:Math.min(t[0],n[0]);else if(cb.test(t[0])){var o=+cb.exec(t[0])[1];a[0]=n[0]-o}else oe(t[0])?a[0]=t[0](n[0]):a[0]=n[0];if(V(t[1]))a[1]=r?t[1]:Math.max(t[1],n[1]);else if(fb.test(t[1])){var i=+fb.exec(t[1])[1];a[1]=n[1]+i}else oe(t[1])?a[1]=t[1](n[1]):a[1]=n[1];return a},Qf=function(t,n,r){if(t&&t.scale&&t.scale.bandwidth){var a=t.scale.bandwidth();if(!r||a>0)return a}if(t&&n&&n.length>=2){for(var o=vg(n,function(c){return c.coordinate}),i=1/0,s=1,l=o.length;s<l;s++){var u=o[s],f=o[s-1];i=Math.min((u.coordinate||0)-(f.coordinate||0),i)}return i===1/0?0:i}return r?void 0:0},pb=function(t,n,r){return!t||!t.length||ko(t,gn(r,"type.defaultProps.domain"))?n:t},EP=function(t,n){var r=t.type.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,a=r.dataKey,o=r.name,i=r.unit,s=r.formatter,l=r.tooltipType,u=r.chartType,f=r.hide;return Ve(Ve({},re(t,!1)),{},{dataKey:a,unit:i,formatter:s,name:o||a,color:Gg(t),value:st(n,a),type:l,payload:n,chartType:u,hide:f})};function nu(e){"@babel/helpers - typeof";return nu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},nu(e)}function db(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function mb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?db(Object(n),!0).forEach(function(r){wY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):db(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function wY(e,t,n){return t=bY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bY(e){var t=PY(e,"string");return nu(t)=="symbol"?t:t+""}function PY(e,t){if(nu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(nu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Zf=Math.PI/180,SY=function(t){return t*180/Math.PI},vt=function(t,n,r,a){return{x:t+Math.cos(-Zf*a)*r,y:n+Math.sin(-Zf*a)*r}},OY=function(t,n){var r=t.x,a=t.y,o=n.x,i=n.y;return Math.sqrt(Math.pow(r-o,2)+Math.pow(a-i,2))},kY=function(t,n){var r=t.x,a=t.y,o=n.cx,i=n.cy,s=OY({x:r,y:a},{x:o,y:i});if(s<=0)return{radius:s};var l=(r-o)/s,u=Math.acos(l);return a>i&&(u=2*Math.PI-u),{radius:s,angle:SY(u),angleInRadian:u}},_Y=function(t){var n=t.startAngle,r=t.endAngle,a=Math.floor(n/360),o=Math.floor(r/360),i=Math.min(a,o);return{startAngle:n-i*360,endAngle:r-i*360}},AY=function(t,n){var r=n.startAngle,a=n.endAngle,o=Math.floor(r/360),i=Math.floor(a/360),s=Math.min(o,i);return t+s*360},hb=function(t,n){var r=t.x,a=t.y,o=kY({x:r,y:a},n),i=o.radius,s=o.angle,l=n.innerRadius,u=n.outerRadius;if(i<l||i>u)return!1;if(i===0)return!0;var f=_Y(n),c=f.startAngle,p=f.endAngle,d=s,h;if(c<=p){for(;d>p;)d-=360;for(;d<c;)d+=360;h=d>=c&&d<=p}else{for(;d>c;)d-=360;for(;d<p;)d+=360;h=d>=p&&d<=c}return h?mb(mb({},n),{},{radius:i,angle:AY(d,n)}):null};function ru(e){"@babel/helpers - typeof";return ru=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ru(e)}var CY=["offset"];function EY(e){return NY(e)||$Y(e)||jY(e)||TY()}function TY(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function jY(e,t){if(e){if(typeof e=="string")return Yv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yv(e,t)}}function $Y(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function NY(e){if(Array.isArray(e))return Yv(e)}function Yv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function MY(e,t){if(e==null)return{};var n=RY(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RY(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function vb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function rt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?vb(Object(n),!0).forEach(function(r){IY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function IY(e,t,n){return t=DY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function DY(e){var t=LY(e,"string");return ru(t)=="symbol"?t:t+""}function LY(e,t){if(ru(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ru(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function au(){return au=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},au.apply(this,arguments)}var FY=function(t){var n=t.value,r=t.formatter,a=te(t.children)?n:t.children;return oe(r)?r(a):a},zY=function(t,n){var r=Dn(n-t),a=Math.min(Math.abs(n-t),360);return r*a},BY=function(t,n,r){var a=t.position,o=t.viewBox,i=t.offset,s=t.className,l=o,u=l.cx,f=l.cy,c=l.innerRadius,p=l.outerRadius,d=l.startAngle,h=l.endAngle,m=l.clockWise,g=(c+p)/2,v=zY(d,h),y=v>=0?1:-1,x,P;a==="insideStart"?(x=d+y*i,P=m):a==="insideEnd"?(x=h-y*i,P=!m):a==="end"&&(x=h+y*i,P=m),P=v<=0?P:!P;var w=vt(u,f,g,x),S=vt(u,f,g,x+(P?1:-1)*359),O="M".concat(w.x,",").concat(w.y,`
+       height and width.`,I,R,i,l,p,c,n);var L=!Array.isArray(d)&&jr(d.type).endsWith("Chart");return A.Children.map(d,function($){return A.isValidElement($)?k.cloneElement($,dc({width:I,height:R},L?{style:dc({height:"100%",width:"100%",maxHeight:R,maxWidth:I},$.props.style)}:{})):$})},[n,d,l,f,c,p,C,i]);return A.createElement("div",{id:g?"".concat(g):void 0,className:ue("recharts-responsive-container",v),style:dc(dc({},P),{},{width:i,height:l,minWidth:p,minHeight:c,maxHeight:f}),ref:w},T)}),gg=function(t){return null};gg.displayName="Cell";function Wl(e){"@babel/helpers - typeof";return Wl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wl(e)}function s3(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function N0(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?s3(Object(n),!0).forEach(function(r){RW(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s3(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function RW(e,t,n){return t=IW(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function IW(e){var t=DW(e,"string");return Wl(t)=="symbol"?t:t+""}function DW(e,t){if(Wl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Wl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var zo={widthCache:{},cacheCount:0},LW=2e3,FW={position:"absolute",top:"-20000px",left:0,padding:0,margin:0,border:"none",whiteSpace:"pre"},l3="recharts_measurement_span";function zW(e){var t=N0({},e);return Object.keys(t).forEach(function(n){t[n]||delete t[n]}),t}var fl=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||Da.isSsr)return{width:0,height:0};var r=zW(n),a=JSON.stringify({text:t,copyStyle:r});if(zo.widthCache[a])return zo.widthCache[a];try{var o=document.getElementById(l3);o||(o=document.createElement("span"),o.setAttribute("id",l3),o.setAttribute("aria-hidden","true"),document.body.appendChild(o));var i=N0(N0({},FW),r);Object.assign(o.style,i),o.textContent="".concat(t);var s=o.getBoundingClientRect(),l={width:s.width,height:s.height};return zo.widthCache[a]=l,++zo.cacheCount>LW&&(zo.cacheCount=0,zo.widthCache={}),l}catch{return{width:0,height:0}}},BW=function(t){return{top:t.top+window.scrollY-document.documentElement.clientTop,left:t.left+window.scrollX-document.documentElement.clientLeft}};function ql(e){"@babel/helpers - typeof";return ql=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ql(e)}function Rp(e,t){return WW(e)||UW(e,t)||GW(e,t)||HW()}function HW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function GW(e,t){if(e){if(typeof e=="string")return u3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u3(e,t)}}function u3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function UW(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function WW(e){if(Array.isArray(e))return e}function qW(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c3(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,KW(r.key),r)}}function VW(e,t,n){return t&&c3(e.prototype,t),n&&c3(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function KW(e){var t=XW(e,"string");return ql(t)=="symbol"?t:t+""}function XW(e,t){if(ql(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ql(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var p3=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,f3=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,YW=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,QW=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,C7={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},ZW=Object.keys(C7),ni="NaN";function JW(e,t){return e*C7[t]}var mc=function(){function e(t,n){qW(this,e),this.num=t,this.unit=n,this.num=t,this.unit=n,Number.isNaN(t)&&(this.unit=""),n!==""&&!YW.test(n)&&(this.num=NaN,this.unit=""),ZW.includes(n)&&(this.num=JW(t,n),this.unit="px")}return VW(e,[{key:"add",value:function(n){return this.unit!==n.unit?new e(NaN,""):new e(this.num+n.num,this.unit)}},{key:"subtract",value:function(n){return this.unit!==n.unit?new e(NaN,""):new e(this.num-n.num,this.unit)}},{key:"multiply",value:function(n){return this.unit!==""&&n.unit!==""&&this.unit!==n.unit?new e(NaN,""):new e(this.num*n.num,this.unit||n.unit)}},{key:"divide",value:function(n){return this.unit!==""&&n.unit!==""&&this.unit!==n.unit?new e(NaN,""):new e(this.num/n.num,this.unit||n.unit)}},{key:"toString",value:function(){return"".concat(this.num).concat(this.unit)}},{key:"isNaN",value:function(){return Number.isNaN(this.num)}}],[{key:"parse",value:function(n){var r,a=(r=QW.exec(n))!==null&&r!==void 0?r:[],o=Rp(a,3),i=o[1],s=o[2];return new e(parseFloat(i),s??"")}}])}();function A7(e){if(e.includes(ni))return ni;for(var t=e;t.includes("*")||t.includes("/");){var n,r=(n=p3.exec(t))!==null&&n!==void 0?n:[],a=Rp(r,4),o=a[1],i=a[2],s=a[3],l=mc.parse(o??""),u=mc.parse(s??""),p=i==="*"?l.multiply(u):l.divide(u);if(p.isNaN())return ni;t=t.replace(p3,p.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var c,f=(c=f3.exec(t))!==null&&c!==void 0?c:[],d=Rp(f,4),h=d[1],m=d[2],g=d[3],v=mc.parse(h??""),y=mc.parse(g??""),x=m==="+"?v.add(y):v.subtract(y);if(x.isNaN())return ni;t=t.replace(f3,x.toString())}return t}var d3=/\(([^()]*)\)/;function eq(e){for(var t=e;t.includes("(");){var n=d3.exec(t),r=Rp(n,2),a=r[1];t=t.replace(d3,A7(a))}return t}function tq(e){var t=e.replace(/\s+/g,"");return t=eq(t),t=A7(t),t}function nq(e){try{return tq(e)}catch{return ni}}function zm(e){var t=nq(e.slice(5,-1));return t===ni?"":t}var rq=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],aq=["dx","dy","angle","className","breakAll"];function M0(){return M0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},M0.apply(this,arguments)}function m3(e,t){if(e==null)return{};var n=oq(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oq(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function h3(e,t){return uq(e)||lq(e,t)||sq(e,t)||iq()}function iq(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function sq(e,t){if(e){if(typeof e=="string")return v3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return v3(e,t)}}function v3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function lq(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function uq(e){if(Array.isArray(e))return e}var E7=/[ \f\n\r\t\v\u2028\u2029]+/,T7=function(t){var n=t.children,r=t.breakAll,a=t.style;try{var o=[];te(n)||(r?o=n.toString().split(""):o=n.toString().split(E7));var i=o.map(function(l){return{word:l,width:fl(l,a).width}}),s=r?0:fl(" ",a).width;return{wordsWithComputedWidth:i,spaceWidth:s}}catch{return null}},cq=function(t,n,r,a,o){var i=t.maxLines,s=t.children,l=t.style,u=t.breakAll,p=V(i),c=s,f=function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return I.reduce(function(R,L){var $=L.word,D=L.width,H=R[R.length-1];if(H&&(a==null||o||H.width+D+r<Number(a)))H.words.push($),H.width+=D+r;else{var W={words:[$],width:D};R.push(W)}return R},[])},d=f(n),h=function(I){return I.reduce(function(R,L){return R.width>L.width?R:L})};if(!p)return d;for(var m="…",g=function(I){var R=c.slice(0,I),L=T7({breakAll:u,style:l,children:R+m}).wordsWithComputedWidth,$=f(L),D=$.length>i||h($).width>Number(a);return[D,$]},v=0,y=c.length-1,x=0,P;v<=y&&x<=c.length-1;){var w=Math.floor((v+y)/2),S=w-1,O=g(S),_=h3(O,2),C=_[0],j=_[1],E=g(w),T=h3(E,1),N=T[0];if(!C&&!N&&(v=w+1),C&&N&&(y=w-1),!C&&N){P=j;break}x++}return P||d},y3=function(t){var n=te(t)?[]:t.toString().split(E7);return[{words:n}]},pq=function(t){var n=t.width,r=t.scaleToFit,a=t.children,o=t.style,i=t.breakAll,s=t.maxLines;if((n||r)&&!Da.isSsr){var l,u,p=T7({breakAll:i,children:a,style:o});if(p){var c=p.wordsWithComputedWidth,f=p.spaceWidth;l=c,u=f}else return y3(a);return cq({breakAll:i,children:a,maxLines:s,style:o},l,u,n,r)}return y3(a)},g3="#808080",Ip=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,o=a===void 0?0:a,i=t.lineHeight,s=i===void 0?"1em":i,l=t.capHeight,u=l===void 0?"0.71em":l,p=t.scaleToFit,c=p===void 0?!1:p,f=t.textAnchor,d=f===void 0?"start":f,h=t.verticalAnchor,m=h===void 0?"end":h,g=t.fill,v=g===void 0?g3:g,y=m3(t,rq),x=k.useMemo(function(){return pq({breakAll:y.breakAll,children:y.children,maxLines:y.maxLines,scaleToFit:c,style:y.style,width:y.width})},[y.breakAll,y.children,y.maxLines,c,y.style,y.width]),P=y.dx,w=y.dy,S=y.angle,O=y.className,_=y.breakAll,C=m3(y,aq);if(!it(r)||!it(o))return null;var j=r+(V(P)?P:0),E=o+(V(w)?w:0),T;switch(m){case"start":T=zm("calc(".concat(u,")"));break;case"middle":T=zm("calc(".concat((x.length-1)/2," * -").concat(s," + (").concat(u," / 2))"));break;default:T=zm("calc(".concat(x.length-1," * -").concat(s,")"));break}var N=[];if(c){var M=x[0].width,I=y.width;N.push("scale(".concat((V(I)?I/M:1)/M,")"))}return S&&N.push("rotate(".concat(S,", ").concat(j,", ").concat(E,")")),N.length&&(C.transform=N.join(" ")),A.createElement("text",M0({},re(C,!0),{x:j,y:E,className:ue("recharts-text",O),textAnchor:d,fill:v.includes("url")?g3:v}),x.map(function(R,L){var $=R.words.join(_?"":" ");return A.createElement("tspan",{x:j,dy:L===0?T:s,key:"".concat($,"-").concat(L)},$)}))};function Oa(e,t){return e==null||t==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function fq(e,t){return e==null||t==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function xg(e){let t,n,r;e.length!==2?(t=Oa,n=(s,l)=>Oa(e(s),l),r=(s,l)=>e(s)-l):(t=e===Oa||e===fq?e:dq,n=e,r=e);function a(s,l,u=0,p=s.length){if(u<p){if(t(l,l)!==0)return p;do{const c=u+p>>>1;n(s[c],l)<0?u=c+1:p=c}while(u<p)}return u}function o(s,l,u=0,p=s.length){if(u<p){if(t(l,l)!==0)return p;do{const c=u+p>>>1;n(s[c],l)<=0?u=c+1:p=c}while(u<p)}return u}function i(s,l,u=0,p=s.length){const c=a(s,l,u,p-1);return c>u&&r(s[c-1],l)>-r(s[c],l)?c-1:c}return{left:a,center:i,right:o}}function dq(){return 0}function j7(e){return e===null?NaN:+e}function*mq(e,t){for(let n of e)n!=null&&(n=+n)>=n&&(yield n)}const hq=xg(Oa),Mu=hq.right;xg(j7).center;class x3 extends Map{constructor(t,n=gq){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),t!=null)for(const[r,a]of t)this.set(r,a)}get(t){return super.get(w3(this,t))}has(t){return super.has(w3(this,t))}set(t,n){return super.set(vq(this,t),n)}delete(t){return super.delete(yq(this,t))}}function w3({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):n}function vq({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function yq({_intern:e,_key:t},n){const r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function gq(e){return e!==null&&typeof e=="object"?e.valueOf():e}function xq(e=Oa){if(e===Oa)return $7;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,n)=>{const r=e(t,n);return r||r===0?r:(e(n,n)===0)-(e(t,t)===0)}}function $7(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(e<t?-1:e>t?1:0)}const wq=Math.sqrt(50),bq=Math.sqrt(10),Pq=Math.sqrt(2);function Dp(e,t,n){const r=(t-e)/Math.max(0,n),a=Math.floor(Math.log10(r)),o=r/Math.pow(10,a),i=o>=wq?10:o>=bq?5:o>=Pq?2:1;let s,l,u;return a<0?(u=Math.pow(10,-a)/i,s=Math.round(e*u),l=Math.round(t*u),s/u<e&&++s,l/u>t&&--l,u=-u):(u=Math.pow(10,a)*i,s=Math.round(e/u),l=Math.round(t/u),s*u<e&&++s,l*u>t&&--l),l<s&&.5<=n&&n<2?Dp(e,t,n*2):[s,l,u]}function R0(e,t,n){if(t=+t,e=+e,n=+n,!(n>0))return[];if(e===t)return[e];const r=t<e,[a,o,i]=r?Dp(t,e,n):Dp(e,t,n);if(!(o>=a))return[];const s=o-a+1,l=new Array(s);if(r)if(i<0)for(let u=0;u<s;++u)l[u]=(o-u)/-i;else for(let u=0;u<s;++u)l[u]=(o-u)*i;else if(i<0)for(let u=0;u<s;++u)l[u]=(a+u)/-i;else for(let u=0;u<s;++u)l[u]=(a+u)*i;return l}function I0(e,t,n){return t=+t,e=+e,n=+n,Dp(e,t,n)[2]}function D0(e,t,n){t=+t,e=+e,n=+n;const r=t<e,a=r?I0(t,e,n):I0(e,t,n);return(r?-1:1)*(a<0?1/-a:a)}function b3(e,t){let n;for(const r of e)r!=null&&(n<r||n===void 0&&r>=r)&&(n=r);return n}function P3(e,t){let n;for(const r of e)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);return n}function N7(e,t,n=0,r=1/0,a){if(t=Math.floor(t),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(e.length-1,r)),!(n<=t&&t<=r))return e;for(a=a===void 0?$7:xq(a);r>n;){if(r-n>600){const l=r-n+1,u=t-n+1,p=Math.log(l),c=.5*Math.exp(2*p/3),f=.5*Math.sqrt(p*c*(l-c)/l)*(u-l/2<0?-1:1),d=Math.max(n,Math.floor(t-u*c/l+f)),h=Math.min(r,Math.floor(t+(l-u)*c/l+f));N7(e,t,d,h,a)}const o=e[t];let i=n,s=r;for(Gs(e,n,t),a(e[r],o)>0&&Gs(e,n,r);i<s;){for(Gs(e,i,s),++i,--s;a(e[i],o)<0;)++i;for(;a(e[s],o)>0;)--s}a(e[n],o)===0?Gs(e,n,s):(++s,Gs(e,s,r)),s<=t&&(n=s+1),t<=s&&(r=s-1)}return e}function Gs(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function Sq(e,t,n){if(e=Float64Array.from(mq(e)),!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return P3(e);if(t>=1)return b3(e);var r,a=(r-1)*t,o=Math.floor(a),i=b3(N7(e,o).subarray(0,o+1)),s=P3(e.subarray(o+1));return i+(s-i)*(a-o)}}function Oq(e,t,n=j7){if(!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return+n(e[0],0,e);if(t>=1)return+n(e[r-1],r-1,e);var r,a=(r-1)*t,o=Math.floor(a),i=+n(e[o],o,e),s=+n(e[o+1],o+1,e);return i+(s-i)*(a-o)}}function kq(e,t,n){e=+e,t=+t,n=(a=arguments.length)<2?(t=e,e=0,1):a<3?1:+n;for(var r=-1,a=Math.max(0,Math.ceil((t-e)/n))|0,o=new Array(a);++r<a;)o[r]=e+r*n;return o}function Sn(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}function qr(e,t){switch(arguments.length){case 0:break;case 1:{typeof e=="function"?this.interpolator(e):this.range(e);break}default:{this.domain(e),typeof t=="function"?this.interpolator(t):this.range(t);break}}return this}const L0=Symbol("implicit");function wg(){var e=new x3,t=[],n=[],r=L0;function a(o){let i=e.get(o);if(i===void 0){if(r!==L0)return r;e.set(o,i=t.push(o)-1)}return n[i%n.length]}return a.domain=function(o){if(!arguments.length)return t.slice();t=[],e=new x3;for(const i of o)e.has(i)||e.set(i,t.push(i)-1);return a},a.range=function(o){return arguments.length?(n=Array.from(o),a):n.slice()},a.unknown=function(o){return arguments.length?(r=o,a):r},a.copy=function(){return wg(t,n).unknown(r)},Sn.apply(a,arguments),a}function Vl(){var e=wg().unknown(void 0),t=e.domain,n=e.range,r=0,a=1,o,i,s=!1,l=0,u=0,p=.5;delete e.unknown;function c(){var f=t().length,d=a<r,h=d?a:r,m=d?r:a;o=(m-h)/Math.max(1,f-l+u*2),s&&(o=Math.floor(o)),h+=(m-h-o*(f-l))*p,i=o*(1-l),s&&(h=Math.round(h),i=Math.round(i));var g=kq(f).map(function(v){return h+o*v});return n(d?g.reverse():g)}return e.domain=function(f){return arguments.length?(t(f),c()):t()},e.range=function(f){return arguments.length?([r,a]=f,r=+r,a=+a,c()):[r,a]},e.rangeRound=function(f){return[r,a]=f,r=+r,a=+a,s=!0,c()},e.bandwidth=function(){return i},e.step=function(){return o},e.round=function(f){return arguments.length?(s=!!f,c()):s},e.padding=function(f){return arguments.length?(l=Math.min(1,u=+f),c()):l},e.paddingInner=function(f){return arguments.length?(l=Math.min(1,f),c()):l},e.paddingOuter=function(f){return arguments.length?(u=+f,c()):u},e.align=function(f){return arguments.length?(p=Math.max(0,Math.min(1,f)),c()):p},e.copy=function(){return Vl(t(),[r,a]).round(s).paddingInner(l).paddingOuter(u).align(p)},Sn.apply(c(),arguments)}function M7(e){var t=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,delete e.paddingOuter,e.copy=function(){return M7(t())},e}function dl(){return M7(Vl.apply(null,arguments).paddingInner(1))}function bg(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function R7(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Ru(){}var Kl=.7,Lp=1/Kl,vi="\\s*([+-]?\\d+)\\s*",Xl="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",fr="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",_q=/^#([0-9a-f]{3,8})$/,Cq=new RegExp(`^rgb\\(${vi},${vi},${vi}\\)$`),Aq=new RegExp(`^rgb\\(${fr},${fr},${fr}\\)$`),Eq=new RegExp(`^rgba\\(${vi},${vi},${vi},${Xl}\\)$`),Tq=new RegExp(`^rgba\\(${fr},${fr},${fr},${Xl}\\)$`),jq=new RegExp(`^hsl\\(${Xl},${fr},${fr}\\)$`),$q=new RegExp(`^hsla\\(${Xl},${fr},${fr},${Xl}\\)$`),S3={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};bg(Ru,Yl,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:O3,formatHex:O3,formatHex8:Nq,formatHsl:Mq,formatRgb:k3,toString:k3});function O3(){return this.rgb().formatHex()}function Nq(){return this.rgb().formatHex8()}function Mq(){return I7(this).formatHsl()}function k3(){return this.rgb().formatRgb()}function Yl(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=_q.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?_3(t):n===3?new Ht(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?hc(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?hc(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Cq.exec(e))?new Ht(t[1],t[2],t[3],1):(t=Aq.exec(e))?new Ht(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Eq.exec(e))?hc(t[1],t[2],t[3],t[4]):(t=Tq.exec(e))?hc(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=jq.exec(e))?E3(t[1],t[2]/100,t[3]/100,1):(t=$q.exec(e))?E3(t[1],t[2]/100,t[3]/100,t[4]):S3.hasOwnProperty(e)?_3(S3[e]):e==="transparent"?new Ht(NaN,NaN,NaN,0):null}function _3(e){return new Ht(e>>16&255,e>>8&255,e&255,1)}function hc(e,t,n,r){return r<=0&&(e=t=n=NaN),new Ht(e,t,n,r)}function Rq(e){return e instanceof Ru||(e=Yl(e)),e?(e=e.rgb(),new Ht(e.r,e.g,e.b,e.opacity)):new Ht}function F0(e,t,n,r){return arguments.length===1?Rq(e):new Ht(e,t,n,r??1)}function Ht(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}bg(Ht,F0,R7(Ru,{brighter(e){return e=e==null?Lp:Math.pow(Lp,e),new Ht(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Kl:Math.pow(Kl,e),new Ht(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Ht(po(this.r),po(this.g),po(this.b),Fp(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:C3,formatHex:C3,formatHex8:Iq,formatRgb:A3,toString:A3}));function C3(){return`#${Ja(this.r)}${Ja(this.g)}${Ja(this.b)}`}function Iq(){return`#${Ja(this.r)}${Ja(this.g)}${Ja(this.b)}${Ja((isNaN(this.opacity)?1:this.opacity)*255)}`}function A3(){const e=Fp(this.opacity);return`${e===1?"rgb(":"rgba("}${po(this.r)}, ${po(this.g)}, ${po(this.b)}${e===1?")":`, ${e})`}`}function Fp(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function po(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Ja(e){return e=po(e),(e<16?"0":"")+e.toString(16)}function E3(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new In(e,t,n,r)}function I7(e){if(e instanceof In)return new In(e.h,e.s,e.l,e.opacity);if(e instanceof Ru||(e=Yl(e)),!e)return new In;if(e instanceof In)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,a=Math.min(t,n,r),o=Math.max(t,n,r),i=NaN,s=o-a,l=(o+a)/2;return s?(t===o?i=(n-r)/s+(n<r)*6:n===o?i=(r-t)/s+2:i=(t-n)/s+4,s/=l<.5?o+a:2-o-a,i*=60):s=l>0&&l<1?0:i,new In(i,s,l,e.opacity)}function Dq(e,t,n,r){return arguments.length===1?I7(e):new In(e,t,n,r??1)}function In(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}bg(In,Dq,R7(Ru,{brighter(e){return e=e==null?Lp:Math.pow(Lp,e),new In(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Kl:Math.pow(Kl,e),new In(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,a=2*n-r;return new Ht(Bm(e>=240?e-240:e+120,a,r),Bm(e,a,r),Bm(e<120?e+240:e-120,a,r),this.opacity)},clamp(){return new In(T3(this.h),vc(this.s),vc(this.l),Fp(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Fp(this.opacity);return`${e===1?"hsl(":"hsla("}${T3(this.h)}, ${vc(this.s)*100}%, ${vc(this.l)*100}%${e===1?")":`, ${e})`}`}}));function T3(e){return e=(e||0)%360,e<0?e+360:e}function vc(e){return Math.max(0,Math.min(1,e||0))}function Bm(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const Pg=e=>()=>e;function Lq(e,t){return function(n){return e+n*t}}function Fq(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function zq(e){return(e=+e)==1?D7:function(t,n){return n-t?Fq(t,n,e):Pg(isNaN(t)?n:t)}}function D7(e,t){var n=t-e;return n?Lq(e,n):Pg(isNaN(e)?t:e)}const j3=function e(t){var n=zq(t);function r(a,o){var i=n((a=F0(a)).r,(o=F0(o)).r),s=n(a.g,o.g),l=n(a.b,o.b),u=D7(a.opacity,o.opacity);return function(p){return a.r=i(p),a.g=s(p),a.b=l(p),a.opacity=u(p),a+""}}return r.gamma=e,r}(1);function Bq(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,r=t.slice(),a;return function(o){for(a=0;a<n;++a)r[a]=e[a]*(1-o)+t[a]*o;return r}}function Hq(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Gq(e,t){var n=t?t.length:0,r=e?Math.min(n,e.length):0,a=new Array(r),o=new Array(n),i;for(i=0;i<r;++i)a[i]=_s(e[i],t[i]);for(;i<n;++i)o[i]=t[i];return function(s){for(i=0;i<r;++i)o[i]=a[i](s);return o}}function Uq(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function zp(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function Wq(e,t){var n={},r={},a;(e===null||typeof e!="object")&&(e={}),(t===null||typeof t!="object")&&(t={});for(a in t)a in e?n[a]=_s(e[a],t[a]):r[a]=t[a];return function(o){for(a in n)r[a]=n[a](o);return r}}var z0=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Hm=new RegExp(z0.source,"g");function qq(e){return function(){return e}}function Vq(e){return function(t){return e(t)+""}}function Kq(e,t){var n=z0.lastIndex=Hm.lastIndex=0,r,a,o,i=-1,s=[],l=[];for(e=e+"",t=t+"";(r=z0.exec(e))&&(a=Hm.exec(t));)(o=a.index)>n&&(o=t.slice(n,o),s[i]?s[i]+=o:s[++i]=o),(r=r[0])===(a=a[0])?s[i]?s[i]+=a:s[++i]=a:(s[++i]=null,l.push({i,x:zp(r,a)})),n=Hm.lastIndex;return n<t.length&&(o=t.slice(n),s[i]?s[i]+=o:s[++i]=o),s.length<2?l[0]?Vq(l[0].x):qq(t):(t=l.length,function(u){for(var p=0,c;p<t;++p)s[(c=l[p]).i]=c.x(u);return s.join("")})}function _s(e,t){var n=typeof t,r;return t==null||n==="boolean"?Pg(t):(n==="number"?zp:n==="string"?(r=Yl(t))?(t=r,j3):Kq:t instanceof Yl?j3:t instanceof Date?Uq:Hq(t)?Bq:Array.isArray(t)?Gq:typeof t.valueOf!="function"&&typeof t.toString!="function"||isNaN(t)?Wq:zp)(e,t)}function Sg(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}function Xq(e,t){t===void 0&&(t=e,e=_s);for(var n=0,r=t.length-1,a=t[0],o=new Array(r<0?0:r);n<r;)o[n]=e(a,a=t[++n]);return function(i){var s=Math.max(0,Math.min(r-1,Math.floor(i*=r)));return o[s](i-s)}}function Yq(e){return function(){return e}}function Bp(e){return+e}var $3=[0,1];function It(e){return e}function B0(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:Yq(isNaN(t)?NaN:.5)}function Qq(e,t){var n;return e>t&&(n=e,e=t,t=n),function(r){return Math.max(e,Math.min(t,r))}}function Zq(e,t,n){var r=e[0],a=e[1],o=t[0],i=t[1];return a<r?(r=B0(a,r),o=n(i,o)):(r=B0(r,a),o=n(o,i)),function(s){return o(r(s))}}function Jq(e,t,n){var r=Math.min(e.length,t.length)-1,a=new Array(r),o=new Array(r),i=-1;for(e[r]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());++i<r;)a[i]=B0(e[i],e[i+1]),o[i]=n(t[i],t[i+1]);return function(s){var l=Mu(e,s,1,r)-1;return o[l](a[l](s))}}function Iu(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function gd(){var e=$3,t=$3,n=_s,r,a,o,i=It,s,l,u;function p(){var f=Math.min(e.length,t.length);return i!==It&&(i=Qq(e[0],e[f-1])),s=f>2?Jq:Zq,l=u=null,c}function c(f){return f==null||isNaN(f=+f)?o:(l||(l=s(e.map(r),t,n)))(r(i(f)))}return c.invert=function(f){return i(a((u||(u=s(t,e.map(r),zp)))(f)))},c.domain=function(f){return arguments.length?(e=Array.from(f,Bp),p()):e.slice()},c.range=function(f){return arguments.length?(t=Array.from(f),p()):t.slice()},c.rangeRound=function(f){return t=Array.from(f),n=Sg,p()},c.clamp=function(f){return arguments.length?(i=f?!0:It,p()):i!==It},c.interpolate=function(f){return arguments.length?(n=f,p()):n},c.unknown=function(f){return arguments.length?(o=f,c):o},function(f,d){return r=f,a=d,p()}}function Og(){return gd()(It,It)}function eV(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Hp(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function zi(e){return e=Hp(Math.abs(e)),e?e[1]:NaN}function tV(e,t){return function(n,r){for(var a=n.length,o=[],i=0,s=e[0],l=0;a>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),o.push(n.substring(a-=s,a+s)),!((l+=s+1)>r));)s=e[i=(i+1)%e.length];return o.reverse().join(t)}}function nV(e){return function(t){return t.replace(/[0-9]/g,function(n){return e[+n]})}}var rV=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ql(e){if(!(t=rV.exec(e)))throw new Error("invalid format: "+e);var t;return new kg({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}Ql.prototype=kg.prototype;function kg(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}kg.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function aV(e){e:for(var t=e.length,n=1,r=-1,a;n<t;++n)switch(e[n]){case".":r=a=n;break;case"0":r===0&&(r=n),a=n;break;default:if(!+e[n])break e;r>0&&(r=0);break}return r>0?e.slice(0,r)+e.slice(a+1):e}var L7;function oV(e,t){var n=Hp(e,t);if(!n)return e+"";var r=n[0],a=n[1],o=a-(L7=Math.max(-8,Math.min(8,Math.floor(a/3)))*3)+1,i=r.length;return o===i?r:o>i?r+new Array(o-i+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Hp(e,Math.max(0,t+o-1))[0]}function N3(e,t){var n=Hp(e,t);if(!n)return e+"";var r=n[0],a=n[1];return a<0?"0."+new Array(-a).join("0")+r:r.length>a+1?r.slice(0,a+1)+"."+r.slice(a+1):r+new Array(a-r.length+2).join("0")}const M3={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:eV,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>N3(e*100,t),r:N3,s:oV,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function R3(e){return e}var I3=Array.prototype.map,D3=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function iV(e){var t=e.grouping===void 0||e.thousands===void 0?R3:tV(I3.call(e.grouping,Number),e.thousands+""),n=e.currency===void 0?"":e.currency[0]+"",r=e.currency===void 0?"":e.currency[1]+"",a=e.decimal===void 0?".":e.decimal+"",o=e.numerals===void 0?R3:nV(I3.call(e.numerals,String)),i=e.percent===void 0?"%":e.percent+"",s=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function u(c){c=Ql(c);var f=c.fill,d=c.align,h=c.sign,m=c.symbol,g=c.zero,v=c.width,y=c.comma,x=c.precision,P=c.trim,w=c.type;w==="n"?(y=!0,w="g"):M3[w]||(x===void 0&&(x=12),P=!0,w="g"),(g||f==="0"&&d==="=")&&(g=!0,f="0",d="=");var S=m==="$"?n:m==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",O=m==="$"?r:/[%p]/.test(w)?i:"",_=M3[w],C=/[defgprs%]/.test(w);x=x===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function j(E){var T=S,N=O,M,I,R;if(w==="c")N=_(E)+N,E="";else{E=+E;var L=E<0||1/E<0;if(E=isNaN(E)?l:_(Math.abs(E),x),P&&(E=aV(E)),L&&+E==0&&h!=="+"&&(L=!1),T=(L?h==="("?h:s:h==="-"||h==="("?"":h)+T,N=(w==="s"?D3[8+L7/3]:"")+N+(L&&h==="("?")":""),C){for(M=-1,I=E.length;++M<I;)if(R=E.charCodeAt(M),48>R||R>57){N=(R===46?a+E.slice(M+1):E.slice(M))+N,E=E.slice(0,M);break}}}y&&!g&&(E=t(E,1/0));var $=T.length+E.length+N.length,D=$<v?new Array(v-$+1).join(f):"";switch(y&&g&&(E=t(D+E,D.length?v-N.length:1/0),D=""),d){case"<":E=T+E+N+D;break;case"=":E=T+D+E+N;break;case"^":E=D.slice(0,$=D.length>>1)+T+E+N+D.slice($);break;default:E=D+T+E+N;break}return o(E)}return j.toString=function(){return c+""},j}function p(c,f){var d=u((c=Ql(c),c.type="f",c)),h=Math.max(-8,Math.min(8,Math.floor(zi(f)/3)))*3,m=Math.pow(10,-h),g=D3[8+h/3];return function(v){return d(m*v)+g}}return{format:u,formatPrefix:p}}var yc,_g,F7;sV({thousands:",",grouping:[3],currency:["$",""]});function sV(e){return yc=iV(e),_g=yc.format,F7=yc.formatPrefix,yc}function lV(e){return Math.max(0,-zi(Math.abs(e)))}function uV(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(zi(t)/3)))*3-zi(Math.abs(e)))}function cV(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,zi(t)-zi(e))+1}function z7(e,t,n,r){var a=D0(e,t,n),o;switch(r=Ql(r??",f"),r.type){case"s":{var i=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(o=uV(a,i))&&(r.precision=o),F7(r,i)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(o=cV(a,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=o-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(o=lV(a))&&(r.precision=o-(r.type==="%")*2);break}}return _g(r)}function La(e){var t=e.domain;return e.ticks=function(n){var r=t();return R0(r[0],r[r.length-1],n??10)},e.tickFormat=function(n,r){var a=t();return z7(a[0],a[a.length-1],n??10,r)},e.nice=function(n){n==null&&(n=10);var r=t(),a=0,o=r.length-1,i=r[a],s=r[o],l,u,p=10;for(s<i&&(u=i,i=s,s=u,u=a,a=o,o=u);p-- >0;){if(u=I0(i,s,n),u===l)return r[a]=i,r[o]=s,t(r);if(u>0)i=Math.floor(i/u)*u,s=Math.ceil(s/u)*u;else if(u<0)i=Math.ceil(i*u)/u,s=Math.floor(s*u)/u;else break;l=u}return e},e}function Gp(){var e=Og();return e.copy=function(){return Iu(e,Gp())},Sn.apply(e,arguments),La(e)}function B7(e){var t;function n(r){return r==null||isNaN(r=+r)?t:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(e=Array.from(r,Bp),n):e.slice()},n.unknown=function(r){return arguments.length?(t=r,n):t},n.copy=function(){return B7(e).unknown(t)},e=arguments.length?Array.from(e,Bp):[0,1],La(n)}function H7(e,t){e=e.slice();var n=0,r=e.length-1,a=e[n],o=e[r],i;return o<a&&(i=n,n=r,r=i,i=a,a=o,o=i),e[n]=t.floor(a),e[r]=t.ceil(o),e}function L3(e){return Math.log(e)}function F3(e){return Math.exp(e)}function pV(e){return-Math.log(-e)}function fV(e){return-Math.exp(-e)}function dV(e){return isFinite(e)?+("1e"+e):e<0?0:e}function mV(e){return e===10?dV:e===Math.E?Math.exp:t=>Math.pow(e,t)}function hV(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function z3(e){return(t,n)=>-e(-t,n)}function Cg(e){const t=e(L3,F3),n=t.domain;let r=10,a,o;function i(){return a=hV(r),o=mV(r),n()[0]<0?(a=z3(a),o=z3(o),e(pV,fV)):e(L3,F3),t}return t.base=function(s){return arguments.length?(r=+s,i()):r},t.domain=function(s){return arguments.length?(n(s),i()):n()},t.ticks=s=>{const l=n();let u=l[0],p=l[l.length-1];const c=p<u;c&&([u,p]=[p,u]);let f=a(u),d=a(p),h,m;const g=s==null?10:+s;let v=[];if(!(r%1)&&d-f<g){if(f=Math.floor(f),d=Math.ceil(d),u>0){for(;f<=d;++f)for(h=1;h<r;++h)if(m=f<0?h/o(-f):h*o(f),!(m<u)){if(m>p)break;v.push(m)}}else for(;f<=d;++f)for(h=r-1;h>=1;--h)if(m=f>0?h/o(-f):h*o(f),!(m<u)){if(m>p)break;v.push(m)}v.length*2<g&&(v=R0(u,p,g))}else v=R0(f,d,Math.min(d-f,g)).map(o);return c?v.reverse():v},t.tickFormat=(s,l)=>{if(s==null&&(s=10),l==null&&(l=r===10?"s":","),typeof l!="function"&&(!(r%1)&&(l=Ql(l)).precision==null&&(l.trim=!0),l=_g(l)),s===1/0)return l;const u=Math.max(1,r*s/t.ticks().length);return p=>{let c=p/o(Math.round(a(p)));return c*r<r-.5&&(c*=r),c<=u?l(p):""}},t.nice=()=>n(H7(n(),{floor:s=>o(Math.floor(a(s))),ceil:s=>o(Math.ceil(a(s)))})),t}function G7(){const e=Cg(gd()).domain([1,10]);return e.copy=()=>Iu(e,G7()).base(e.base()),Sn.apply(e,arguments),e}function B3(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function H3(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function Ag(e){var t=1,n=e(B3(t),H3(t));return n.constant=function(r){return arguments.length?e(B3(t=+r),H3(t)):t},La(n)}function U7(){var e=Ag(gd());return e.copy=function(){return Iu(e,U7()).constant(e.constant())},Sn.apply(e,arguments)}function G3(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function vV(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function yV(e){return e<0?-e*e:e*e}function Eg(e){var t=e(It,It),n=1;function r(){return n===1?e(It,It):n===.5?e(vV,yV):e(G3(n),G3(1/n))}return t.exponent=function(a){return arguments.length?(n=+a,r()):n},La(t)}function Tg(){var e=Eg(gd());return e.copy=function(){return Iu(e,Tg()).exponent(e.exponent())},Sn.apply(e,arguments),e}function gV(){return Tg.apply(null,arguments).exponent(.5)}function U3(e){return Math.sign(e)*e*e}function xV(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function W7(){var e=Og(),t=[0,1],n=!1,r;function a(o){var i=xV(e(o));return isNaN(i)?r:n?Math.round(i):i}return a.invert=function(o){return e.invert(U3(o))},a.domain=function(o){return arguments.length?(e.domain(o),a):e.domain()},a.range=function(o){return arguments.length?(e.range((t=Array.from(o,Bp)).map(U3)),a):t.slice()},a.rangeRound=function(o){return a.range(o).round(!0)},a.round=function(o){return arguments.length?(n=!!o,a):n},a.clamp=function(o){return arguments.length?(e.clamp(o),a):e.clamp()},a.unknown=function(o){return arguments.length?(r=o,a):r},a.copy=function(){return W7(e.domain(),t).round(n).clamp(e.clamp()).unknown(r)},Sn.apply(a,arguments),La(a)}function q7(){var e=[],t=[],n=[],r;function a(){var i=0,s=Math.max(1,t.length);for(n=new Array(s-1);++i<s;)n[i-1]=Oq(e,i/s);return o}function o(i){return i==null||isNaN(i=+i)?r:t[Mu(n,i)]}return o.invertExtent=function(i){var s=t.indexOf(i);return s<0?[NaN,NaN]:[s>0?n[s-1]:e[0],s<n.length?n[s]:e[e.length-1]]},o.domain=function(i){if(!arguments.length)return e.slice();e=[];for(let s of i)s!=null&&!isNaN(s=+s)&&e.push(s);return e.sort(Oa),a()},o.range=function(i){return arguments.length?(t=Array.from(i),a()):t.slice()},o.unknown=function(i){return arguments.length?(r=i,o):r},o.quantiles=function(){return n.slice()},o.copy=function(){return q7().domain(e).range(t).unknown(r)},Sn.apply(o,arguments)}function V7(){var e=0,t=1,n=1,r=[.5],a=[0,1],o;function i(l){return l!=null&&l<=l?a[Mu(r,l,0,n)]:o}function s(){var l=-1;for(r=new Array(n);++l<n;)r[l]=((l+1)*t-(l-n)*e)/(n+1);return i}return i.domain=function(l){return arguments.length?([e,t]=l,e=+e,t=+t,s()):[e,t]},i.range=function(l){return arguments.length?(n=(a=Array.from(l)).length-1,s()):a.slice()},i.invertExtent=function(l){var u=a.indexOf(l);return u<0?[NaN,NaN]:u<1?[e,r[0]]:u>=n?[r[n-1],t]:[r[u-1],r[u]]},i.unknown=function(l){return arguments.length&&(o=l),i},i.thresholds=function(){return r.slice()},i.copy=function(){return V7().domain([e,t]).range(a).unknown(o)},Sn.apply(La(i),arguments)}function K7(){var e=[.5],t=[0,1],n,r=1;function a(o){return o!=null&&o<=o?t[Mu(e,o,0,r)]:n}return a.domain=function(o){return arguments.length?(e=Array.from(o),r=Math.min(e.length,t.length-1),a):e.slice()},a.range=function(o){return arguments.length?(t=Array.from(o),r=Math.min(e.length,t.length-1),a):t.slice()},a.invertExtent=function(o){var i=t.indexOf(o);return[e[i-1],e[i]]},a.unknown=function(o){return arguments.length?(n=o,a):n},a.copy=function(){return K7().domain(e).range(t).unknown(n)},Sn.apply(a,arguments)}const Gm=new Date,Um=new Date;function lt(e,t,n,r){function a(o){return e(o=arguments.length===0?new Date:new Date(+o)),o}return a.floor=o=>(e(o=new Date(+o)),o),a.ceil=o=>(e(o=new Date(o-1)),t(o,1),e(o),o),a.round=o=>{const i=a(o),s=a.ceil(o);return o-i<s-o?i:s},a.offset=(o,i)=>(t(o=new Date(+o),i==null?1:Math.floor(i)),o),a.range=(o,i,s)=>{const l=[];if(o=a.ceil(o),s=s==null?1:Math.floor(s),!(o<i)||!(s>0))return l;let u;do l.push(u=new Date(+o)),t(o,s),e(o);while(u<o&&o<i);return l},a.filter=o=>lt(i=>{if(i>=i)for(;e(i),!o(i);)i.setTime(i-1)},(i,s)=>{if(i>=i)if(s<0)for(;++s<=0;)for(;t(i,-1),!o(i););else for(;--s>=0;)for(;t(i,1),!o(i););}),n&&(a.count=(o,i)=>(Gm.setTime(+o),Um.setTime(+i),e(Gm),e(Um),Math.floor(n(Gm,Um))),a.every=o=>(o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?a.filter(r?i=>r(i)%o===0:i=>a.count(0,i)%o===0):a)),a}const Up=lt(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Up.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?lt(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):Up);Up.range;const Cr=1e3,vn=Cr*60,Ar=vn*60,zr=Ar*24,jg=zr*7,W3=zr*30,Wm=zr*365,eo=lt(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*Cr)},(e,t)=>(t-e)/Cr,e=>e.getUTCSeconds());eo.range;const $g=lt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Cr)},(e,t)=>{e.setTime(+e+t*vn)},(e,t)=>(t-e)/vn,e=>e.getMinutes());$g.range;const Ng=lt(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*vn)},(e,t)=>(t-e)/vn,e=>e.getUTCMinutes());Ng.range;const Mg=lt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Cr-e.getMinutes()*vn)},(e,t)=>{e.setTime(+e+t*Ar)},(e,t)=>(t-e)/Ar,e=>e.getHours());Mg.range;const Rg=lt(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Ar)},(e,t)=>(t-e)/Ar,e=>e.getUTCHours());Rg.range;const Du=lt(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*vn)/zr,e=>e.getDate()-1);Du.range;const xd=lt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/zr,e=>e.getUTCDate()-1);xd.range;const X7=lt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/zr,e=>Math.floor(e/zr));X7.range;function No(e){return lt(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,n)=>{t.setDate(t.getDate()+n*7)},(t,n)=>(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*vn)/jg)}const wd=No(0),Wp=No(1),wV=No(2),bV=No(3),Bi=No(4),PV=No(5),SV=No(6);wd.range;Wp.range;wV.range;bV.range;Bi.range;PV.range;SV.range;function Mo(e){return lt(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCDate(t.getUTCDate()+n*7)},(t,n)=>(n-t)/jg)}const bd=Mo(0),qp=Mo(1),OV=Mo(2),kV=Mo(3),Hi=Mo(4),_V=Mo(5),CV=Mo(6);bd.range;qp.range;OV.range;kV.range;Hi.range;_V.range;CV.range;const Ig=lt(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());Ig.range;const Dg=lt(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Dg.range;const Br=lt(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Br.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:lt(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n*e)});Br.range;const Hr=lt(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Hr.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:lt(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)});Hr.range;function Y7(e,t,n,r,a,o){const i=[[eo,1,Cr],[eo,5,5*Cr],[eo,15,15*Cr],[eo,30,30*Cr],[o,1,vn],[o,5,5*vn],[o,15,15*vn],[o,30,30*vn],[a,1,Ar],[a,3,3*Ar],[a,6,6*Ar],[a,12,12*Ar],[r,1,zr],[r,2,2*zr],[n,1,jg],[t,1,W3],[t,3,3*W3],[e,1,Wm]];function s(u,p,c){const f=p<u;f&&([u,p]=[p,u]);const d=c&&typeof c.range=="function"?c:l(u,p,c),h=d?d.range(u,+p+1):[];return f?h.reverse():h}function l(u,p,c){const f=Math.abs(p-u)/c,d=xg(([,,g])=>g).right(i,f);if(d===i.length)return e.every(D0(u/Wm,p/Wm,c));if(d===0)return Up.every(Math.max(D0(u,p,c),1));const[h,m]=i[f/i[d-1][2]<i[d][2]/f?d-1:d];return h.every(m)}return[s,l]}const[AV,EV]=Y7(Hr,Dg,bd,X7,Rg,Ng),[TV,jV]=Y7(Br,Ig,wd,Du,Mg,$g);function qm(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function Vm(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function Us(e,t,n){return{y:e,m:t,d:n,H:0,M:0,S:0,L:0}}function $V(e){var t=e.dateTime,n=e.date,r=e.time,a=e.periods,o=e.days,i=e.shortDays,s=e.months,l=e.shortMonths,u=Ws(a),p=qs(a),c=Ws(o),f=qs(o),d=Ws(i),h=qs(i),m=Ws(s),g=qs(s),v=Ws(l),y=qs(l),x={a:L,A:$,b:D,B:H,c:null,d:Q3,e:Q3,f:tK,g:pK,G:dK,H:ZV,I:JV,j:eK,L:Q7,m:nK,M:rK,p:W,q:G,Q:eb,s:tb,S:aK,u:oK,U:iK,V:sK,w:lK,W:uK,x:null,X:null,y:cK,Y:fK,Z:mK,"%":J3},P={a:Z,A:ie,b:ve,B:Pe,c:null,d:Z3,e:Z3,f:gK,g:AK,G:TK,H:hK,I:vK,j:yK,L:J7,m:xK,M:wK,p:J,q:le,Q:eb,s:tb,S:bK,u:PK,U:SK,V:OK,w:kK,W:_K,x:null,X:null,y:CK,Y:EK,Z:jK,"%":J3},w={a:j,A:E,b:T,B:N,c:M,d:X3,e:X3,f:KV,g:K3,G:V3,H:Y3,I:Y3,j:UV,L:VV,m:GV,M:WV,p:C,q:HV,Q:YV,s:QV,S:qV,u:DV,U:LV,V:FV,w:IV,W:zV,x:I,X:R,y:K3,Y:V3,Z:BV,"%":XV};x.x=S(n,x),x.X=S(r,x),x.c=S(t,x),P.x=S(n,P),P.X=S(r,P),P.c=S(t,P);function S(q,K){return function(X){var F=[],pe=-1,ne=0,Ne=q.length,Me,Ze,Xn;for(X instanceof Date||(X=new Date(+X));++pe<Ne;)q.charCodeAt(pe)===37&&(F.push(q.slice(ne,pe)),(Ze=q3[Me=q.charAt(++pe)])!=null?Me=q.charAt(++pe):Ze=Me==="e"?" ":"0",(Xn=K[Me])&&(Me=Xn(X,Ze)),F.push(Me),ne=pe+1);return F.push(q.slice(ne,pe)),F.join("")}}function O(q,K){return function(X){var F=Us(1900,void 0,1),pe=_(F,q,X+="",0),ne,Ne;if(pe!=X.length)return null;if("Q"in F)return new Date(F.Q);if("s"in F)return new Date(F.s*1e3+("L"in F?F.L:0));if(K&&!("Z"in F)&&(F.Z=0),"p"in F&&(F.H=F.H%12+F.p*12),F.m===void 0&&(F.m="q"in F?F.q:0),"V"in F){if(F.V<1||F.V>53)return null;"w"in F||(F.w=1),"Z"in F?(ne=Vm(Us(F.y,0,1)),Ne=ne.getUTCDay(),ne=Ne>4||Ne===0?qp.ceil(ne):qp(ne),ne=xd.offset(ne,(F.V-1)*7),F.y=ne.getUTCFullYear(),F.m=ne.getUTCMonth(),F.d=ne.getUTCDate()+(F.w+6)%7):(ne=qm(Us(F.y,0,1)),Ne=ne.getDay(),ne=Ne>4||Ne===0?Wp.ceil(ne):Wp(ne),ne=Du.offset(ne,(F.V-1)*7),F.y=ne.getFullYear(),F.m=ne.getMonth(),F.d=ne.getDate()+(F.w+6)%7)}else("W"in F||"U"in F)&&("w"in F||(F.w="u"in F?F.u%7:"W"in F?1:0),Ne="Z"in F?Vm(Us(F.y,0,1)).getUTCDay():qm(Us(F.y,0,1)).getDay(),F.m=0,F.d="W"in F?(F.w+6)%7+F.W*7-(Ne+5)%7:F.w+F.U*7-(Ne+6)%7);return"Z"in F?(F.H+=F.Z/100|0,F.M+=F.Z%100,Vm(F)):qm(F)}}function _(q,K,X,F){for(var pe=0,ne=K.length,Ne=X.length,Me,Ze;pe<ne;){if(F>=Ne)return-1;if(Me=K.charCodeAt(pe++),Me===37){if(Me=K.charAt(pe++),Ze=w[Me in q3?K.charAt(pe++):Me],!Ze||(F=Ze(q,X,F))<0)return-1}else if(Me!=X.charCodeAt(F++))return-1}return F}function C(q,K,X){var F=u.exec(K.slice(X));return F?(q.p=p.get(F[0].toLowerCase()),X+F[0].length):-1}function j(q,K,X){var F=d.exec(K.slice(X));return F?(q.w=h.get(F[0].toLowerCase()),X+F[0].length):-1}function E(q,K,X){var F=c.exec(K.slice(X));return F?(q.w=f.get(F[0].toLowerCase()),X+F[0].length):-1}function T(q,K,X){var F=v.exec(K.slice(X));return F?(q.m=y.get(F[0].toLowerCase()),X+F[0].length):-1}function N(q,K,X){var F=m.exec(K.slice(X));return F?(q.m=g.get(F[0].toLowerCase()),X+F[0].length):-1}function M(q,K,X){return _(q,t,K,X)}function I(q,K,X){return _(q,n,K,X)}function R(q,K,X){return _(q,r,K,X)}function L(q){return i[q.getDay()]}function $(q){return o[q.getDay()]}function D(q){return l[q.getMonth()]}function H(q){return s[q.getMonth()]}function W(q){return a[+(q.getHours()>=12)]}function G(q){return 1+~~(q.getMonth()/3)}function Z(q){return i[q.getUTCDay()]}function ie(q){return o[q.getUTCDay()]}function ve(q){return l[q.getUTCMonth()]}function Pe(q){return s[q.getUTCMonth()]}function J(q){return a[+(q.getUTCHours()>=12)]}function le(q){return 1+~~(q.getUTCMonth()/3)}return{format:function(q){var K=S(q+="",x);return K.toString=function(){return q},K},parse:function(q){var K=O(q+="",!1);return K.toString=function(){return q},K},utcFormat:function(q){var K=S(q+="",P);return K.toString=function(){return q},K},utcParse:function(q){var K=O(q+="",!0);return K.toString=function(){return q},K}}}var q3={"-":"",_:" ",0:"0"},dt=/^\s*\d+/,NV=/^%/,MV=/[\\^$*+?|[\]().{}]/g;function he(e,t,n){var r=e<0?"-":"",a=(r?-e:e)+"",o=a.length;return r+(o<n?new Array(n-o+1).join(t)+a:a)}function RV(e){return e.replace(MV,"\\$&")}function Ws(e){return new RegExp("^(?:"+e.map(RV).join("|")+")","i")}function qs(e){return new Map(e.map((t,n)=>[t.toLowerCase(),n]))}function IV(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function DV(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function LV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function FV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function zV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function V3(e,t,n){var r=dt.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function K3(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function BV(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function HV(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.q=r[0]*3-3,n+r[0].length):-1}function GV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function X3(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function UV(e,t,n){var r=dt.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function Y3(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function WV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function qV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function VV(e,t,n){var r=dt.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function KV(e,t,n){var r=dt.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function XV(e,t,n){var r=NV.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function YV(e,t,n){var r=dt.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function QV(e,t,n){var r=dt.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function Q3(e,t){return he(e.getDate(),t,2)}function ZV(e,t){return he(e.getHours(),t,2)}function JV(e,t){return he(e.getHours()%12||12,t,2)}function eK(e,t){return he(1+Du.count(Br(e),e),t,3)}function Q7(e,t){return he(e.getMilliseconds(),t,3)}function tK(e,t){return Q7(e,t)+"000"}function nK(e,t){return he(e.getMonth()+1,t,2)}function rK(e,t){return he(e.getMinutes(),t,2)}function aK(e,t){return he(e.getSeconds(),t,2)}function oK(e){var t=e.getDay();return t===0?7:t}function iK(e,t){return he(wd.count(Br(e)-1,e),t,2)}function Z7(e){var t=e.getDay();return t>=4||t===0?Bi(e):Bi.ceil(e)}function sK(e,t){return e=Z7(e),he(Bi.count(Br(e),e)+(Br(e).getDay()===4),t,2)}function lK(e){return e.getDay()}function uK(e,t){return he(Wp.count(Br(e)-1,e),t,2)}function cK(e,t){return he(e.getFullYear()%100,t,2)}function pK(e,t){return e=Z7(e),he(e.getFullYear()%100,t,2)}function fK(e,t){return he(e.getFullYear()%1e4,t,4)}function dK(e,t){var n=e.getDay();return e=n>=4||n===0?Bi(e):Bi.ceil(e),he(e.getFullYear()%1e4,t,4)}function mK(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+he(t/60|0,"0",2)+he(t%60,"0",2)}function Z3(e,t){return he(e.getUTCDate(),t,2)}function hK(e,t){return he(e.getUTCHours(),t,2)}function vK(e,t){return he(e.getUTCHours()%12||12,t,2)}function yK(e,t){return he(1+xd.count(Hr(e),e),t,3)}function J7(e,t){return he(e.getUTCMilliseconds(),t,3)}function gK(e,t){return J7(e,t)+"000"}function xK(e,t){return he(e.getUTCMonth()+1,t,2)}function wK(e,t){return he(e.getUTCMinutes(),t,2)}function bK(e,t){return he(e.getUTCSeconds(),t,2)}function PK(e){var t=e.getUTCDay();return t===0?7:t}function SK(e,t){return he(bd.count(Hr(e)-1,e),t,2)}function eP(e){var t=e.getUTCDay();return t>=4||t===0?Hi(e):Hi.ceil(e)}function OK(e,t){return e=eP(e),he(Hi.count(Hr(e),e)+(Hr(e).getUTCDay()===4),t,2)}function kK(e){return e.getUTCDay()}function _K(e,t){return he(qp.count(Hr(e)-1,e),t,2)}function CK(e,t){return he(e.getUTCFullYear()%100,t,2)}function AK(e,t){return e=eP(e),he(e.getUTCFullYear()%100,t,2)}function EK(e,t){return he(e.getUTCFullYear()%1e4,t,4)}function TK(e,t){var n=e.getUTCDay();return e=n>=4||n===0?Hi(e):Hi.ceil(e),he(e.getUTCFullYear()%1e4,t,4)}function jK(){return"+0000"}function J3(){return"%"}function eb(e){return+e}function tb(e){return Math.floor(+e/1e3)}var Bo,tP,nP;$K({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function $K(e){return Bo=$V(e),tP=Bo.format,Bo.parse,nP=Bo.utcFormat,Bo.utcParse,Bo}function NK(e){return new Date(e)}function MK(e){return e instanceof Date?+e:+new Date(+e)}function Lg(e,t,n,r,a,o,i,s,l,u){var p=Og(),c=p.invert,f=p.domain,d=u(".%L"),h=u(":%S"),m=u("%I:%M"),g=u("%I %p"),v=u("%a %d"),y=u("%b %d"),x=u("%B"),P=u("%Y");function w(S){return(l(S)<S?d:s(S)<S?h:i(S)<S?m:o(S)<S?g:r(S)<S?a(S)<S?v:y:n(S)<S?x:P)(S)}return p.invert=function(S){return new Date(c(S))},p.domain=function(S){return arguments.length?f(Array.from(S,MK)):f().map(NK)},p.ticks=function(S){var O=f();return e(O[0],O[O.length-1],S??10)},p.tickFormat=function(S,O){return O==null?w:u(O)},p.nice=function(S){var O=f();return(!S||typeof S.range!="function")&&(S=t(O[0],O[O.length-1],S??10)),S?f(H7(O,S)):p},p.copy=function(){return Iu(p,Lg(e,t,n,r,a,o,i,s,l,u))},p}function RK(){return Sn.apply(Lg(TV,jV,Br,Ig,wd,Du,Mg,$g,eo,tP).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function IK(){return Sn.apply(Lg(AV,EV,Hr,Dg,bd,xd,Rg,Ng,eo,nP).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function Pd(){var e=0,t=1,n,r,a,o,i=It,s=!1,l;function u(c){return c==null||isNaN(c=+c)?l:i(a===0?.5:(c=(o(c)-n)*a,s?Math.max(0,Math.min(1,c)):c))}u.domain=function(c){return arguments.length?([e,t]=c,n=o(e=+e),r=o(t=+t),a=n===r?0:1/(r-n),u):[e,t]},u.clamp=function(c){return arguments.length?(s=!!c,u):s},u.interpolator=function(c){return arguments.length?(i=c,u):i};function p(c){return function(f){var d,h;return arguments.length?([d,h]=f,i=c(d,h),u):[i(0),i(1)]}}return u.range=p(_s),u.rangeRound=p(Sg),u.unknown=function(c){return arguments.length?(l=c,u):l},function(c){return o=c,n=c(e),r=c(t),a=n===r?0:1/(r-n),u}}function Fa(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function rP(){var e=La(Pd()(It));return e.copy=function(){return Fa(e,rP())},qr.apply(e,arguments)}function aP(){var e=Cg(Pd()).domain([1,10]);return e.copy=function(){return Fa(e,aP()).base(e.base())},qr.apply(e,arguments)}function oP(){var e=Ag(Pd());return e.copy=function(){return Fa(e,oP()).constant(e.constant())},qr.apply(e,arguments)}function Fg(){var e=Eg(Pd());return e.copy=function(){return Fa(e,Fg()).exponent(e.exponent())},qr.apply(e,arguments)}function DK(){return Fg.apply(null,arguments).exponent(.5)}function iP(){var e=[],t=It;function n(r){if(r!=null&&!isNaN(r=+r))return t((Mu(e,r,1)-1)/(e.length-1))}return n.domain=function(r){if(!arguments.length)return e.slice();e=[];for(let a of r)a!=null&&!isNaN(a=+a)&&e.push(a);return e.sort(Oa),n},n.interpolator=function(r){return arguments.length?(t=r,n):t},n.range=function(){return e.map((r,a)=>t(a/(e.length-1)))},n.quantiles=function(r){return Array.from({length:r+1},(a,o)=>Sq(e,o/r))},n.copy=function(){return iP(t).domain(e)},qr.apply(n,arguments)}function Sd(){var e=0,t=.5,n=1,r=1,a,o,i,s,l,u=It,p,c=!1,f;function d(m){return isNaN(m=+m)?f:(m=.5+((m=+p(m))-o)*(r*m<r*o?s:l),u(c?Math.max(0,Math.min(1,m)):m))}d.domain=function(m){return arguments.length?([e,t,n]=m,a=p(e=+e),o=p(t=+t),i=p(n=+n),s=a===o?0:.5/(o-a),l=o===i?0:.5/(i-o),r=o<a?-1:1,d):[e,t,n]},d.clamp=function(m){return arguments.length?(c=!!m,d):c},d.interpolator=function(m){return arguments.length?(u=m,d):u};function h(m){return function(g){var v,y,x;return arguments.length?([v,y,x]=g,u=Xq(m,[v,y,x]),d):[u(0),u(.5),u(1)]}}return d.range=h(_s),d.rangeRound=h(Sg),d.unknown=function(m){return arguments.length?(f=m,d):f},function(m){return p=m,a=m(e),o=m(t),i=m(n),s=a===o?0:.5/(o-a),l=o===i?0:.5/(i-o),r=o<a?-1:1,d}}function sP(){var e=La(Sd()(It));return e.copy=function(){return Fa(e,sP())},qr.apply(e,arguments)}function lP(){var e=Cg(Sd()).domain([.1,1,10]);return e.copy=function(){return Fa(e,lP()).base(e.base())},qr.apply(e,arguments)}function uP(){var e=Ag(Sd());return e.copy=function(){return Fa(e,uP()).constant(e.constant())},qr.apply(e,arguments)}function zg(){var e=Eg(Sd());return e.copy=function(){return Fa(e,zg()).exponent(e.exponent())},qr.apply(e,arguments)}function LK(){return zg.apply(null,arguments).exponent(.5)}const nb=Object.freeze(Object.defineProperty({__proto__:null,scaleBand:Vl,scaleDiverging:sP,scaleDivergingLog:lP,scaleDivergingPow:zg,scaleDivergingSqrt:LK,scaleDivergingSymlog:uP,scaleIdentity:B7,scaleImplicit:L0,scaleLinear:Gp,scaleLog:G7,scaleOrdinal:wg,scalePoint:dl,scalePow:Tg,scaleQuantile:q7,scaleQuantize:V7,scaleRadial:W7,scaleSequential:rP,scaleSequentialLog:aP,scaleSequentialPow:Fg,scaleSequentialQuantile:iP,scaleSequentialSqrt:DK,scaleSequentialSymlog:oP,scaleSqrt:gV,scaleSymlog:U7,scaleThreshold:K7,scaleTime:RK,scaleUtc:IK,tickFormat:z7},Symbol.toStringTag,{value:"Module"}));var FK=ys;function zK(e,t,n){for(var r=-1,a=e.length;++r<a;){var o=e[r],i=t(o);if(i!=null&&(s===void 0?i===i&&!FK(i):n(i,s)))var s=i,l=o}return l}var cP=zK;function BK(e,t){return e>t}var HK=BK,GK=cP,UK=HK,WK=ks;function qK(e){return e&&e.length?GK(e,WK,UK):void 0}var VK=qK;const da=Ae(VK);function KK(e,t){return e<t}var XK=KK,YK=cP,QK=XK,ZK=ks;function JK(e){return e&&e.length?YK(e,ZK,QK):void 0}var eX=JK;const Od=Ae(eX);var tX=eg,nX=Ia,rX=x7,aX=Vt;function oX(e,t){var n=aX(e)?tX:rX;return n(e,nX(t))}var iX=oX,sX=y7,lX=iX;function uX(e,t){return sX(lX(e,t),1)}var cX=uX;const pX=Ae(cX);var fX=mg;function dX(e,t){return fX(e,t)}var mX=dX;const ko=Ae(mX);var Cs=1e9,hX={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},Hg,Be=!0,bn="[DecimalError] ",fo=bn+"Invalid argument: ",Bg=bn+"Exponent out of range: ",As=Math.floor,Ka=Math.pow,vX=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Jt,ut=1e7,Le=7,pP=9007199254740991,Vp=As(pP/Le),Q={};Q.absoluteValue=Q.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};Q.comparedTo=Q.cmp=function(e){var t,n,r,a,o=this;if(e=new o.constructor(e),o.s!==e.s)return o.s||-e.s;if(o.e!==e.e)return o.e>e.e^o.s<0?1:-1;for(r=o.d.length,a=e.d.length,t=0,n=r<a?r:a;t<n;++t)if(o.d[t]!==e.d[t])return o.d[t]>e.d[t]^o.s<0?1:-1;return r===a?0:r>a^o.s<0?1:-1};Q.decimalPlaces=Q.dp=function(){var e=this,t=e.d.length-1,n=(t-e.e)*Le;if(t=e.d[t],t)for(;t%10==0;t/=10)n--;return n<0?0:n};Q.dividedBy=Q.div=function(e){return Nr(this,new this.constructor(e))};Q.dividedToIntegerBy=Q.idiv=function(e){var t=this,n=t.constructor;return Te(Nr(t,new n(e),0,1),n.precision)};Q.equals=Q.eq=function(e){return!this.cmp(e)};Q.exponent=function(){return tt(this)};Q.greaterThan=Q.gt=function(e){return this.cmp(e)>0};Q.greaterThanOrEqualTo=Q.gte=function(e){return this.cmp(e)>=0};Q.isInteger=Q.isint=function(){return this.e>this.d.length-2};Q.isNegative=Q.isneg=function(){return this.s<0};Q.isPositive=Q.ispos=function(){return this.s>0};Q.isZero=function(){return this.s===0};Q.lessThan=Q.lt=function(e){return this.cmp(e)<0};Q.lessThanOrEqualTo=Q.lte=function(e){return this.cmp(e)<1};Q.logarithm=Q.log=function(e){var t,n=this,r=n.constructor,a=r.precision,o=a+5;if(e===void 0)e=new r(10);else if(e=new r(e),e.s<1||e.eq(Jt))throw Error(bn+"NaN");if(n.s<1)throw Error(bn+(n.s?"NaN":"-Infinity"));return n.eq(Jt)?new r(0):(Be=!1,t=Nr(Zl(n,o),Zl(e,o),o),Be=!0,Te(t,a))};Q.minus=Q.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?mP(t,e):fP(t,(e.s=-e.s,e))};Q.modulo=Q.mod=function(e){var t,n=this,r=n.constructor,a=r.precision;if(e=new r(e),!e.s)throw Error(bn+"NaN");return n.s?(Be=!1,t=Nr(n,e,0,1).times(e),Be=!0,n.minus(t)):Te(new r(n),a)};Q.naturalExponential=Q.exp=function(){return dP(this)};Q.naturalLogarithm=Q.ln=function(){return Zl(this)};Q.negated=Q.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};Q.plus=Q.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?fP(t,e):mP(t,(e.s=-e.s,e))};Q.precision=Q.sd=function(e){var t,n,r,a=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(fo+e);if(t=tt(a)+1,r=a.d.length-1,n=r*Le+1,r=a.d[r],r){for(;r%10==0;r/=10)n--;for(r=a.d[0];r>=10;r/=10)n++}return e&&t>n?t:n};Q.squareRoot=Q.sqrt=function(){var e,t,n,r,a,o,i,s=this,l=s.constructor;if(s.s<1){if(!s.s)return new l(0);throw Error(bn+"NaN")}for(e=tt(s),Be=!1,a=Math.sqrt(+s),a==0||a==1/0?(t=or(s.d),(t.length+e)%2==0&&(t+="0"),a=Math.sqrt(t),e=As((e+1)/2)-(e<0||e%2),a==1/0?t="5e"+e:(t=a.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),r=new l(t)):r=new l(a.toString()),n=l.precision,a=i=n+3;;)if(o=r,r=o.plus(Nr(s,o,i+2)).times(.5),or(o.d).slice(0,i)===(t=or(r.d)).slice(0,i)){if(t=t.slice(i-3,i+1),a==i&&t=="4999"){if(Te(o,n+1,0),o.times(o).eq(s)){r=o;break}}else if(t!="9999")break;i+=4}return Be=!0,Te(r,n)};Q.times=Q.mul=function(e){var t,n,r,a,o,i,s,l,u,p=this,c=p.constructor,f=p.d,d=(e=new c(e)).d;if(!p.s||!e.s)return new c(0);for(e.s*=p.s,n=p.e+e.e,l=f.length,u=d.length,l<u&&(o=f,f=d,d=o,i=l,l=u,u=i),o=[],i=l+u,r=i;r--;)o.push(0);for(r=u;--r>=0;){for(t=0,a=l+r;a>r;)s=o[a]+d[r]*f[a-r-1]+t,o[a--]=s%ut|0,t=s/ut|0;o[a]=(o[a]+t)%ut|0}for(;!o[--i];)o.pop();return t?++n:o.shift(),e.d=o,e.e=n,Be?Te(e,c.precision):e};Q.toDecimalPlaces=Q.todp=function(e,t){var n=this,r=n.constructor;return n=new r(n),e===void 0?n:(vr(e,0,Cs),t===void 0?t=r.rounding:vr(t,0,8),Te(n,e+tt(n)+1,t))};Q.toExponential=function(e,t){var n,r=this,a=r.constructor;return e===void 0?n=_o(r,!0):(vr(e,0,Cs),t===void 0?t=a.rounding:vr(t,0,8),r=Te(new a(r),e+1,t),n=_o(r,!0,e+1)),n};Q.toFixed=function(e,t){var n,r,a=this,o=a.constructor;return e===void 0?_o(a):(vr(e,0,Cs),t===void 0?t=o.rounding:vr(t,0,8),r=Te(new o(a),e+tt(a)+1,t),n=_o(r.abs(),!1,e+tt(r)+1),a.isneg()&&!a.isZero()?"-"+n:n)};Q.toInteger=Q.toint=function(){var e=this,t=e.constructor;return Te(new t(e),tt(e)+1,t.rounding)};Q.toNumber=function(){return+this};Q.toPower=Q.pow=function(e){var t,n,r,a,o,i,s=this,l=s.constructor,u=12,p=+(e=new l(e));if(!e.s)return new l(Jt);if(s=new l(s),!s.s){if(e.s<1)throw Error(bn+"Infinity");return s}if(s.eq(Jt))return s;if(r=l.precision,e.eq(Jt))return Te(s,r);if(t=e.e,n=e.d.length-1,i=t>=n,o=s.s,i){if((n=p<0?-p:p)<=pP){for(a=new l(Jt),t=Math.ceil(r/Le+4),Be=!1;n%2&&(a=a.times(s),ab(a.d,t)),n=As(n/2),n!==0;)s=s.times(s),ab(s.d,t);return Be=!0,e.s<0?new l(Jt).div(a):Te(a,r)}}else if(o<0)throw Error(bn+"NaN");return o=o<0&&e.d[Math.max(t,n)]&1?-1:1,s.s=1,Be=!1,a=e.times(Zl(s,r+u)),Be=!0,a=dP(a),a.s=o,a};Q.toPrecision=function(e,t){var n,r,a=this,o=a.constructor;return e===void 0?(n=tt(a),r=_o(a,n<=o.toExpNeg||n>=o.toExpPos)):(vr(e,1,Cs),t===void 0?t=o.rounding:vr(t,0,8),a=Te(new o(a),e,t),n=tt(a),r=_o(a,e<=n||n<=o.toExpNeg,e)),r};Q.toSignificantDigits=Q.tosd=function(e,t){var n=this,r=n.constructor;return e===void 0?(e=r.precision,t=r.rounding):(vr(e,1,Cs),t===void 0?t=r.rounding:vr(t,0,8)),Te(new r(n),e,t)};Q.toString=Q.valueOf=Q.val=Q.toJSON=Q[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=tt(e),n=e.constructor;return _o(e,t<=n.toExpNeg||t>=n.toExpPos)};function fP(e,t){var n,r,a,o,i,s,l,u,p=e.constructor,c=p.precision;if(!e.s||!t.s)return t.s||(t=new p(e)),Be?Te(t,c):t;if(l=e.d,u=t.d,i=e.e,a=t.e,l=l.slice(),o=i-a,o){for(o<0?(r=l,o=-o,s=u.length):(r=u,a=i,s=l.length),i=Math.ceil(c/Le),s=i>s?i+1:s+1,o>s&&(o=s,r.length=1),r.reverse();o--;)r.push(0);r.reverse()}for(s=l.length,o=u.length,s-o<0&&(o=s,r=u,u=l,l=r),n=0;o;)n=(l[--o]=l[o]+u[o]+n)/ut|0,l[o]%=ut;for(n&&(l.unshift(n),++a),s=l.length;l[--s]==0;)l.pop();return t.d=l,t.e=a,Be?Te(t,c):t}function vr(e,t,n){if(e!==~~e||e<t||e>n)throw Error(fo+e)}function or(e){var t,n,r,a=e.length-1,o="",i=e[0];if(a>0){for(o+=i,t=1;t<a;t++)r=e[t]+"",n=Le-r.length,n&&(o+=na(n)),o+=r;i=e[t],r=i+"",n=Le-r.length,n&&(o+=na(n))}else if(i===0)return"0";for(;i%10===0;)i/=10;return o+i}var Nr=function(){function e(r,a){var o,i=0,s=r.length;for(r=r.slice();s--;)o=r[s]*a+i,r[s]=o%ut|0,i=o/ut|0;return i&&r.unshift(i),r}function t(r,a,o,i){var s,l;if(o!=i)l=o>i?1:-1;else for(s=l=0;s<o;s++)if(r[s]!=a[s]){l=r[s]>a[s]?1:-1;break}return l}function n(r,a,o){for(var i=0;o--;)r[o]-=i,i=r[o]<a[o]?1:0,r[o]=i*ut+r[o]-a[o];for(;!r[0]&&r.length>1;)r.shift()}return function(r,a,o,i){var s,l,u,p,c,f,d,h,m,g,v,y,x,P,w,S,O,_,C=r.constructor,j=r.s==a.s?1:-1,E=r.d,T=a.d;if(!r.s)return new C(r);if(!a.s)throw Error(bn+"Division by zero");for(l=r.e-a.e,O=T.length,w=E.length,d=new C(j),h=d.d=[],u=0;T[u]==(E[u]||0);)++u;if(T[u]>(E[u]||0)&&--l,o==null?y=o=C.precision:i?y=o+(tt(r)-tt(a))+1:y=o,y<0)return new C(0);if(y=y/Le+2|0,u=0,O==1)for(p=0,T=T[0],y++;(u<w||p)&&y--;u++)x=p*ut+(E[u]||0),h[u]=x/T|0,p=x%T|0;else{for(p=ut/(T[0]+1)|0,p>1&&(T=e(T,p),E=e(E,p),O=T.length,w=E.length),P=O,m=E.slice(0,O),g=m.length;g<O;)m[g++]=0;_=T.slice(),_.unshift(0),S=T[0],T[1]>=ut/2&&++S;do p=0,s=t(T,m,O,g),s<0?(v=m[0],O!=g&&(v=v*ut+(m[1]||0)),p=v/S|0,p>1?(p>=ut&&(p=ut-1),c=e(T,p),f=c.length,g=m.length,s=t(c,m,f,g),s==1&&(p--,n(c,O<f?_:T,f))):(p==0&&(s=p=1),c=T.slice()),f=c.length,f<g&&c.unshift(0),n(m,c,g),s==-1&&(g=m.length,s=t(T,m,O,g),s<1&&(p++,n(m,O<g?_:T,g))),g=m.length):s===0&&(p++,m=[0]),h[u++]=p,s&&m[0]?m[g++]=E[P]||0:(m=[E[P]],g=1);while((P++<w||m[0]!==void 0)&&y--)}return h[0]||h.shift(),d.e=l,Te(d,i?o+tt(d)+1:o)}}();function dP(e,t){var n,r,a,o,i,s,l=0,u=0,p=e.constructor,c=p.precision;if(tt(e)>16)throw Error(Bg+tt(e));if(!e.s)return new p(Jt);for(Be=!1,s=c,i=new p(.03125);e.abs().gte(.1);)e=e.times(i),u+=5;for(r=Math.log(Ka(2,u))/Math.LN10*2+5|0,s+=r,n=a=o=new p(Jt),p.precision=s;;){if(a=Te(a.times(e),s),n=n.times(++l),i=o.plus(Nr(a,n,s)),or(i.d).slice(0,s)===or(o.d).slice(0,s)){for(;u--;)o=Te(o.times(o),s);return p.precision=c,t==null?(Be=!0,Te(o,c)):o}o=i}}function tt(e){for(var t=e.e*Le,n=e.d[0];n>=10;n/=10)t++;return t}function Km(e,t,n){if(t>e.LN10.sd())throw Be=!0,n&&(e.precision=n),Error(bn+"LN10 precision limit exceeded");return Te(new e(e.LN10),t)}function na(e){for(var t="";e--;)t+="0";return t}function Zl(e,t){var n,r,a,o,i,s,l,u,p,c=1,f=10,d=e,h=d.d,m=d.constructor,g=m.precision;if(d.s<1)throw Error(bn+(d.s?"NaN":"-Infinity"));if(d.eq(Jt))return new m(0);if(t==null?(Be=!1,u=g):u=t,d.eq(10))return t==null&&(Be=!0),Km(m,u);if(u+=f,m.precision=u,n=or(h),r=n.charAt(0),o=tt(d),Math.abs(o)<15e14){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)d=d.times(e),n=or(d.d),r=n.charAt(0),c++;o=tt(d),r>1?(d=new m("0."+n),o++):d=new m(r+"."+n.slice(1))}else return l=Km(m,u+2,g).times(o+""),d=Zl(new m(r+"."+n.slice(1)),u-f).plus(l),m.precision=g,t==null?(Be=!0,Te(d,g)):d;for(s=i=d=Nr(d.minus(Jt),d.plus(Jt),u),p=Te(d.times(d),u),a=3;;){if(i=Te(i.times(p),u),l=s.plus(Nr(i,new m(a),u)),or(l.d).slice(0,u)===or(s.d).slice(0,u))return s=s.times(2),o!==0&&(s=s.plus(Km(m,u+2,g).times(o+""))),s=Nr(s,new m(c),u),m.precision=g,t==null?(Be=!0,Te(s,g)):s;s=l,a+=2}}function rb(e,t){var n,r,a;for((n=t.indexOf("."))>-1&&(t=t.replace(".","")),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;t.charCodeAt(r)===48;)++r;for(a=t.length;t.charCodeAt(a-1)===48;)--a;if(t=t.slice(r,a),t){if(a-=r,n=n-r-1,e.e=As(n/Le),e.d=[],r=(n+1)%Le,n<0&&(r+=Le),r<a){for(r&&e.d.push(+t.slice(0,r)),a-=Le;r<a;)e.d.push(+t.slice(r,r+=Le));t=t.slice(r),r=Le-t.length}else r-=a;for(;r--;)t+="0";if(e.d.push(+t),Be&&(e.e>Vp||e.e<-Vp))throw Error(Bg+n)}else e.s=0,e.e=0,e.d=[0];return e}function Te(e,t,n){var r,a,o,i,s,l,u,p,c=e.d;for(i=1,o=c[0];o>=10;o/=10)i++;if(r=t-i,r<0)r+=Le,a=t,u=c[p=0];else{if(p=Math.ceil((r+1)/Le),o=c.length,p>=o)return e;for(u=o=c[p],i=1;o>=10;o/=10)i++;r%=Le,a=r-Le+i}if(n!==void 0&&(o=Ka(10,i-a-1),s=u/o%10|0,l=t<0||c[p+1]!==void 0||u%o,l=n<4?(s||l)&&(n==0||n==(e.s<0?3:2)):s>5||s==5&&(n==4||l||n==6&&(r>0?a>0?u/Ka(10,i-a):0:c[p-1])%10&1||n==(e.s<0?8:7))),t<1||!c[0])return l?(o=tt(e),c.length=1,t=t-o-1,c[0]=Ka(10,(Le-t%Le)%Le),e.e=As(-t/Le)||0):(c.length=1,c[0]=e.e=e.s=0),e;if(r==0?(c.length=p,o=1,p--):(c.length=p+1,o=Ka(10,Le-r),c[p]=a>0?(u/Ka(10,i-a)%Ka(10,a)|0)*o:0),l)for(;;)if(p==0){(c[0]+=o)==ut&&(c[0]=1,++e.e);break}else{if(c[p]+=o,c[p]!=ut)break;c[p--]=0,o=1}for(r=c.length;c[--r]===0;)c.pop();if(Be&&(e.e>Vp||e.e<-Vp))throw Error(Bg+tt(e));return e}function mP(e,t){var n,r,a,o,i,s,l,u,p,c,f=e.constructor,d=f.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new f(e),Be?Te(t,d):t;if(l=e.d,c=t.d,r=t.e,u=e.e,l=l.slice(),i=u-r,i){for(p=i<0,p?(n=l,i=-i,s=c.length):(n=c,r=u,s=l.length),a=Math.max(Math.ceil(d/Le),s)+2,i>a&&(i=a,n.length=1),n.reverse(),a=i;a--;)n.push(0);n.reverse()}else{for(a=l.length,s=c.length,p=a<s,p&&(s=a),a=0;a<s;a++)if(l[a]!=c[a]){p=l[a]<c[a];break}i=0}for(p&&(n=l,l=c,c=n,t.s=-t.s),s=l.length,a=c.length-s;a>0;--a)l[s++]=0;for(a=c.length;a>i;){if(l[--a]<c[a]){for(o=a;o&&l[--o]===0;)l[o]=ut-1;--l[o],l[a]+=ut}l[a]-=c[a]}for(;l[--s]===0;)l.pop();for(;l[0]===0;l.shift())--r;return l[0]?(t.d=l,t.e=r,Be?Te(t,d):t):new f(0)}function _o(e,t,n){var r,a=tt(e),o=or(e.d),i=o.length;return t?(n&&(r=n-i)>0?o=o.charAt(0)+"."+o.slice(1)+na(r):i>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(a<0?"e":"e+")+a):a<0?(o="0."+na(-a-1)+o,n&&(r=n-i)>0&&(o+=na(r))):a>=i?(o+=na(a+1-i),n&&(r=n-a-1)>0&&(o=o+"."+na(r))):((r=a+1)<i&&(o=o.slice(0,r)+"."+o.slice(r)),n&&(r=n-i)>0&&(a+1===i&&(o+="."),o+=na(r))),e.s<0?"-"+o:o}function ab(e,t){if(e.length>t)return e.length=t,!0}function hP(e){var t,n,r;function a(o){var i=this;if(!(i instanceof a))return new a(o);if(i.constructor=a,o instanceof a){i.s=o.s,i.e=o.e,i.d=(o=o.d)?o.slice():o;return}if(typeof o=="number"){if(o*0!==0)throw Error(fo+o);if(o>0)i.s=1;else if(o<0)o=-o,i.s=-1;else{i.s=0,i.e=0,i.d=[0];return}if(o===~~o&&o<1e7){i.e=0,i.d=[o];return}return rb(i,o.toString())}else if(typeof o!="string")throw Error(fo+o);if(o.charCodeAt(0)===45?(o=o.slice(1),i.s=-1):i.s=1,vX.test(o))rb(i,o);else throw Error(fo+o)}if(a.prototype=Q,a.ROUND_UP=0,a.ROUND_DOWN=1,a.ROUND_CEIL=2,a.ROUND_FLOOR=3,a.ROUND_HALF_UP=4,a.ROUND_HALF_DOWN=5,a.ROUND_HALF_EVEN=6,a.ROUND_HALF_CEIL=7,a.ROUND_HALF_FLOOR=8,a.clone=hP,a.config=a.set=yX,e===void 0&&(e={}),e)for(r=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t<r.length;)e.hasOwnProperty(n=r[t++])||(e[n]=this[n]);return a.config(e),a}function yX(e){if(!e||typeof e!="object")throw Error(bn+"Object expected");var t,n,r,a=["precision",1,Cs,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(t=0;t<a.length;t+=3)if((r=e[n=a[t]])!==void 0)if(As(r)===r&&r>=a[t+1]&&r<=a[t+2])this[n]=r;else throw Error(fo+n+": "+r);if((r=e[n="LN10"])!==void 0)if(r==Math.LN10)this[n]=new this(r);else throw Error(fo+n+": "+r);return this}var Hg=hP(hX);Jt=new Hg(1);const Ce=Hg;function gX(e){return PX(e)||bX(e)||wX(e)||xX()}function xX(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function wX(e,t){if(e){if(typeof e=="string")return H0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return H0(e,t)}}function bX(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function PX(e){if(Array.isArray(e))return H0(e)}function H0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var SX=function(t){return t},vP={},yP=function(t){return t===vP},ob=function(t){return function n(){return arguments.length===0||arguments.length===1&&yP(arguments.length<=0?void 0:arguments[0])?n:t.apply(void 0,arguments)}},OX=function e(t,n){return t===1?n:ob(function(){for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];var i=a.filter(function(s){return s!==vP}).length;return i>=t?n.apply(void 0,a):e(t-i,ob(function(){for(var s=arguments.length,l=new Array(s),u=0;u<s;u++)l[u]=arguments[u];var p=a.map(function(c){return yP(c)?l.shift():c});return n.apply(void 0,gX(p).concat(l))}))})},kd=function(t){return OX(t.length,t)},G0=function(t,n){for(var r=[],a=t;a<n;++a)r[a-t]=a;return r},kX=kd(function(e,t){return Array.isArray(t)?t.map(e):Object.keys(t).map(function(n){return t[n]}).map(e)}),_X=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return SX;var a=n.reverse(),o=a[0],i=a.slice(1);return function(){return i.reduce(function(s,l){return l(s)},o.apply(void 0,arguments))}},U0=function(t){return Array.isArray(t)?t.reverse():t.split("").reverse.join("")},gP=function(t){var n=null,r=null;return function(){for(var a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return n&&o.every(function(s,l){return s===n[l]})||(n=o,r=t.apply(void 0,o)),r}};function CX(e){var t;return e===0?t=1:t=Math.floor(new Ce(e).abs().log(10).toNumber())+1,t}function AX(e,t,n){for(var r=new Ce(e),a=0,o=[];r.lt(t)&&a<1e5;)o.push(r.toNumber()),r=r.add(n),a++;return o}var EX=kd(function(e,t,n){var r=+e,a=+t;return r+n*(a-r)}),TX=kd(function(e,t,n){var r=t-+e;return r=r||1/0,(n-e)/r}),jX=kd(function(e,t,n){var r=t-+e;return r=r||1/0,Math.max(0,Math.min(1,(n-e)/r))});const _d={rangeStep:AX,getDigitCount:CX,interpolateNumber:EX,uninterpolateNumber:TX,uninterpolateTruncation:jX};function W0(e){return MX(e)||NX(e)||xP(e)||$X()}function $X(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function NX(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function MX(e){if(Array.isArray(e))return q0(e)}function Jl(e,t){return DX(e)||IX(e,t)||xP(e,t)||RX()}function RX(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function xP(e,t){if(e){if(typeof e=="string")return q0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return q0(e,t)}}function q0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function IX(e,t){if(!(typeof Symbol>"u"||!(Symbol.iterator in Object(e)))){var n=[],r=!0,a=!1,o=void 0;try{for(var i=e[Symbol.iterator](),s;!(r=(s=i.next()).done)&&(n.push(s.value),!(t&&n.length===t));r=!0);}catch(l){a=!0,o=l}finally{try{!r&&i.return!=null&&i.return()}finally{if(a)throw o}}return n}}function DX(e){if(Array.isArray(e))return e}function wP(e){var t=Jl(e,2),n=t[0],r=t[1],a=n,o=r;return n>r&&(a=r,o=n),[a,o]}function bP(e,t,n){if(e.lte(0))return new Ce(0);var r=_d.getDigitCount(e.toNumber()),a=new Ce(10).pow(r),o=e.div(a),i=r!==1?.05:.1,s=new Ce(Math.ceil(o.div(i).toNumber())).add(n).mul(i),l=s.mul(a);return t?l:new Ce(Math.ceil(l))}function LX(e,t,n){var r=1,a=new Ce(e);if(!a.isint()&&n){var o=Math.abs(e);o<1?(r=new Ce(10).pow(_d.getDigitCount(e)-1),a=new Ce(Math.floor(a.div(r).toNumber())).mul(r)):o>1&&(a=new Ce(Math.floor(e)))}else e===0?a=new Ce(Math.floor((t-1)/2)):n||(a=new Ce(Math.floor(e)));var i=Math.floor((t-1)/2),s=_X(kX(function(l){return a.add(new Ce(l-i).mul(r)).toNumber()}),G0);return s(0,t)}function PP(e,t,n,r){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((t-e)/(n-1)))return{step:new Ce(0),tickMin:new Ce(0),tickMax:new Ce(0)};var o=bP(new Ce(t).sub(e).div(n-1),r,a),i;e<=0&&t>=0?i=new Ce(0):(i=new Ce(e).add(t).div(2),i=i.sub(new Ce(i).mod(o)));var s=Math.ceil(i.sub(e).div(o).toNumber()),l=Math.ceil(new Ce(t).sub(i).div(o).toNumber()),u=s+l+1;return u>n?PP(e,t,n,r,a+1):(u<n&&(l=t>0?l+(n-u):l,s=t>0?s:s+(n-u)),{step:o,tickMin:i.sub(new Ce(s).mul(o)),tickMax:i.add(new Ce(l).mul(o))})}function FX(e){var t=Jl(e,2),n=t[0],r=t[1],a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=Math.max(a,2),s=wP([n,r]),l=Jl(s,2),u=l[0],p=l[1];if(u===-1/0||p===1/0){var c=p===1/0?[u].concat(W0(G0(0,a-1).map(function(){return 1/0}))):[].concat(W0(G0(0,a-1).map(function(){return-1/0})),[p]);return n>r?U0(c):c}if(u===p)return LX(u,a,o);var f=PP(u,p,i,o),d=f.step,h=f.tickMin,m=f.tickMax,g=_d.rangeStep(h,m.add(new Ce(.1).mul(d)),d);return n>r?U0(g):g}function zX(e,t){var n=Jl(e,2),r=n[0],a=n[1],o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=wP([r,a]),s=Jl(i,2),l=s[0],u=s[1];if(l===-1/0||u===1/0)return[r,a];if(l===u)return[l];var p=Math.max(t,2),c=bP(new Ce(u).sub(l).div(p-1),o,0),f=[].concat(W0(_d.rangeStep(new Ce(l),new Ce(u).sub(new Ce(.99).mul(c)),c)),[u]);return r>a?U0(f):f}var BX=gP(FX),HX=gP(zX),GX="Invariant failed";function Co(e,t){throw new Error(GX)}var UX=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function Gi(e){"@babel/helpers - typeof";return Gi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gi(e)}function Kp(){return Kp=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Kp.apply(this,arguments)}function WX(e,t){return XX(e)||KX(e,t)||VX(e,t)||qX()}function qX(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function VX(e,t){if(e){if(typeof e=="string")return ib(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ib(e,t)}}function ib(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function KX(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function XX(e){if(Array.isArray(e))return e}function YX(e,t){if(e==null)return{};var n=QX(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QX(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function ZX(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function JX(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,kP(r.key),r)}}function eY(e,t,n){return t&&JX(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function tY(e,t,n){return t=Xp(t),nY(e,SP()?Reflect.construct(t,n||[],Xp(e).constructor):t.apply(e,n))}function nY(e,t){if(t&&(Gi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return rY(e)}function rY(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function SP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(SP=function(){return!!e})()}function Xp(e){return Xp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Xp(e)}function aY(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&V0(e,t)}function V0(e,t){return V0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},V0(e,t)}function OP(e,t,n){return t=kP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kP(e){var t=oY(e,"string");return Gi(t)=="symbol"?t:t+""}function oY(e,t){if(Gi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Gi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Es=function(e){function t(){return ZX(this,t),tY(this,t,arguments)}return aY(t,e),eY(t,[{key:"render",value:function(){var r=this.props,a=r.offset,o=r.layout,i=r.width,s=r.dataKey,l=r.data,u=r.dataPointFormatter,p=r.xAxis,c=r.yAxis,f=YX(r,UX),d=re(f,!1);this.props.direction==="x"&&p.type!=="number"&&Co();var h=l.map(function(m){var g=u(m,s),v=g.x,y=g.y,x=g.value,P=g.errorVal;if(!P)return null;var w=[],S,O;if(Array.isArray(P)){var _=WX(P,2);S=_[0],O=_[1]}else S=O=P;if(o==="vertical"){var C=p.scale,j=y+a,E=j+i,T=j-i,N=C(x-S),M=C(x+O);w.push({x1:M,y1:E,x2:M,y2:T}),w.push({x1:N,y1:j,x2:M,y2:j}),w.push({x1:N,y1:E,x2:N,y2:T})}else if(o==="horizontal"){var I=c.scale,R=v+a,L=R-i,$=R+i,D=I(x-S),H=I(x+O);w.push({x1:L,y1:H,x2:$,y2:H}),w.push({x1:R,y1:D,x2:R,y2:H}),w.push({x1:L,y1:D,x2:$,y2:D})}return A.createElement(ye,Kp({className:"recharts-errorBar",key:"bar-".concat(w.map(function(W){return"".concat(W.x1,"-").concat(W.x2,"-").concat(W.y1,"-").concat(W.y2)}))},d),w.map(function(W){return A.createElement("line",Kp({},W,{key:"line-".concat(W.x1,"-").concat(W.x2,"-").concat(W.y1,"-").concat(W.y2)}))}))});return A.createElement(ye,{className:"recharts-errorBars"},h)}}])}(A.Component);OP(Es,"defaultProps",{stroke:"black",strokeWidth:1.5,width:5,offset:0,layout:"horizontal"});OP(Es,"displayName","ErrorBar");function eu(e){"@babel/helpers - typeof";return eu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},eu(e)}function sb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ga(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?sb(Object(n),!0).forEach(function(r){iY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):sb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function iY(e,t,n){return t=sY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function sY(e){var t=lY(e,"string");return eu(t)=="symbol"?t:t+""}function lY(e,t){if(eu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(eu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var _P=function(t){var n=t.children,r=t.formattedGraphicalItems,a=t.legendWidth,o=t.legendContent,i=Qt(n,hi);if(!i)return null;var s=hi.defaultProps,l=s!==void 0?Ga(Ga({},s),i.props):{},u;return i.props&&i.props.payload?u=i.props&&i.props.payload:o==="children"?u=(r||[]).reduce(function(p,c){var f=c.item,d=c.props,h=d.sectors||d.data||[];return p.concat(h.map(function(m){return{type:i.props.iconType||f.props.legendType,value:m.name,color:m.fill,payload:m}}))},[]):u=(r||[]).map(function(p){var c=p.item,f=c.type.defaultProps,d=f!==void 0?Ga(Ga({},f),c.props):{},h=d.dataKey,m=d.name,g=d.legendType,v=d.hide;return{inactive:v,dataKey:h,type:l.iconType||g||"square",color:Gg(c),value:m||h,payload:d}}),Ga(Ga(Ga({},l),hi.getWithHeight(i,a)),{},{payload:u,item:i})};function tu(e){"@babel/helpers - typeof";return tu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tu(e)}function lb(e){return fY(e)||pY(e)||cY(e)||uY()}function uY(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function cY(e,t){if(e){if(typeof e=="string")return K0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return K0(e,t)}}function pY(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function fY(e){if(Array.isArray(e))return K0(e)}function K0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function ub(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ve(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?ub(Object(n),!0).forEach(function(r){yi(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ub(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function yi(e,t,n){return t=dY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function dY(e){var t=mY(e,"string");return tu(t)=="symbol"?t:t+""}function mY(e,t){if(tu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(tu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function st(e,t,n){return te(e)||te(t)?n:it(t)?gn(e,t,n):oe(t)?t(e):n}function ml(e,t,n,r){var a=pX(e,function(s){return st(s,t)});if(n==="number"){var o=a.filter(function(s){return V(s)||parseFloat(s)});return o.length?[Od(o),da(o)]:[1/0,-1/0]}var i=r?a.filter(function(s){return!te(s)}):a;return i.map(function(s){return it(s)||s instanceof Date?s:""})}var hY=function(t){var n,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],a=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,i=-1,s=(n=r==null?void 0:r.length)!==null&&n!==void 0?n:0;if(s<=1)return 0;if(o&&o.axisType==="angleAxis"&&Math.abs(Math.abs(o.range[1]-o.range[0])-360)<=1e-6)for(var l=o.range,u=0;u<s;u++){var p=u>0?a[u-1].coordinate:a[s-1].coordinate,c=a[u].coordinate,f=u>=s-1?a[0].coordinate:a[u+1].coordinate,d=void 0;if(Dn(c-p)!==Dn(f-c)){var h=[];if(Dn(f-c)===Dn(l[1]-l[0])){d=f;var m=c+l[1]-l[0];h[0]=Math.min(m,(m+p)/2),h[1]=Math.max(m,(m+p)/2)}else{d=p;var g=f+l[1]-l[0];h[0]=Math.min(c,(g+c)/2),h[1]=Math.max(c,(g+c)/2)}var v=[Math.min(c,(d+c)/2),Math.max(c,(d+c)/2)];if(t>v[0]&&t<=v[1]||t>=h[0]&&t<=h[1]){i=a[u].index;break}}else{var y=Math.min(p,f),x=Math.max(p,f);if(t>(y+c)/2&&t<=(x+c)/2){i=a[u].index;break}}}else for(var P=0;P<s;P++)if(P===0&&t<=(r[P].coordinate+r[P+1].coordinate)/2||P>0&&P<s-1&&t>(r[P].coordinate+r[P-1].coordinate)/2&&t<=(r[P].coordinate+r[P+1].coordinate)/2||P===s-1&&t>(r[P].coordinate+r[P-1].coordinate)/2){i=r[P].index;break}return i},Gg=function(t){var n,r=t,a=r.type.displayName,o=(n=t.type)!==null&&n!==void 0&&n.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,i=o.stroke,s=o.fill,l;switch(a){case"Line":l=i;break;case"Area":case"Radar":l=i&&i!=="none"?i:s;break;default:l=s;break}return l},vY=function(t){var n=t.barSize,r=t.totalSize,a=t.stackGroups,o=a===void 0?{}:a;if(!o)return{};for(var i={},s=Object.keys(o),l=0,u=s.length;l<u;l++)for(var p=o[s[l]].stackGroups,c=Object.keys(p),f=0,d=c.length;f<d;f++){var h=p[c[f]],m=h.items,g=h.cateAxisId,v=m.filter(function(O){return jr(O.type).indexOf("Bar")>=0});if(v&&v.length){var y=v[0].type.defaultProps,x=y!==void 0?Ve(Ve({},y),v[0].props):v[0].props,P=x.barSize,w=x[g];i[w]||(i[w]=[]);var S=te(P)?n:P;i[w].push({item:v[0],stackList:v.slice(1),barSize:te(S)?void 0:Oo(S,r,0)})}}return i},yY=function(t){var n=t.barGap,r=t.barCategoryGap,a=t.bandSize,o=t.sizeList,i=o===void 0?[]:o,s=t.maxBarSize,l=i.length;if(l<1)return null;var u=Oo(n,a,0,!0),p,c=[];if(i[0].barSize===+i[0].barSize){var f=!1,d=a/l,h=i.reduce(function(P,w){return P+w.barSize||0},0);h+=(l-1)*u,h>=a&&(h-=(l-1)*u,u=0),h>=a&&d>0&&(f=!0,d*=.9,h=l*d);var m=(a-h)/2>>0,g={offset:m-u,size:0};p=i.reduce(function(P,w){var S={item:w.item,position:{offset:g.offset+g.size+u,size:f?d:w.barSize}},O=[].concat(lb(P),[S]);return g=O[O.length-1].position,w.stackList&&w.stackList.length&&w.stackList.forEach(function(_){O.push({item:_,position:g})}),O},c)}else{var v=Oo(r,a,0,!0);a-2*v-(l-1)*u<=0&&(u=0);var y=(a-2*v-(l-1)*u)/l;y>1&&(y>>=0);var x=s===+s?Math.min(y,s):y;p=i.reduce(function(P,w,S){var O=[].concat(lb(P),[{item:w.item,position:{offset:v+(y+u)*S+(y-x)/2,size:x}}]);return w.stackList&&w.stackList.length&&w.stackList.forEach(function(_){O.push({item:_,position:O[O.length-1].position})}),O},c)}return p},gY=function(t,n,r,a){var o=r.children,i=r.width,s=r.margin,l=i-(s.left||0)-(s.right||0),u=_P({children:o,legendWidth:l});if(u){var p=a||{},c=p.width,f=p.height,d=u.align,h=u.verticalAlign,m=u.layout;if((m==="vertical"||m==="horizontal"&&h==="middle")&&d!=="center"&&V(t[d]))return Ve(Ve({},t),{},yi({},d,t[d]+(c||0)));if((m==="horizontal"||m==="vertical"&&d==="center")&&h!=="middle"&&V(t[h]))return Ve(Ve({},t),{},yi({},h,t[h]+(f||0)))}return t},xY=function(t,n,r){return te(n)?!0:t==="horizontal"?n==="yAxis":t==="vertical"||r==="x"?n==="xAxis":r==="y"?n==="yAxis":!0},CP=function(t,n,r,a,o){var i=n.props.children,s=qt(i,Es).filter(function(u){return xY(a,o,u.props.direction)});if(s&&s.length){var l=s.map(function(u){return u.props.dataKey});return t.reduce(function(u,p){var c=st(p,r);if(te(c))return u;var f=Array.isArray(c)?[Od(c),da(c)]:[c,c],d=l.reduce(function(h,m){var g=st(p,m,0),v=f[0]-Math.abs(Array.isArray(g)?g[0]:g),y=f[1]+Math.abs(Array.isArray(g)?g[1]:g);return[Math.min(v,h[0]),Math.max(y,h[1])]},[1/0,-1/0]);return[Math.min(d[0],u[0]),Math.max(d[1],u[1])]},[1/0,-1/0])}return null},wY=function(t,n,r,a,o){var i=n.map(function(s){return CP(t,s,r,o,a)}).filter(function(s){return!te(s)});return i&&i.length?i.reduce(function(s,l){return[Math.min(s[0],l[0]),Math.max(s[1],l[1])]},[1/0,-1/0]):null},AP=function(t,n,r,a,o){var i=n.map(function(l){var u=l.props.dataKey;return r==="number"&&u&&CP(t,l,u,a)||ml(t,u,r,o)});if(r==="number")return i.reduce(function(l,u){return[Math.min(l[0],u[0]),Math.max(l[1],u[1])]},[1/0,-1/0]);var s={};return i.reduce(function(l,u){for(var p=0,c=u.length;p<c;p++)s[u[p]]||(s[u[p]]=!0,l.push(u[p]));return l},[])},EP=function(t,n){return t==="horizontal"&&n==="xAxis"||t==="vertical"&&n==="yAxis"||t==="centric"&&n==="angleAxis"||t==="radial"&&n==="radiusAxis"},TP=function(t,n,r,a){if(a)return t.map(function(l){return l.coordinate});var o,i,s=t.map(function(l){return l.coordinate===n&&(o=!0),l.coordinate===r&&(i=!0),l.coordinate});return o||s.push(n),i||s.push(r),s},Er=function(t,n,r){if(!t)return null;var a=t.scale,o=t.duplicateDomain,i=t.type,s=t.range,l=t.realScaleType==="scaleBand"?a.bandwidth()/2:2,u=(n||r)&&i==="category"&&a.bandwidth?a.bandwidth()/l:0;if(u=t.axisType==="angleAxis"&&(s==null?void 0:s.length)>=2?Dn(s[0]-s[1])*2*u:u,n&&(t.ticks||t.niceTicks)){var p=(t.ticks||t.niceTicks).map(function(c){var f=o?o.indexOf(c):c;return{coordinate:a(f)+u,value:c,offset:u}});return p.filter(function(c){return!Ps(c.coordinate)})}return t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map(function(c,f){return{coordinate:a(c)+u,value:c,index:f,offset:u}}):a.ticks&&!r?a.ticks(t.tickCount).map(function(c){return{coordinate:a(c)+u,value:c,offset:u}}):a.domain().map(function(c,f){return{coordinate:a(c)+u,value:o?o[c]:c,index:f,offset:u}})},Xm=new WeakMap,gc=function(t,n){if(typeof n!="function")return t;Xm.has(t)||Xm.set(t,new WeakMap);var r=Xm.get(t);if(r.has(n))return r.get(n);var a=function(){t.apply(void 0,arguments),n.apply(void 0,arguments)};return r.set(n,a),a},bY=function(t,n,r){var a=t.scale,o=t.type,i=t.layout,s=t.axisType;if(a==="auto")return i==="radial"&&s==="radiusAxis"?{scale:Vl(),realScaleType:"band"}:i==="radial"&&s==="angleAxis"?{scale:Gp(),realScaleType:"linear"}:o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?{scale:dl(),realScaleType:"point"}:o==="category"?{scale:Vl(),realScaleType:"band"}:{scale:Gp(),realScaleType:"linear"};if(So(a)){var l="scale".concat(cd(a));return{scale:(nb[l]||dl)(),realScaleType:nb[l]?l:"point"}}return oe(a)?{scale:a}:{scale:dl(),realScaleType:"point"}},cb=1e-4,PY=function(t){var n=t.domain();if(!(!n||n.length<=2)){var r=n.length,a=t.range(),o=Math.min(a[0],a[1])-cb,i=Math.max(a[0],a[1])+cb,s=t(n[0]),l=t(n[r-1]);(s<o||s>i||l<o||l>i)&&t.domain([n[0],n[r-1]])}},SY=function(t,n){if(!t)return null;for(var r=0,a=t.length;r<a;r++)if(t[r].item===n)return t[r].position;return null},OY=function(t,n){if(!n||n.length!==2||!V(n[0])||!V(n[1]))return t;var r=Math.min(n[0],n[1]),a=Math.max(n[0],n[1]),o=[t[0],t[1]];return(!V(t[0])||t[0]<r)&&(o[0]=r),(!V(t[1])||t[1]>a)&&(o[1]=a),o[0]>a&&(o[0]=a),o[1]<r&&(o[1]=r),o},kY=function(t){var n=t.length;if(!(n<=0))for(var r=0,a=t[0].length;r<a;++r)for(var o=0,i=0,s=0;s<n;++s){var l=Ps(t[s][r][1])?t[s][r][0]:t[s][r][1];l>=0?(t[s][r][0]=o,t[s][r][1]=o+l,o=t[s][r][1]):(t[s][r][0]=i,t[s][r][1]=i+l,i=t[s][r][1])}},_Y=function(t){var n=t.length;if(!(n<=0))for(var r=0,a=t[0].length;r<a;++r)for(var o=0,i=0;i<n;++i){var s=Ps(t[i][r][1])?t[i][r][0]:t[i][r][1];s>=0?(t[i][r][0]=o,t[i][r][1]=o+s,o=t[i][r][1]):(t[i][r][0]=0,t[i][r][1]=0)}},CY={sign:kY,expand:BI,none:Ri,silhouette:HI,wiggle:GI,positive:_Y},AY=function(t,n,r){var a=n.map(function(s){return s.props.dataKey}),o=CY[r],i=zI().keys(a).value(function(s,l){return+st(s,l,0)}).order(x0).offset(o);return i(t)},EY=function(t,n,r,a,o,i){if(!t)return null;var s=i?n.reverse():n,l={},u=s.reduce(function(c,f){var d,h=(d=f.type)!==null&&d!==void 0&&d.defaultProps?Ve(Ve({},f.type.defaultProps),f.props):f.props,m=h.stackId,g=h.hide;if(g)return c;var v=h[r],y=c[v]||{hasStack:!1,stackGroups:{}};if(it(m)){var x=y.stackGroups[m]||{numericAxisId:r,cateAxisId:a,items:[]};x.items.push(f),y.hasStack=!0,y.stackGroups[m]=x}else y.stackGroups[$o("_stackId_")]={numericAxisId:r,cateAxisId:a,items:[f]};return Ve(Ve({},c),{},yi({},v,y))},l),p={};return Object.keys(u).reduce(function(c,f){var d=u[f];if(d.hasStack){var h={};d.stackGroups=Object.keys(d.stackGroups).reduce(function(m,g){var v=d.stackGroups[g];return Ve(Ve({},m),{},yi({},g,{numericAxisId:r,cateAxisId:a,items:v.items,stackedData:AY(t,v.items,o)}))},h)}return Ve(Ve({},c),{},yi({},f,d))},p)},TY=function(t,n){var r=n.realScaleType,a=n.type,o=n.tickCount,i=n.originalDomain,s=n.allowDecimals,l=r||n.scale;if(l!=="auto"&&l!=="linear")return null;if(o&&a==="number"&&i&&(i[0]==="auto"||i[1]==="auto")){var u=t.domain();if(!u.length)return null;var p=BX(u,o,s);return t.domain([Od(p),da(p)]),{niceTicks:p}}if(o&&a==="number"){var c=t.domain(),f=HX(c,o,s);return{niceTicks:f}}return null};function Ui(e){var t=e.axis,n=e.ticks,r=e.bandSize,a=e.entry,o=e.index,i=e.dataKey;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!te(a[t.dataKey])){var s=bp(n,"value",a[t.dataKey]);if(s)return s.coordinate+r/2}return n[o]?n[o].coordinate+r/2:null}var l=st(a,te(i)?t.dataKey:i);return te(l)?null:t.scale(l)}var pb=function(t){var n=t.axis,r=t.ticks,a=t.offset,o=t.bandSize,i=t.entry,s=t.index;if(n.type==="category")return r[s]?r[s].coordinate+a:null;var l=st(i,n.dataKey,n.domain[s]);return te(l)?null:n.scale(l)-o/2+a},jY=function(t){var n=t.numericAxis,r=n.scale.domain();if(n.type==="number"){var a=Math.min(r[0],r[1]),o=Math.max(r[0],r[1]);return a<=0&&o>=0?0:o<0?o:a}return r[0]},$Y=function(t,n){var r,a=(r=t.type)!==null&&r!==void 0&&r.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,o=a.stackId;if(it(o)){var i=n[o];if(i){var s=i.items.indexOf(t);return s>=0?i.stackedData[s]:null}}return null},NY=function(t){return t.reduce(function(n,r){return[Od(r.concat([n[0]]).filter(V)),da(r.concat([n[1]]).filter(V))]},[1/0,-1/0])},jP=function(t,n,r){return Object.keys(t).reduce(function(a,o){var i=t[o],s=i.stackedData,l=s.reduce(function(u,p){var c=NY(p.slice(n,r+1));return[Math.min(u[0],c[0]),Math.max(u[1],c[1])]},[1/0,-1/0]);return[Math.min(l[0],a[0]),Math.max(l[1],a[1])]},[1/0,-1/0]).map(function(a){return a===1/0||a===-1/0?0:a})},fb=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,db=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,X0=function(t,n,r){if(oe(t))return t(n,r);if(!Array.isArray(t))return n;var a=[];if(V(t[0]))a[0]=r?t[0]:Math.min(t[0],n[0]);else if(fb.test(t[0])){var o=+fb.exec(t[0])[1];a[0]=n[0]-o}else oe(t[0])?a[0]=t[0](n[0]):a[0]=n[0];if(V(t[1]))a[1]=r?t[1]:Math.max(t[1],n[1]);else if(db.test(t[1])){var i=+db.exec(t[1])[1];a[1]=n[1]+i}else oe(t[1])?a[1]=t[1](n[1]):a[1]=n[1];return a},Yp=function(t,n,r){if(t&&t.scale&&t.scale.bandwidth){var a=t.scale.bandwidth();if(!r||a>0)return a}if(t&&n&&n.length>=2){for(var o=vg(n,function(c){return c.coordinate}),i=1/0,s=1,l=o.length;s<l;s++){var u=o[s],p=o[s-1];i=Math.min((u.coordinate||0)-(p.coordinate||0),i)}return i===1/0?0:i}return r?void 0:0},mb=function(t,n,r){return!t||!t.length||ko(t,gn(r,"type.defaultProps.domain"))?n:t},$P=function(t,n){var r=t.type.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,a=r.dataKey,o=r.name,i=r.unit,s=r.formatter,l=r.tooltipType,u=r.chartType,p=r.hide;return Ve(Ve({},re(t,!1)),{},{dataKey:a,unit:i,formatter:s,name:o||a,color:Gg(t),value:st(n,a),type:l,payload:n,chartType:u,hide:p})};function nu(e){"@babel/helpers - typeof";return nu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},nu(e)}function hb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function vb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?hb(Object(n),!0).forEach(function(r){MY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function MY(e,t,n){return t=RY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function RY(e){var t=IY(e,"string");return nu(t)=="symbol"?t:t+""}function IY(e,t){if(nu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(nu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Qp=Math.PI/180,DY=function(t){return t*180/Math.PI},vt=function(t,n,r,a){return{x:t+Math.cos(-Qp*a)*r,y:n+Math.sin(-Qp*a)*r}},LY=function(t,n){var r=t.x,a=t.y,o=n.x,i=n.y;return Math.sqrt(Math.pow(r-o,2)+Math.pow(a-i,2))},FY=function(t,n){var r=t.x,a=t.y,o=n.cx,i=n.cy,s=LY({x:r,y:a},{x:o,y:i});if(s<=0)return{radius:s};var l=(r-o)/s,u=Math.acos(l);return a>i&&(u=2*Math.PI-u),{radius:s,angle:DY(u),angleInRadian:u}},zY=function(t){var n=t.startAngle,r=t.endAngle,a=Math.floor(n/360),o=Math.floor(r/360),i=Math.min(a,o);return{startAngle:n-i*360,endAngle:r-i*360}},BY=function(t,n){var r=n.startAngle,a=n.endAngle,o=Math.floor(r/360),i=Math.floor(a/360),s=Math.min(o,i);return t+s*360},yb=function(t,n){var r=t.x,a=t.y,o=FY({x:r,y:a},n),i=o.radius,s=o.angle,l=n.innerRadius,u=n.outerRadius;if(i<l||i>u)return!1;if(i===0)return!0;var p=zY(n),c=p.startAngle,f=p.endAngle,d=s,h;if(c<=f){for(;d>f;)d-=360;for(;d<c;)d+=360;h=d>=c&&d<=f}else{for(;d>c;)d-=360;for(;d<f;)d+=360;h=d>=f&&d<=c}return h?vb(vb({},n),{},{radius:i,angle:BY(d,n)}):null};function ru(e){"@babel/helpers - typeof";return ru=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ru(e)}var HY=["offset"];function GY(e){return VY(e)||qY(e)||WY(e)||UY()}function UY(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function WY(e,t){if(e){if(typeof e=="string")return Y0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Y0(e,t)}}function qY(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function VY(e){if(Array.isArray(e))return Y0(e)}function Y0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function KY(e,t){if(e==null)return{};var n=XY(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XY(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function gb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function rt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?gb(Object(n),!0).forEach(function(r){YY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function YY(e,t,n){return t=QY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function QY(e){var t=ZY(e,"string");return ru(t)=="symbol"?t:t+""}function ZY(e,t){if(ru(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ru(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function au(){return au=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},au.apply(this,arguments)}var JY=function(t){var n=t.value,r=t.formatter,a=te(t.children)?n:t.children;return oe(r)?r(a):a},eQ=function(t,n){var r=Dn(n-t),a=Math.min(Math.abs(n-t),360);return r*a},tQ=function(t,n,r){var a=t.position,o=t.viewBox,i=t.offset,s=t.className,l=o,u=l.cx,p=l.cy,c=l.innerRadius,f=l.outerRadius,d=l.startAngle,h=l.endAngle,m=l.clockWise,g=(c+f)/2,v=eQ(d,h),y=v>=0?1:-1,x,P;a==="insideStart"?(x=d+y*i,P=m):a==="insideEnd"?(x=h-y*i,P=!m):a==="end"&&(x=h+y*i,P=m),P=v<=0?P:!P;var w=vt(u,p,g,x),S=vt(u,p,g,x+(P?1:-1)*359),O="M".concat(w.x,",").concat(w.y,`
     A`).concat(g,",").concat(g,",0,1,").concat(P?0:1,`,
-    `).concat(S.x,",").concat(S.y),_=te(t.id)?$o("recharts-radial-line-"):t.id;return C.createElement("text",au({},r,{dominantBaseline:"central",className:ue("recharts-radial-bar-label",s)}),C.createElement("defs",null,C.createElement("path",{id:_,d:O})),C.createElement("textPath",{xlinkHref:"#".concat(_)},n))},HY=function(t){var n=t.viewBox,r=t.offset,a=t.position,o=n,i=o.cx,s=o.cy,l=o.innerRadius,u=o.outerRadius,f=o.startAngle,c=o.endAngle,p=(f+c)/2;if(a==="outside"){var d=vt(i,s,u+r,p),h=d.x,m=d.y;return{x:h,y:m,textAnchor:h>=i?"start":"end",verticalAnchor:"middle"}}if(a==="center")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"middle"};if(a==="centerTop")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"start"};if(a==="centerBottom")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"end"};var g=(l+u)/2,v=vt(i,s,g,p),y=v.x,x=v.y;return{x:y,y:x,textAnchor:"middle",verticalAnchor:"middle"}},GY=function(t){var n=t.viewBox,r=t.parentViewBox,a=t.offset,o=t.position,i=n,s=i.x,l=i.y,u=i.width,f=i.height,c=f>=0?1:-1,p=c*a,d=c>0?"end":"start",h=c>0?"start":"end",m=u>=0?1:-1,g=m*a,v=m>0?"end":"start",y=m>0?"start":"end";if(o==="top"){var x={x:s+u/2,y:l-c*a,textAnchor:"middle",verticalAnchor:d};return rt(rt({},x),r?{height:Math.max(l-r.y,0),width:u}:{})}if(o==="bottom"){var P={x:s+u/2,y:l+f+p,textAnchor:"middle",verticalAnchor:h};return rt(rt({},P),r?{height:Math.max(r.y+r.height-(l+f),0),width:u}:{})}if(o==="left"){var w={x:s-g,y:l+f/2,textAnchor:v,verticalAnchor:"middle"};return rt(rt({},w),r?{width:Math.max(w.x-r.x,0),height:f}:{})}if(o==="right"){var S={x:s+u+g,y:l+f/2,textAnchor:y,verticalAnchor:"middle"};return rt(rt({},S),r?{width:Math.max(r.x+r.width-S.x,0),height:f}:{})}var O=r?{width:u,height:f}:{};return o==="insideLeft"?rt({x:s+g,y:l+f/2,textAnchor:y,verticalAnchor:"middle"},O):o==="insideRight"?rt({x:s+u-g,y:l+f/2,textAnchor:v,verticalAnchor:"middle"},O):o==="insideTop"?rt({x:s+u/2,y:l+p,textAnchor:"middle",verticalAnchor:h},O):o==="insideBottom"?rt({x:s+u/2,y:l+f-p,textAnchor:"middle",verticalAnchor:d},O):o==="insideTopLeft"?rt({x:s+g,y:l+p,textAnchor:y,verticalAnchor:h},O):o==="insideTopRight"?rt({x:s+u-g,y:l+p,textAnchor:v,verticalAnchor:h},O):o==="insideBottomLeft"?rt({x:s+g,y:l+f-p,textAnchor:y,verticalAnchor:d},O):o==="insideBottomRight"?rt({x:s+u-g,y:l+f-p,textAnchor:v,verticalAnchor:d},O):gs(o)&&(V(o.x)||Za(o.x))&&(V(o.y)||Za(o.y))?rt({x:s+Oo(o.x,u),y:l+Oo(o.y,f),textAnchor:"end",verticalAnchor:"end"},O):rt({x:s+u/2,y:l+f/2,textAnchor:"middle",verticalAnchor:"middle"},O)},UY=function(t){return"cx"in t&&V(t.cx)};function At(e){var t=e.offset,n=t===void 0?5:t,r=MY(e,CY),a=rt({offset:n},r),o=a.viewBox,i=a.position,s=a.value,l=a.children,u=a.content,f=a.className,c=f===void 0?"":f,p=a.textBreakAll;if(!o||te(s)&&te(l)&&!k.isValidElement(u)&&!oe(u))return null;if(k.isValidElement(u))return k.cloneElement(u,a);var d;if(oe(u)){if(d=k.createElement(u,a),k.isValidElement(d))return d}else d=FY(a);var h=UY(o),m=re(a,!0);if(h&&(i==="insideStart"||i==="insideEnd"||i==="end"))return BY(a,d,m);var g=h?HY(a):GY(a);return C.createElement(Df,au({className:ue("recharts-label",c)},m,g,{breakAll:p}),d)}At.displayName="Label";var TP=function(t){var n=t.cx,r=t.cy,a=t.angle,o=t.startAngle,i=t.endAngle,s=t.r,l=t.radius,u=t.innerRadius,f=t.outerRadius,c=t.x,p=t.y,d=t.top,h=t.left,m=t.width,g=t.height,v=t.clockWise,y=t.labelViewBox;if(y)return y;if(V(m)&&V(g)){if(V(c)&&V(p))return{x:c,y:p,width:m,height:g};if(V(d)&&V(h))return{x:d,y:h,width:m,height:g}}return V(c)&&V(p)?{x:c,y:p,width:0,height:0}:V(n)&&V(r)?{cx:n,cy:r,startAngle:o||a||0,endAngle:i||a||0,innerRadius:u||0,outerRadius:f||l||s||0,clockWise:v}:t.viewBox?t.viewBox:{}},WY=function(t,n){return t?t===!0?C.createElement(At,{key:"label-implicit",viewBox:n}):it(t)?C.createElement(At,{key:"label-implicit",viewBox:n,value:t}):k.isValidElement(t)?t.type===At?k.cloneElement(t,{key:"label-implicit",viewBox:n}):C.createElement(At,{key:"label-implicit",content:t,viewBox:n}):oe(t)?C.createElement(At,{key:"label-implicit",content:t,viewBox:n}):gs(t)?C.createElement(At,au({viewBox:n},t,{key:"label-implicit"})):null:null},qY=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&r&&!t.label)return null;var a=t.children,o=TP(t),i=qt(a,At).map(function(l,u){return k.cloneElement(l,{viewBox:n||o,key:"label-".concat(u)})});if(!r)return i;var s=WY(t.label,n||o);return[s].concat(EY(i))};At.parseViewBox=TP;At.renderCallByParent=qY;function VY(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}var KY=VY;const XY=Ce(KY);function ou(e){"@babel/helpers - typeof";return ou=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ou(e)}var YY=["valueAccessor"],QY=["data","dataKey","clockWise","id","textBreakAll"];function ZY(e){return nQ(e)||tQ(e)||eQ(e)||JY()}function JY(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function eQ(e,t){if(e){if(typeof e=="string")return Qv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qv(e,t)}}function tQ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function nQ(e){if(Array.isArray(e))return Qv(e)}function Qv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Jf(){return Jf=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Jf.apply(this,arguments)}function yb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function gb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?yb(Object(n),!0).forEach(function(r){rQ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):yb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function rQ(e,t,n){return t=aQ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function aQ(e){var t=oQ(e,"string");return ou(t)=="symbol"?t:t+""}function oQ(e,t){if(ou(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ou(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function xb(e,t){if(e==null)return{};var n=iQ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iQ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var sQ=function(t){return Array.isArray(t.value)?XY(t.value):t.value};function dr(e){var t=e.valueAccessor,n=t===void 0?sQ:t,r=xb(e,YY),a=r.data,o=r.dataKey,i=r.clockWise,s=r.id,l=r.textBreakAll,u=xb(r,QY);return!a||!a.length?null:C.createElement(ye,{className:"recharts-label-list"},a.map(function(f,c){var p=te(o)?n(f,c):st(f&&f.payload,o),d=te(s)?{}:{id:"".concat(s,"-").concat(c)};return C.createElement(At,Jf({},re(f,!0),u,d,{parentViewBox:f.parentViewBox,value:p,textBreakAll:l,viewBox:At.parseViewBox(te(i)?f:gb(gb({},f),{},{clockWise:i})),key:"label-".concat(c),index:c}))}))}dr.displayName="LabelList";function lQ(e,t){return e?e===!0?C.createElement(dr,{key:"labelList-implicit",data:t}):C.isValidElement(e)||oe(e)?C.createElement(dr,{key:"labelList-implicit",data:t,content:e}):gs(e)?C.createElement(dr,Jf({data:t},e,{key:"labelList-implicit"})):null:null}function uQ(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&n&&!e.label)return null;var r=e.children,a=qt(r,dr).map(function(i,s){return k.cloneElement(i,{data:t,key:"labelList-".concat(s)})});if(!n)return a;var o=lQ(e.label,t);return[o].concat(ZY(a))}dr.renderCallByParent=uQ;function iu(e){"@babel/helpers - typeof";return iu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},iu(e)}function Zv(){return Zv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Zv.apply(this,arguments)}function wb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function bb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?wb(Object(n),!0).forEach(function(r){cQ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function cQ(e,t,n){return t=fQ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fQ(e){var t=pQ(e,"string");return iu(t)=="symbol"?t:t+""}function pQ(e,t){if(iu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(iu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var dQ=function(t,n){var r=Dn(n-t),a=Math.min(Math.abs(n-t),359.999);return r*a},xc=function(t){var n=t.cx,r=t.cy,a=t.radius,o=t.angle,i=t.sign,s=t.isExternal,l=t.cornerRadius,u=t.cornerIsExternal,f=l*(s?1:-1)+a,c=Math.asin(l/f)/Zf,p=u?o:o+i*c,d=vt(n,r,f,p),h=vt(n,r,a,p),m=u?o-i*c:o,g=vt(n,r,f*Math.cos(c*Zf),m);return{center:d,circleTangency:h,lineTangency:g,theta:c}},jP=function(t){var n=t.cx,r=t.cy,a=t.innerRadius,o=t.outerRadius,i=t.startAngle,s=t.endAngle,l=dQ(i,s),u=i+l,f=vt(n,r,o,i),c=vt(n,r,o,u),p="M ".concat(f.x,",").concat(f.y,`
+    `).concat(S.x,",").concat(S.y),_=te(t.id)?$o("recharts-radial-line-"):t.id;return A.createElement("text",au({},r,{dominantBaseline:"central",className:ue("recharts-radial-bar-label",s)}),A.createElement("defs",null,A.createElement("path",{id:_,d:O})),A.createElement("textPath",{xlinkHref:"#".concat(_)},n))},nQ=function(t){var n=t.viewBox,r=t.offset,a=t.position,o=n,i=o.cx,s=o.cy,l=o.innerRadius,u=o.outerRadius,p=o.startAngle,c=o.endAngle,f=(p+c)/2;if(a==="outside"){var d=vt(i,s,u+r,f),h=d.x,m=d.y;return{x:h,y:m,textAnchor:h>=i?"start":"end",verticalAnchor:"middle"}}if(a==="center")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"middle"};if(a==="centerTop")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"start"};if(a==="centerBottom")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"end"};var g=(l+u)/2,v=vt(i,s,g,f),y=v.x,x=v.y;return{x:y,y:x,textAnchor:"middle",verticalAnchor:"middle"}},rQ=function(t){var n=t.viewBox,r=t.parentViewBox,a=t.offset,o=t.position,i=n,s=i.x,l=i.y,u=i.width,p=i.height,c=p>=0?1:-1,f=c*a,d=c>0?"end":"start",h=c>0?"start":"end",m=u>=0?1:-1,g=m*a,v=m>0?"end":"start",y=m>0?"start":"end";if(o==="top"){var x={x:s+u/2,y:l-c*a,textAnchor:"middle",verticalAnchor:d};return rt(rt({},x),r?{height:Math.max(l-r.y,0),width:u}:{})}if(o==="bottom"){var P={x:s+u/2,y:l+p+f,textAnchor:"middle",verticalAnchor:h};return rt(rt({},P),r?{height:Math.max(r.y+r.height-(l+p),0),width:u}:{})}if(o==="left"){var w={x:s-g,y:l+p/2,textAnchor:v,verticalAnchor:"middle"};return rt(rt({},w),r?{width:Math.max(w.x-r.x,0),height:p}:{})}if(o==="right"){var S={x:s+u+g,y:l+p/2,textAnchor:y,verticalAnchor:"middle"};return rt(rt({},S),r?{width:Math.max(r.x+r.width-S.x,0),height:p}:{})}var O=r?{width:u,height:p}:{};return o==="insideLeft"?rt({x:s+g,y:l+p/2,textAnchor:y,verticalAnchor:"middle"},O):o==="insideRight"?rt({x:s+u-g,y:l+p/2,textAnchor:v,verticalAnchor:"middle"},O):o==="insideTop"?rt({x:s+u/2,y:l+f,textAnchor:"middle",verticalAnchor:h},O):o==="insideBottom"?rt({x:s+u/2,y:l+p-f,textAnchor:"middle",verticalAnchor:d},O):o==="insideTopLeft"?rt({x:s+g,y:l+f,textAnchor:y,verticalAnchor:h},O):o==="insideTopRight"?rt({x:s+u-g,y:l+f,textAnchor:v,verticalAnchor:h},O):o==="insideBottomLeft"?rt({x:s+g,y:l+p-f,textAnchor:y,verticalAnchor:d},O):o==="insideBottomRight"?rt({x:s+u-g,y:l+p-f,textAnchor:v,verticalAnchor:d},O):gs(o)&&(V(o.x)||Za(o.x))&&(V(o.y)||Za(o.y))?rt({x:s+Oo(o.x,u),y:l+Oo(o.y,p),textAnchor:"end",verticalAnchor:"end"},O):rt({x:s+u/2,y:l+p/2,textAnchor:"middle",verticalAnchor:"middle"},O)},aQ=function(t){return"cx"in t&&V(t.cx)};function Ct(e){var t=e.offset,n=t===void 0?5:t,r=KY(e,HY),a=rt({offset:n},r),o=a.viewBox,i=a.position,s=a.value,l=a.children,u=a.content,p=a.className,c=p===void 0?"":p,f=a.textBreakAll;if(!o||te(s)&&te(l)&&!k.isValidElement(u)&&!oe(u))return null;if(k.isValidElement(u))return k.cloneElement(u,a);var d;if(oe(u)){if(d=k.createElement(u,a),k.isValidElement(d))return d}else d=JY(a);var h=aQ(o),m=re(a,!0);if(h&&(i==="insideStart"||i==="insideEnd"||i==="end"))return tQ(a,d,m);var g=h?nQ(a):rQ(a);return A.createElement(Ip,au({className:ue("recharts-label",c)},m,g,{breakAll:f}),d)}Ct.displayName="Label";var NP=function(t){var n=t.cx,r=t.cy,a=t.angle,o=t.startAngle,i=t.endAngle,s=t.r,l=t.radius,u=t.innerRadius,p=t.outerRadius,c=t.x,f=t.y,d=t.top,h=t.left,m=t.width,g=t.height,v=t.clockWise,y=t.labelViewBox;if(y)return y;if(V(m)&&V(g)){if(V(c)&&V(f))return{x:c,y:f,width:m,height:g};if(V(d)&&V(h))return{x:d,y:h,width:m,height:g}}return V(c)&&V(f)?{x:c,y:f,width:0,height:0}:V(n)&&V(r)?{cx:n,cy:r,startAngle:o||a||0,endAngle:i||a||0,innerRadius:u||0,outerRadius:p||l||s||0,clockWise:v}:t.viewBox?t.viewBox:{}},oQ=function(t,n){return t?t===!0?A.createElement(Ct,{key:"label-implicit",viewBox:n}):it(t)?A.createElement(Ct,{key:"label-implicit",viewBox:n,value:t}):k.isValidElement(t)?t.type===Ct?k.cloneElement(t,{key:"label-implicit",viewBox:n}):A.createElement(Ct,{key:"label-implicit",content:t,viewBox:n}):oe(t)?A.createElement(Ct,{key:"label-implicit",content:t,viewBox:n}):gs(t)?A.createElement(Ct,au({viewBox:n},t,{key:"label-implicit"})):null:null},iQ=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&r&&!t.label)return null;var a=t.children,o=NP(t),i=qt(a,Ct).map(function(l,u){return k.cloneElement(l,{viewBox:n||o,key:"label-".concat(u)})});if(!r)return i;var s=oQ(t.label,n||o);return[s].concat(GY(i))};Ct.parseViewBox=NP;Ct.renderCallByParent=iQ;function sQ(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}var lQ=sQ;const uQ=Ae(lQ);function ou(e){"@babel/helpers - typeof";return ou=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ou(e)}var cQ=["valueAccessor"],pQ=["data","dataKey","clockWise","id","textBreakAll"];function fQ(e){return vQ(e)||hQ(e)||mQ(e)||dQ()}function dQ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function mQ(e,t){if(e){if(typeof e=="string")return Q0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Q0(e,t)}}function hQ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function vQ(e){if(Array.isArray(e))return Q0(e)}function Q0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Zp(){return Zp=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Zp.apply(this,arguments)}function xb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function wb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?xb(Object(n),!0).forEach(function(r){yQ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function yQ(e,t,n){return t=gQ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gQ(e){var t=xQ(e,"string");return ou(t)=="symbol"?t:t+""}function xQ(e,t){if(ou(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ou(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function bb(e,t){if(e==null)return{};var n=wQ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wQ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var bQ=function(t){return Array.isArray(t.value)?uQ(t.value):t.value};function dr(e){var t=e.valueAccessor,n=t===void 0?bQ:t,r=bb(e,cQ),a=r.data,o=r.dataKey,i=r.clockWise,s=r.id,l=r.textBreakAll,u=bb(r,pQ);return!a||!a.length?null:A.createElement(ye,{className:"recharts-label-list"},a.map(function(p,c){var f=te(o)?n(p,c):st(p&&p.payload,o),d=te(s)?{}:{id:"".concat(s,"-").concat(c)};return A.createElement(Ct,Zp({},re(p,!0),u,d,{parentViewBox:p.parentViewBox,value:f,textBreakAll:l,viewBox:Ct.parseViewBox(te(i)?p:wb(wb({},p),{},{clockWise:i})),key:"label-".concat(c),index:c}))}))}dr.displayName="LabelList";function PQ(e,t){return e?e===!0?A.createElement(dr,{key:"labelList-implicit",data:t}):A.isValidElement(e)||oe(e)?A.createElement(dr,{key:"labelList-implicit",data:t,content:e}):gs(e)?A.createElement(dr,Zp({data:t},e,{key:"labelList-implicit"})):null:null}function SQ(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&n&&!e.label)return null;var r=e.children,a=qt(r,dr).map(function(i,s){return k.cloneElement(i,{data:t,key:"labelList-".concat(s)})});if(!n)return a;var o=PQ(e.label,t);return[o].concat(fQ(a))}dr.renderCallByParent=SQ;function iu(e){"@babel/helpers - typeof";return iu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},iu(e)}function Z0(){return Z0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Z0.apply(this,arguments)}function Pb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Sb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Pb(Object(n),!0).forEach(function(r){OQ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function OQ(e,t,n){return t=kQ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kQ(e){var t=_Q(e,"string");return iu(t)=="symbol"?t:t+""}function _Q(e,t){if(iu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(iu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var CQ=function(t,n){var r=Dn(n-t),a=Math.min(Math.abs(n-t),359.999);return r*a},xc=function(t){var n=t.cx,r=t.cy,a=t.radius,o=t.angle,i=t.sign,s=t.isExternal,l=t.cornerRadius,u=t.cornerIsExternal,p=l*(s?1:-1)+a,c=Math.asin(l/p)/Qp,f=u?o:o+i*c,d=vt(n,r,p,f),h=vt(n,r,a,f),m=u?o-i*c:o,g=vt(n,r,p*Math.cos(c*Qp),m);return{center:d,circleTangency:h,lineTangency:g,theta:c}},MP=function(t){var n=t.cx,r=t.cy,a=t.innerRadius,o=t.outerRadius,i=t.startAngle,s=t.endAngle,l=CQ(i,s),u=i+l,p=vt(n,r,o,i),c=vt(n,r,o,u),f="M ".concat(p.x,",").concat(p.y,`
     A `).concat(o,",").concat(o,`,0,
     `).concat(+(Math.abs(l)>180),",").concat(+(i>u),`,
     `).concat(c.x,",").concat(c.y,`
-  `);if(a>0){var d=vt(n,r,a,i),h=vt(n,r,a,u);p+="L ".concat(h.x,",").concat(h.y,`
+  `);if(a>0){var d=vt(n,r,a,i),h=vt(n,r,a,u);f+="L ".concat(h.x,",").concat(h.y,`
             A `).concat(a,",").concat(a,`,0,
             `).concat(+(Math.abs(l)>180),",").concat(+(i<=u),`,
-            `).concat(d.x,",").concat(d.y," Z")}else p+="L ".concat(n,",").concat(r," Z");return p},mQ=function(t){var n=t.cx,r=t.cy,a=t.innerRadius,o=t.outerRadius,i=t.cornerRadius,s=t.forceCornerRadius,l=t.cornerIsExternal,u=t.startAngle,f=t.endAngle,c=Dn(f-u),p=xc({cx:n,cy:r,radius:o,angle:u,sign:c,cornerRadius:i,cornerIsExternal:l}),d=p.circleTangency,h=p.lineTangency,m=p.theta,g=xc({cx:n,cy:r,radius:o,angle:f,sign:-c,cornerRadius:i,cornerIsExternal:l}),v=g.circleTangency,y=g.lineTangency,x=g.theta,P=l?Math.abs(u-f):Math.abs(u-f)-m-x;if(P<0)return s?"M ".concat(h.x,",").concat(h.y,`
+            `).concat(d.x,",").concat(d.y," Z")}else f+="L ".concat(n,",").concat(r," Z");return f},AQ=function(t){var n=t.cx,r=t.cy,a=t.innerRadius,o=t.outerRadius,i=t.cornerRadius,s=t.forceCornerRadius,l=t.cornerIsExternal,u=t.startAngle,p=t.endAngle,c=Dn(p-u),f=xc({cx:n,cy:r,radius:o,angle:u,sign:c,cornerRadius:i,cornerIsExternal:l}),d=f.circleTangency,h=f.lineTangency,m=f.theta,g=xc({cx:n,cy:r,radius:o,angle:p,sign:-c,cornerRadius:i,cornerIsExternal:l}),v=g.circleTangency,y=g.lineTangency,x=g.theta,P=l?Math.abs(u-p):Math.abs(u-p)-m-x;if(P<0)return s?"M ".concat(h.x,",").concat(h.y,`
         a`).concat(i,",").concat(i,",0,0,1,").concat(i*2,`,0
         a`).concat(i,",").concat(i,",0,0,1,").concat(-i*2,`,0
-      `):jP({cx:n,cy:r,innerRadius:a,outerRadius:o,startAngle:u,endAngle:f});var w="M ".concat(h.x,",").concat(h.y,`
+      `):MP({cx:n,cy:r,innerRadius:a,outerRadius:o,startAngle:u,endAngle:p});var w="M ".concat(h.x,",").concat(h.y,`
     A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(d.x,",").concat(d.y,`
     A`).concat(o,",").concat(o,",0,").concat(+(P>180),",").concat(+(c<0),",").concat(v.x,",").concat(v.y,`
     A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(y.x,",").concat(y.y,`
-  `);if(a>0){var S=xc({cx:n,cy:r,radius:a,angle:u,sign:c,isExternal:!0,cornerRadius:i,cornerIsExternal:l}),O=S.circleTangency,_=S.lineTangency,A=S.theta,j=xc({cx:n,cy:r,radius:a,angle:f,sign:-c,isExternal:!0,cornerRadius:i,cornerIsExternal:l}),E=j.circleTangency,T=j.lineTangency,N=j.theta,M=l?Math.abs(u-f):Math.abs(u-f)-A-N;if(M<0&&i===0)return"".concat(w,"L").concat(n,",").concat(r,"Z");w+="L".concat(T.x,",").concat(T.y,`
+  `);if(a>0){var S=xc({cx:n,cy:r,radius:a,angle:u,sign:c,isExternal:!0,cornerRadius:i,cornerIsExternal:l}),O=S.circleTangency,_=S.lineTangency,C=S.theta,j=xc({cx:n,cy:r,radius:a,angle:p,sign:-c,isExternal:!0,cornerRadius:i,cornerIsExternal:l}),E=j.circleTangency,T=j.lineTangency,N=j.theta,M=l?Math.abs(u-p):Math.abs(u-p)-C-N;if(M<0&&i===0)return"".concat(w,"L").concat(n,",").concat(r,"Z");w+="L".concat(T.x,",").concat(T.y,`
       A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(E.x,",").concat(E.y,`
       A`).concat(a,",").concat(a,",0,").concat(+(M>180),",").concat(+(c>0),",").concat(O.x,",").concat(O.y,`
-      A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(_.x,",").concat(_.y,"Z")}else w+="L".concat(n,",").concat(r,"Z");return w},hQ={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},$P=function(t){var n=bb(bb({},hQ),t),r=n.cx,a=n.cy,o=n.innerRadius,i=n.outerRadius,s=n.cornerRadius,l=n.forceCornerRadius,u=n.cornerIsExternal,f=n.startAngle,c=n.endAngle,p=n.className;if(i<o||f===c)return null;var d=ue("recharts-sector",p),h=i-o,m=Oo(s,h,0,!0),g;return m>0&&Math.abs(f-c)<360?g=mQ({cx:r,cy:a,innerRadius:o,outerRadius:i,cornerRadius:Math.min(m,h/2),forceCornerRadius:l,cornerIsExternal:u,startAngle:f,endAngle:c}):g=jP({cx:r,cy:a,innerRadius:o,outerRadius:i,startAngle:f,endAngle:c}),C.createElement("path",Zv({},re(n,!0),{className:d,d:g,role:"img"}))};function su(e){"@babel/helpers - typeof";return su=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},su(e)}function Jv(){return Jv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Jv.apply(this,arguments)}function Pb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Sb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Pb(Object(n),!0).forEach(function(r){vQ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function vQ(e,t,n){return t=yQ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yQ(e){var t=gQ(e,"string");return su(t)=="symbol"?t:t+""}function gQ(e,t){if(su(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(su(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Ob={curveBasisClosed:hI,curveBasisOpen:vI,curveBasis:mI,curveBumpX:eI,curveBumpY:tI,curveLinearClosed:yI,curveLinear:pd,curveMonotoneX:gI,curveMonotoneY:xI,curveNatural:wI,curveStep:bI,curveStepAfter:SI,curveStepBefore:PI},wc=function(t){return t.x===+t.x&&t.y===+t.y},Vs=function(t){return t.x},Ks=function(t){return t.y},xQ=function(t,n){if(oe(t))return t;var r="curve".concat(cd(t));return(r==="curveMonotone"||r==="curveBump")&&n?Ob["".concat(r).concat(n==="vertical"?"Y":"X")]:Ob[r]||pd},wQ=function(t){var n=t.type,r=n===void 0?"linear":n,a=t.points,o=a===void 0?[]:a,i=t.baseLine,s=t.layout,l=t.connectNulls,u=l===void 0?!1:l,f=xQ(r,s),c=u?o.filter(function(m){return wc(m)}):o,p;if(Array.isArray(i)){var d=u?i.filter(function(m){return wc(m)}):i,h=c.map(function(m,g){return Sb(Sb({},m),{},{base:d[g]})});return s==="vertical"?p=cc().y(Ks).x1(Vs).x0(function(m){return m.base.x}):p=cc().x(Vs).y1(Ks).y0(function(m){return m.base.y}),p.defined(wc).curve(f),p(h)}return s==="vertical"&&V(i)?p=cc().y(Ks).x1(Vs).x0(i):V(i)?p=cc().x(Vs).y1(Ks).y0(i):p=N8().x(Vs).y(Ks),p.defined(wc).curve(f),p(c)},mo=function(t){var n=t.className,r=t.points,a=t.path,o=t.pathRef;if((!r||!r.length)&&!a)return null;var i=r&&r.length?wQ(t):a;return k.createElement("path",Jv({},re(t,!1),Sf(t),{className:ue("recharts-curve",n),d:i,ref:o}))},NP={exports:{}},bQ="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",PQ=bQ,SQ=PQ;function MP(){}function RP(){}RP.resetWarningCache=MP;var OQ=function(){function e(r,a,o,i,s,l){if(l!==SQ){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:RP,resetWarningCache:MP};return n.PropTypes=n,n};NP.exports=OQ();var kQ=NP.exports;const ge=Ce(kQ);var _Q=Object.getOwnPropertyNames,AQ=Object.getOwnPropertySymbols,CQ=Object.prototype.hasOwnProperty;function kb(e,t){return function(r,a,o){return e(r,a,o)&&t(r,a,o)}}function bc(e){return function(n,r,a){if(!n||!r||typeof n!="object"||typeof r!="object")return e(n,r,a);var o=a.cache,i=o.get(n),s=o.get(r);if(i&&s)return i===r&&s===n;o.set(n,r),o.set(r,n);var l=e(n,r,a);return o.delete(n),o.delete(r),l}}function _b(e){return _Q(e).concat(AQ(e))}var EQ=Object.hasOwn||function(e,t){return CQ.call(e,t)};function Ro(e,t){return e===t||!e&&!t&&e!==e&&t!==t}var TQ="__v",jQ="__o",$Q="_owner",Ab=Object.getOwnPropertyDescriptor,Cb=Object.keys;function NQ(e,t,n){var r=e.length;if(t.length!==r)return!1;for(;r-- >0;)if(!n.equals(e[r],t[r],r,r,e,t,n))return!1;return!0}function MQ(e,t){return Ro(e.getTime(),t.getTime())}function RQ(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function IQ(e,t){return e===t}function Eb(e,t,n){var r=e.size;if(r!==t.size)return!1;if(!r)return!0;for(var a=new Array(r),o=e.entries(),i,s,l=0;(i=o.next())&&!i.done;){for(var u=t.entries(),f=!1,c=0;(s=u.next())&&!s.done;){if(a[c]){c++;continue}var p=i.value,d=s.value;if(n.equals(p[0],d[0],l,c,e,t,n)&&n.equals(p[1],d[1],p[0],d[0],e,t,n)){f=a[c]=!0;break}c++}if(!f)return!1;l++}return!0}var DQ=Ro;function LQ(e,t,n){var r=Cb(e),a=r.length;if(Cb(t).length!==a)return!1;for(;a-- >0;)if(!IP(e,t,n,r[a]))return!1;return!0}function Xs(e,t,n){var r=_b(e),a=r.length;if(_b(t).length!==a)return!1;for(var o,i,s;a-- >0;)if(o=r[a],!IP(e,t,n,o)||(i=Ab(e,o),s=Ab(t,o),(i||s)&&(!i||!s||i.configurable!==s.configurable||i.enumerable!==s.enumerable||i.writable!==s.writable)))return!1;return!0}function FQ(e,t){return Ro(e.valueOf(),t.valueOf())}function zQ(e,t){return e.source===t.source&&e.flags===t.flags}function Tb(e,t,n){var r=e.size;if(r!==t.size)return!1;if(!r)return!0;for(var a=new Array(r),o=e.values(),i,s;(i=o.next())&&!i.done;){for(var l=t.values(),u=!1,f=0;(s=l.next())&&!s.done;){if(!a[f]&&n.equals(i.value,s.value,i.value,s.value,e,t,n)){u=a[f]=!0;break}f++}if(!u)return!1}return!0}function BQ(e,t){var n=e.length;if(t.length!==n)return!1;for(;n-- >0;)if(e[n]!==t[n])return!1;return!0}function HQ(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function IP(e,t,n,r){return(r===$Q||r===jQ||r===TQ)&&(e.$$typeof||t.$$typeof)?!0:EQ(t,r)&&n.equals(e[r],t[r],r,r,e,t,n)}var GQ="[object Arguments]",UQ="[object Boolean]",WQ="[object Date]",qQ="[object Error]",VQ="[object Map]",KQ="[object Number]",XQ="[object Object]",YQ="[object RegExp]",QQ="[object Set]",ZQ="[object String]",JQ="[object URL]",eZ=Array.isArray,jb=typeof ArrayBuffer=="function"&&ArrayBuffer.isView?ArrayBuffer.isView:null,$b=Object.assign,tZ=Object.prototype.toString.call.bind(Object.prototype.toString);function nZ(e){var t=e.areArraysEqual,n=e.areDatesEqual,r=e.areErrorsEqual,a=e.areFunctionsEqual,o=e.areMapsEqual,i=e.areNumbersEqual,s=e.areObjectsEqual,l=e.arePrimitiveWrappersEqual,u=e.areRegExpsEqual,f=e.areSetsEqual,c=e.areTypedArraysEqual,p=e.areUrlsEqual;return function(h,m,g){if(h===m)return!0;if(h==null||m==null)return!1;var v=typeof h;if(v!==typeof m)return!1;if(v!=="object")return v==="number"?i(h,m,g):v==="function"?a(h,m,g):!1;var y=h.constructor;if(y!==m.constructor)return!1;if(y===Object)return s(h,m,g);if(eZ(h))return t(h,m,g);if(jb!=null&&jb(h))return c(h,m,g);if(y===Date)return n(h,m,g);if(y===RegExp)return u(h,m,g);if(y===Map)return o(h,m,g);if(y===Set)return f(h,m,g);var x=tZ(h);return x===WQ?n(h,m,g):x===YQ?u(h,m,g):x===VQ?o(h,m,g):x===QQ?f(h,m,g):x===XQ?typeof h.then!="function"&&typeof m.then!="function"&&s(h,m,g):x===JQ?p(h,m,g):x===qQ?r(h,m,g):x===GQ?s(h,m,g):x===UQ||x===KQ||x===ZQ?l(h,m,g):!1}}function rZ(e){var t=e.circular,n=e.createCustomConfig,r=e.strict,a={areArraysEqual:r?Xs:NQ,areDatesEqual:MQ,areErrorsEqual:RQ,areFunctionsEqual:IQ,areMapsEqual:r?kb(Eb,Xs):Eb,areNumbersEqual:DQ,areObjectsEqual:r?Xs:LQ,arePrimitiveWrappersEqual:FQ,areRegExpsEqual:zQ,areSetsEqual:r?kb(Tb,Xs):Tb,areTypedArraysEqual:r?Xs:BQ,areUrlsEqual:HQ};if(n&&(a=$b({},a,n(a))),t){var o=bc(a.areArraysEqual),i=bc(a.areMapsEqual),s=bc(a.areObjectsEqual),l=bc(a.areSetsEqual);a=$b({},a,{areArraysEqual:o,areMapsEqual:i,areObjectsEqual:s,areSetsEqual:l})}return a}function aZ(e){return function(t,n,r,a,o,i,s){return e(t,n,s)}}function oZ(e){var t=e.circular,n=e.comparator,r=e.createState,a=e.equals,o=e.strict;if(r)return function(l,u){var f=r(),c=f.cache,p=c===void 0?t?new WeakMap:void 0:c,d=f.meta;return n(l,u,{cache:p,equals:a,meta:d,strict:o})};if(t)return function(l,u){return n(l,u,{cache:new WeakMap,equals:a,meta:void 0,strict:o})};var i={cache:void 0,equals:a,meta:void 0,strict:o};return function(l,u){return n(l,u,i)}}var iZ=za();za({strict:!0});za({circular:!0});za({circular:!0,strict:!0});za({createInternalComparator:function(){return Ro}});za({strict:!0,createInternalComparator:function(){return Ro}});za({circular:!0,createInternalComparator:function(){return Ro}});za({circular:!0,createInternalComparator:function(){return Ro},strict:!0});function za(e){e===void 0&&(e={});var t=e.circular,n=t===void 0?!1:t,r=e.createInternalComparator,a=e.createState,o=e.strict,i=o===void 0?!1:o,s=rZ(e),l=nZ(s),u=r?r(l):aZ(l);return oZ({circular:n,comparator:l,createState:a,equals:u,strict:i})}function sZ(e){typeof requestAnimationFrame<"u"&&requestAnimationFrame(e)}function Nb(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=-1,r=function a(o){n<0&&(n=o),o-n>t?(e(o),n=-1):sZ(a)};requestAnimationFrame(r)}function ey(e){"@babel/helpers - typeof";return ey=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ey(e)}function lZ(e){return pZ(e)||fZ(e)||cZ(e)||uZ()}function uZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function cZ(e,t){if(e){if(typeof e=="string")return Mb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Mb(e,t)}}function Mb(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function fZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function pZ(e){if(Array.isArray(e))return e}function dZ(){var e={},t=function(){return null},n=!1,r=function a(o){if(!n){if(Array.isArray(o)){if(!o.length)return;var i=o,s=lZ(i),l=s[0],u=s.slice(1);if(typeof l=="number"){Nb(a.bind(null,u),l);return}a(l),Nb(a.bind(null,u));return}ey(o)==="object"&&(e=o,t(e)),typeof o=="function"&&o()}};return{stop:function(){n=!0},start:function(o){n=!1,r(o)},subscribe:function(o){return t=o,function(){t=function(){return null}}}}}function lu(e){"@babel/helpers - typeof";return lu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},lu(e)}function Rb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ib(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Rb(Object(n),!0).forEach(function(r){DP(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Rb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function DP(e,t,n){return t=mZ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mZ(e){var t=hZ(e,"string");return lu(t)==="symbol"?t:String(t)}function hZ(e,t){if(lu(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(lu(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var vZ=function(t,n){return[Object.keys(t),Object.keys(n)].reduce(function(r,a){return r.filter(function(o){return a.includes(o)})})},yZ=function(t){return t},gZ=function(t){return t.replace(/([A-Z])/g,function(n){return"-".concat(n.toLowerCase())})},hl=function(t,n){return Object.keys(n).reduce(function(r,a){return Ib(Ib({},r),{},DP({},a,t(a,n[a])))},{})},Db=function(t,n,r){return t.map(function(a){return"".concat(gZ(a)," ").concat(n,"ms ").concat(r)}).join(",")};function xZ(e,t){return PZ(e)||bZ(e,t)||LP(e,t)||wZ()}function wZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function bZ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function PZ(e){if(Array.isArray(e))return e}function SZ(e){return _Z(e)||kZ(e)||LP(e)||OZ()}function OZ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function LP(e,t){if(e){if(typeof e=="string")return ty(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ty(e,t)}}function kZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function _Z(e){if(Array.isArray(e))return ty(e)}function ty(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var ep=1e-4,FP=function(t,n){return[0,3*t,3*n-6*t,3*t-3*n+1]},zP=function(t,n){return t.map(function(r,a){return r*Math.pow(n,a)}).reduce(function(r,a){return r+a})},Lb=function(t,n){return function(r){var a=FP(t,n);return zP(a,r)}},AZ=function(t,n){return function(r){var a=FP(t,n),o=[].concat(SZ(a.map(function(i,s){return i*s}).slice(1)),[0]);return zP(o,r)}},Fb=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var a=n[0],o=n[1],i=n[2],s=n[3];if(n.length===1)switch(n[0]){case"linear":a=0,o=0,i=1,s=1;break;case"ease":a=.25,o=.1,i=.25,s=1;break;case"ease-in":a=.42,o=0,i=1,s=1;break;case"ease-out":a=.42,o=0,i=.58,s=1;break;case"ease-in-out":a=0,o=0,i=.58,s=1;break;default:{var l=n[0].split("(");if(l[0]==="cubic-bezier"&&l[1].split(")")[0].split(",").length===4){var u=l[1].split(")")[0].split(",").map(function(g){return parseFloat(g)}),f=xZ(u,4);a=f[0],o=f[1],i=f[2],s=f[3]}}}var c=Lb(a,i),p=Lb(o,s),d=AZ(a,i),h=function(v){return v>1?1:v<0?0:v},m=function(v){for(var y=v>1?1:v,x=y,P=0;P<8;++P){var w=c(x)-y,S=d(x);if(Math.abs(w-y)<ep||S<ep)return p(x);x=h(x-w/S)}return p(x)};return m.isStepper=!1,m},CZ=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.stiff,r=n===void 0?100:n,a=t.damping,o=a===void 0?8:a,i=t.dt,s=i===void 0?17:i,l=function(f,c,p){var d=-(f-c)*r,h=p*o,m=p+(d-h)*s/1e3,g=p*s/1e3+f;return Math.abs(g-c)<ep&&Math.abs(m)<ep?[c,0]:[g,m]};return l.isStepper=!0,l.dt=s,l},EZ=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var a=n[0];if(typeof a=="string")switch(a){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return Fb(a);case"spring":return CZ();default:if(a.split("(")[0]==="cubic-bezier")return Fb(a)}return typeof a=="function"?a:null};function uu(e){"@babel/helpers - typeof";return uu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},uu(e)}function zb(e){return $Z(e)||jZ(e)||BP(e)||TZ()}function TZ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function jZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function $Z(e){if(Array.isArray(e))return ry(e)}function Bb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Bb(Object(n),!0).forEach(function(r){ny(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Bb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function ny(e,t,n){return t=NZ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function NZ(e){var t=MZ(e,"string");return uu(t)==="symbol"?t:String(t)}function MZ(e,t){if(uu(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(uu(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function RZ(e,t){return LZ(e)||DZ(e,t)||BP(e,t)||IZ()}function IZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function BP(e,t){if(e){if(typeof e=="string")return ry(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ry(e,t)}}function ry(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function DZ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function LZ(e){if(Array.isArray(e))return e}var tp=function(t,n,r){return t+(n-t)*r},ay=function(t){var n=t.from,r=t.to;return n!==r},FZ=function e(t,n,r){var a=hl(function(o,i){if(ay(i)){var s=t(i.from,i.to,i.velocity),l=RZ(s,2),u=l[0],f=l[1];return mt(mt({},i),{},{from:u,velocity:f})}return i},n);return r<1?hl(function(o,i){return ay(i)?mt(mt({},i),{},{velocity:tp(i.velocity,a[o].velocity,r),from:tp(i.from,a[o].from,r)}):i},n):e(t,a,r-1)};const zZ=function(e,t,n,r,a){var o=vZ(e,t),i=o.reduce(function(g,v){return mt(mt({},g),{},ny({},v,[e[v],t[v]]))},{}),s=o.reduce(function(g,v){return mt(mt({},g),{},ny({},v,{from:e[v],velocity:0,to:t[v]}))},{}),l=-1,u,f,c=function(){return null},p=function(){return hl(function(v,y){return y.from},s)},d=function(){return!Object.values(s).filter(ay).length},h=function(v){u||(u=v);var y=v-u,x=y/n.dt;s=FZ(n,s,x),a(mt(mt(mt({},e),t),p())),u=v,d()||(l=requestAnimationFrame(c))},m=function(v){f||(f=v);var y=(v-f)/r,x=hl(function(w,S){return tp.apply(void 0,zb(S).concat([n(y)]))},i);if(a(mt(mt(mt({},e),t),x)),y<1)l=requestAnimationFrame(c);else{var P=hl(function(w,S){return tp.apply(void 0,zb(S).concat([n(1)]))},i);a(mt(mt(mt({},e),t),P))}};return c=n.isStepper?h:m,function(){return requestAnimationFrame(c),function(){cancelAnimationFrame(l)}}};function Wi(e){"@babel/helpers - typeof";return Wi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wi(e)}var BZ=["children","begin","duration","attributeName","easing","isActive","steps","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart"];function HZ(e,t){if(e==null)return{};var n=GZ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GZ(e,t){if(e==null)return{};var n={},r=Object.keys(e),a,o;for(o=0;o<r.length;o++)a=r[o],!(t.indexOf(a)>=0)&&(n[a]=e[a]);return n}function Ym(e){return VZ(e)||qZ(e)||WZ(e)||UZ()}function UZ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function WZ(e,t){if(e){if(typeof e=="string")return oy(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return oy(e,t)}}function qZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function VZ(e){if(Array.isArray(e))return oy(e)}function oy(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Hb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function _n(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Hb(Object(n),!0).forEach(function(r){nl(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Hb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function nl(e,t,n){return t=HP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function KZ(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function XZ(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,HP(r.key),r)}}function YZ(e,t,n){return t&&XZ(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function HP(e){var t=QZ(e,"string");return Wi(t)==="symbol"?t:String(t)}function QZ(e,t){if(Wi(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Wi(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function ZZ(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&iy(e,t)}function iy(e,t){return iy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},iy(e,t)}function JZ(e){var t=eJ();return function(){var r=np(e),a;if(t){var o=np(this).constructor;a=Reflect.construct(r,arguments,o)}else a=r.apply(this,arguments);return sy(this,a)}}function sy(e,t){if(t&&(Wi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return ly(e)}function ly(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function eJ(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function np(e){return np=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},np(e)}var Vn=function(e){ZZ(n,e);var t=JZ(n);function n(r,a){var o;KZ(this,n),o=t.call(this,r,a);var i=o.props,s=i.isActive,l=i.attributeName,u=i.from,f=i.to,c=i.steps,p=i.children,d=i.duration;if(o.handleStyleChange=o.handleStyleChange.bind(ly(o)),o.changeStyle=o.changeStyle.bind(ly(o)),!s||d<=0)return o.state={style:{}},typeof p=="function"&&(o.state={style:f}),sy(o);if(c&&c.length)o.state={style:c[0].style};else if(u){if(typeof p=="function")return o.state={style:u},sy(o);o.state={style:l?nl({},l,u):u}}else o.state={style:{}};return o}return YZ(n,[{key:"componentDidMount",value:function(){var a=this.props,o=a.isActive,i=a.canBegin;this.mounted=!0,!(!o||!i)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(a){var o=this.props,i=o.isActive,s=o.canBegin,l=o.attributeName,u=o.shouldReAnimate,f=o.to,c=o.from,p=this.state.style;if(s){if(!i){var d={style:l?nl({},l,f):f};this.state&&p&&(l&&p[l]!==f||!l&&p!==f)&&this.setState(d);return}if(!(iZ(a.to,f)&&a.canBegin&&a.isActive)){var h=!a.canBegin||!a.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var m=h||u?c:a.to;if(this.state&&p){var g={style:l?nl({},l,m):m};(l&&p[l]!==m||!l&&p!==m)&&this.setState(g)}this.runAnimation(_n(_n({},this.props),{},{from:m,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var a=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),a&&a()}},{key:"handleStyleChange",value:function(a){this.changeStyle(a)}},{key:"changeStyle",value:function(a){this.mounted&&this.setState({style:a})}},{key:"runJSAnimation",value:function(a){var o=this,i=a.from,s=a.to,l=a.duration,u=a.easing,f=a.begin,c=a.onAnimationEnd,p=a.onAnimationStart,d=zZ(i,s,EZ(u),l,this.changeStyle),h=function(){o.stopJSAnimation=d()};this.manager.start([p,f,h,l,c])}},{key:"runStepAnimation",value:function(a){var o=this,i=a.steps,s=a.begin,l=a.onAnimationStart,u=i[0],f=u.style,c=u.duration,p=c===void 0?0:c,d=function(m,g,v){if(v===0)return m;var y=g.duration,x=g.easing,P=x===void 0?"ease":x,w=g.style,S=g.properties,O=g.onAnimationEnd,_=v>0?i[v-1]:g,A=S||Object.keys(w);if(typeof P=="function"||P==="spring")return[].concat(Ym(m),[o.runJSAnimation.bind(o,{from:_.style,to:w,duration:y,easing:P}),y]);var j=Db(A,y,P),E=_n(_n(_n({},_.style),w),{},{transition:j});return[].concat(Ym(m),[E,y,O]).filter(yZ)};return this.manager.start([l].concat(Ym(i.reduce(d,[f,Math.max(p,s)])),[a.onAnimationEnd]))}},{key:"runAnimation",value:function(a){this.manager||(this.manager=dZ());var o=a.begin,i=a.duration,s=a.attributeName,l=a.to,u=a.easing,f=a.onAnimationStart,c=a.onAnimationEnd,p=a.steps,d=a.children,h=this.manager;if(this.unSubscribe=h.subscribe(this.handleStyleChange),typeof u=="function"||typeof d=="function"||u==="spring"){this.runJSAnimation(a);return}if(p.length>1){this.runStepAnimation(a);return}var m=s?nl({},s,l):l,g=Db(Object.keys(m),i,u);h.start([f,o,_n(_n({},m),{},{transition:g}),i,c])}},{key:"render",value:function(){var a=this.props,o=a.children;a.begin;var i=a.duration;a.attributeName,a.easing;var s=a.isActive;a.steps,a.from,a.to,a.canBegin,a.onAnimationEnd,a.shouldReAnimate,a.onAnimationReStart;var l=HZ(a,BZ),u=k.Children.count(o),f=this.state.style;if(typeof o=="function")return o(f);if(!s||u===0||i<=0)return o;var c=function(d){var h=d.props,m=h.style,g=m===void 0?{}:m,v=h.className,y=k.cloneElement(d,_n(_n({},l),{},{style:_n(_n({},g),f),className:v}));return y};return u===1?c(k.Children.only(o)):C.createElement("div",null,k.Children.map(o,function(p){return c(p)}))}}]),n}(k.PureComponent);Vn.displayName="Animate";Vn.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};Vn.propTypes={from:ge.oneOfType([ge.object,ge.string]),to:ge.oneOfType([ge.object,ge.string]),attributeName:ge.string,duration:ge.number,begin:ge.number,easing:ge.oneOfType([ge.string,ge.func]),steps:ge.arrayOf(ge.shape({duration:ge.number.isRequired,style:ge.object.isRequired,easing:ge.oneOfType([ge.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),ge.func]),properties:ge.arrayOf("string"),onAnimationEnd:ge.func})),children:ge.oneOfType([ge.node,ge.func]),isActive:ge.bool,canBegin:ge.bool,onAnimationEnd:ge.func,shouldReAnimate:ge.bool,onAnimationStart:ge.func,onAnimationReStart:ge.func};function cu(e){"@babel/helpers - typeof";return cu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},cu(e)}function rp(){return rp=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},rp.apply(this,arguments)}function tJ(e,t){return oJ(e)||aJ(e,t)||rJ(e,t)||nJ()}function nJ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function rJ(e,t){if(e){if(typeof e=="string")return Gb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gb(e,t)}}function Gb(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function aJ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function oJ(e){if(Array.isArray(e))return e}function Ub(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Wb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Ub(Object(n),!0).forEach(function(r){iJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ub(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function iJ(e,t,n){return t=sJ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function sJ(e){var t=lJ(e,"string");return cu(t)=="symbol"?t:t+""}function lJ(e,t){if(cu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(cu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var qb=function(t,n,r,a,o){var i=Math.min(Math.abs(r)/2,Math.abs(a)/2),s=a>=0?1:-1,l=r>=0?1:-1,u=a>=0&&r>=0||a<0&&r<0?1:0,f;if(i>0&&o instanceof Array){for(var c=[0,0,0,0],p=0,d=4;p<d;p++)c[p]=o[p]>i?i:o[p];f="M".concat(t,",").concat(n+s*c[0]),c[0]>0&&(f+="A ".concat(c[0],",").concat(c[0],",0,0,").concat(u,",").concat(t+l*c[0],",").concat(n)),f+="L ".concat(t+r-l*c[1],",").concat(n),c[1]>0&&(f+="A ".concat(c[1],",").concat(c[1],",0,0,").concat(u,`,
-        `).concat(t+r,",").concat(n+s*c[1])),f+="L ".concat(t+r,",").concat(n+a-s*c[2]),c[2]>0&&(f+="A ".concat(c[2],",").concat(c[2],",0,0,").concat(u,`,
-        `).concat(t+r-l*c[2],",").concat(n+a)),f+="L ".concat(t+l*c[3],",").concat(n+a),c[3]>0&&(f+="A ".concat(c[3],",").concat(c[3],",0,0,").concat(u,`,
-        `).concat(t,",").concat(n+a-s*c[3])),f+="Z"}else if(i>0&&o===+o&&o>0){var h=Math.min(i,o);f="M ".concat(t,",").concat(n+s*h,`
+      A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(_.x,",").concat(_.y,"Z")}else w+="L".concat(n,",").concat(r,"Z");return w},EQ={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},RP=function(t){var n=Sb(Sb({},EQ),t),r=n.cx,a=n.cy,o=n.innerRadius,i=n.outerRadius,s=n.cornerRadius,l=n.forceCornerRadius,u=n.cornerIsExternal,p=n.startAngle,c=n.endAngle,f=n.className;if(i<o||p===c)return null;var d=ue("recharts-sector",f),h=i-o,m=Oo(s,h,0,!0),g;return m>0&&Math.abs(p-c)<360?g=AQ({cx:r,cy:a,innerRadius:o,outerRadius:i,cornerRadius:Math.min(m,h/2),forceCornerRadius:l,cornerIsExternal:u,startAngle:p,endAngle:c}):g=MP({cx:r,cy:a,innerRadius:o,outerRadius:i,startAngle:p,endAngle:c}),A.createElement("path",Z0({},re(n,!0),{className:d,d:g,role:"img"}))};function su(e){"@babel/helpers - typeof";return su=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},su(e)}function J0(){return J0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},J0.apply(this,arguments)}function Ob(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function kb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Ob(Object(n),!0).forEach(function(r){TQ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ob(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function TQ(e,t,n){return t=jQ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function jQ(e){var t=$Q(e,"string");return su(t)=="symbol"?t:t+""}function $Q(e,t){if(su(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(su(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var _b={curveBasisClosed:EI,curveBasisOpen:TI,curveBasis:AI,curveBumpX:mI,curveBumpY:hI,curveLinearClosed:jI,curveLinear:fd,curveMonotoneX:$I,curveMonotoneY:NI,curveNatural:MI,curveStep:RI,curveStepAfter:DI,curveStepBefore:II},wc=function(t){return t.x===+t.x&&t.y===+t.y},Vs=function(t){return t.x},Ks=function(t){return t.y},NQ=function(t,n){if(oe(t))return t;var r="curve".concat(cd(t));return(r==="curveMonotone"||r==="curveBump")&&n?_b["".concat(r).concat(n==="vertical"?"Y":"X")]:_b[r]||fd},MQ=function(t){var n=t.type,r=n===void 0?"linear":n,a=t.points,o=a===void 0?[]:a,i=t.baseLine,s=t.layout,l=t.connectNulls,u=l===void 0?!1:l,p=NQ(r,s),c=u?o.filter(function(m){return wc(m)}):o,f;if(Array.isArray(i)){var d=u?i.filter(function(m){return wc(m)}):i,h=c.map(function(m,g){return kb(kb({},m),{},{base:d[g]})});return s==="vertical"?f=cc().y(Ks).x1(Vs).x0(function(m){return m.base.x}):f=cc().x(Vs).y1(Ks).y0(function(m){return m.base.y}),f.defined(wc).curve(p),f(h)}return s==="vertical"&&V(i)?f=cc().y(Ks).x1(Vs).x0(i):V(i)?f=cc().x(Vs).y1(Ks).y0(i):f=I8().x(Vs).y(Ks),f.defined(wc).curve(p),f(c)},mo=function(t){var n=t.className,r=t.points,a=t.path,o=t.pathRef;if((!r||!r.length)&&!a)return null;var i=r&&r.length?MQ(t):a;return k.createElement("path",J0({},re(t,!1),Pp(t),{className:ue("recharts-curve",n),d:i,ref:o}))},IP={exports:{}},RQ="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",IQ=RQ,DQ=IQ;function DP(){}function LP(){}LP.resetWarningCache=DP;var LQ=function(){function e(r,a,o,i,s,l){if(l!==DQ){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:LP,resetWarningCache:DP};return n.PropTypes=n,n};IP.exports=LQ();var FQ=IP.exports;const ge=Ae(FQ);var zQ=Object.getOwnPropertyNames,BQ=Object.getOwnPropertySymbols,HQ=Object.prototype.hasOwnProperty;function Cb(e,t){return function(r,a,o){return e(r,a,o)&&t(r,a,o)}}function bc(e){return function(n,r,a){if(!n||!r||typeof n!="object"||typeof r!="object")return e(n,r,a);var o=a.cache,i=o.get(n),s=o.get(r);if(i&&s)return i===r&&s===n;o.set(n,r),o.set(r,n);var l=e(n,r,a);return o.delete(n),o.delete(r),l}}function Ab(e){return zQ(e).concat(BQ(e))}var GQ=Object.hasOwn||function(e,t){return HQ.call(e,t)};function Ro(e,t){return e===t||!e&&!t&&e!==e&&t!==t}var UQ="__v",WQ="__o",qQ="_owner",Eb=Object.getOwnPropertyDescriptor,Tb=Object.keys;function VQ(e,t,n){var r=e.length;if(t.length!==r)return!1;for(;r-- >0;)if(!n.equals(e[r],t[r],r,r,e,t,n))return!1;return!0}function KQ(e,t){return Ro(e.getTime(),t.getTime())}function XQ(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function YQ(e,t){return e===t}function jb(e,t,n){var r=e.size;if(r!==t.size)return!1;if(!r)return!0;for(var a=new Array(r),o=e.entries(),i,s,l=0;(i=o.next())&&!i.done;){for(var u=t.entries(),p=!1,c=0;(s=u.next())&&!s.done;){if(a[c]){c++;continue}var f=i.value,d=s.value;if(n.equals(f[0],d[0],l,c,e,t,n)&&n.equals(f[1],d[1],f[0],d[0],e,t,n)){p=a[c]=!0;break}c++}if(!p)return!1;l++}return!0}var QQ=Ro;function ZQ(e,t,n){var r=Tb(e),a=r.length;if(Tb(t).length!==a)return!1;for(;a-- >0;)if(!FP(e,t,n,r[a]))return!1;return!0}function Xs(e,t,n){var r=Ab(e),a=r.length;if(Ab(t).length!==a)return!1;for(var o,i,s;a-- >0;)if(o=r[a],!FP(e,t,n,o)||(i=Eb(e,o),s=Eb(t,o),(i||s)&&(!i||!s||i.configurable!==s.configurable||i.enumerable!==s.enumerable||i.writable!==s.writable)))return!1;return!0}function JQ(e,t){return Ro(e.valueOf(),t.valueOf())}function eZ(e,t){return e.source===t.source&&e.flags===t.flags}function $b(e,t,n){var r=e.size;if(r!==t.size)return!1;if(!r)return!0;for(var a=new Array(r),o=e.values(),i,s;(i=o.next())&&!i.done;){for(var l=t.values(),u=!1,p=0;(s=l.next())&&!s.done;){if(!a[p]&&n.equals(i.value,s.value,i.value,s.value,e,t,n)){u=a[p]=!0;break}p++}if(!u)return!1}return!0}function tZ(e,t){var n=e.length;if(t.length!==n)return!1;for(;n-- >0;)if(e[n]!==t[n])return!1;return!0}function nZ(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function FP(e,t,n,r){return(r===qQ||r===WQ||r===UQ)&&(e.$$typeof||t.$$typeof)?!0:GQ(t,r)&&n.equals(e[r],t[r],r,r,e,t,n)}var rZ="[object Arguments]",aZ="[object Boolean]",oZ="[object Date]",iZ="[object Error]",sZ="[object Map]",lZ="[object Number]",uZ="[object Object]",cZ="[object RegExp]",pZ="[object Set]",fZ="[object String]",dZ="[object URL]",mZ=Array.isArray,Nb=typeof ArrayBuffer=="function"&&ArrayBuffer.isView?ArrayBuffer.isView:null,Mb=Object.assign,hZ=Object.prototype.toString.call.bind(Object.prototype.toString);function vZ(e){var t=e.areArraysEqual,n=e.areDatesEqual,r=e.areErrorsEqual,a=e.areFunctionsEqual,o=e.areMapsEqual,i=e.areNumbersEqual,s=e.areObjectsEqual,l=e.arePrimitiveWrappersEqual,u=e.areRegExpsEqual,p=e.areSetsEqual,c=e.areTypedArraysEqual,f=e.areUrlsEqual;return function(h,m,g){if(h===m)return!0;if(h==null||m==null)return!1;var v=typeof h;if(v!==typeof m)return!1;if(v!=="object")return v==="number"?i(h,m,g):v==="function"?a(h,m,g):!1;var y=h.constructor;if(y!==m.constructor)return!1;if(y===Object)return s(h,m,g);if(mZ(h))return t(h,m,g);if(Nb!=null&&Nb(h))return c(h,m,g);if(y===Date)return n(h,m,g);if(y===RegExp)return u(h,m,g);if(y===Map)return o(h,m,g);if(y===Set)return p(h,m,g);var x=hZ(h);return x===oZ?n(h,m,g):x===cZ?u(h,m,g):x===sZ?o(h,m,g):x===pZ?p(h,m,g):x===uZ?typeof h.then!="function"&&typeof m.then!="function"&&s(h,m,g):x===dZ?f(h,m,g):x===iZ?r(h,m,g):x===rZ?s(h,m,g):x===aZ||x===lZ||x===fZ?l(h,m,g):!1}}function yZ(e){var t=e.circular,n=e.createCustomConfig,r=e.strict,a={areArraysEqual:r?Xs:VQ,areDatesEqual:KQ,areErrorsEqual:XQ,areFunctionsEqual:YQ,areMapsEqual:r?Cb(jb,Xs):jb,areNumbersEqual:QQ,areObjectsEqual:r?Xs:ZQ,arePrimitiveWrappersEqual:JQ,areRegExpsEqual:eZ,areSetsEqual:r?Cb($b,Xs):$b,areTypedArraysEqual:r?Xs:tZ,areUrlsEqual:nZ};if(n&&(a=Mb({},a,n(a))),t){var o=bc(a.areArraysEqual),i=bc(a.areMapsEqual),s=bc(a.areObjectsEqual),l=bc(a.areSetsEqual);a=Mb({},a,{areArraysEqual:o,areMapsEqual:i,areObjectsEqual:s,areSetsEqual:l})}return a}function gZ(e){return function(t,n,r,a,o,i,s){return e(t,n,s)}}function xZ(e){var t=e.circular,n=e.comparator,r=e.createState,a=e.equals,o=e.strict;if(r)return function(l,u){var p=r(),c=p.cache,f=c===void 0?t?new WeakMap:void 0:c,d=p.meta;return n(l,u,{cache:f,equals:a,meta:d,strict:o})};if(t)return function(l,u){return n(l,u,{cache:new WeakMap,equals:a,meta:void 0,strict:o})};var i={cache:void 0,equals:a,meta:void 0,strict:o};return function(l,u){return n(l,u,i)}}var wZ=za();za({strict:!0});za({circular:!0});za({circular:!0,strict:!0});za({createInternalComparator:function(){return Ro}});za({strict:!0,createInternalComparator:function(){return Ro}});za({circular:!0,createInternalComparator:function(){return Ro}});za({circular:!0,createInternalComparator:function(){return Ro},strict:!0});function za(e){e===void 0&&(e={});var t=e.circular,n=t===void 0?!1:t,r=e.createInternalComparator,a=e.createState,o=e.strict,i=o===void 0?!1:o,s=yZ(e),l=vZ(s),u=r?r(l):gZ(l);return xZ({circular:n,comparator:l,createState:a,equals:u,strict:i})}function bZ(e){typeof requestAnimationFrame<"u"&&requestAnimationFrame(e)}function Rb(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=-1,r=function a(o){n<0&&(n=o),o-n>t?(e(o),n=-1):bZ(a)};requestAnimationFrame(r)}function ev(e){"@babel/helpers - typeof";return ev=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ev(e)}function PZ(e){return _Z(e)||kZ(e)||OZ(e)||SZ()}function SZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function OZ(e,t){if(e){if(typeof e=="string")return Ib(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ib(e,t)}}function Ib(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function kZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function _Z(e){if(Array.isArray(e))return e}function CZ(){var e={},t=function(){return null},n=!1,r=function a(o){if(!n){if(Array.isArray(o)){if(!o.length)return;var i=o,s=PZ(i),l=s[0],u=s.slice(1);if(typeof l=="number"){Rb(a.bind(null,u),l);return}a(l),Rb(a.bind(null,u));return}ev(o)==="object"&&(e=o,t(e)),typeof o=="function"&&o()}};return{stop:function(){n=!0},start:function(o){n=!1,r(o)},subscribe:function(o){return t=o,function(){t=function(){return null}}}}}function lu(e){"@babel/helpers - typeof";return lu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},lu(e)}function Db(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Lb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Db(Object(n),!0).forEach(function(r){zP(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Db(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function zP(e,t,n){return t=AZ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function AZ(e){var t=EZ(e,"string");return lu(t)==="symbol"?t:String(t)}function EZ(e,t){if(lu(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(lu(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var TZ=function(t,n){return[Object.keys(t),Object.keys(n)].reduce(function(r,a){return r.filter(function(o){return a.includes(o)})})},jZ=function(t){return t},$Z=function(t){return t.replace(/([A-Z])/g,function(n){return"-".concat(n.toLowerCase())})},hl=function(t,n){return Object.keys(n).reduce(function(r,a){return Lb(Lb({},r),{},zP({},a,t(a,n[a])))},{})},Fb=function(t,n,r){return t.map(function(a){return"".concat($Z(a)," ").concat(n,"ms ").concat(r)}).join(",")};function NZ(e,t){return IZ(e)||RZ(e,t)||BP(e,t)||MZ()}function MZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function RZ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function IZ(e){if(Array.isArray(e))return e}function DZ(e){return zZ(e)||FZ(e)||BP(e)||LZ()}function LZ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function BP(e,t){if(e){if(typeof e=="string")return tv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tv(e,t)}}function FZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function zZ(e){if(Array.isArray(e))return tv(e)}function tv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Jp=1e-4,HP=function(t,n){return[0,3*t,3*n-6*t,3*t-3*n+1]},GP=function(t,n){return t.map(function(r,a){return r*Math.pow(n,a)}).reduce(function(r,a){return r+a})},zb=function(t,n){return function(r){var a=HP(t,n);return GP(a,r)}},BZ=function(t,n){return function(r){var a=HP(t,n),o=[].concat(DZ(a.map(function(i,s){return i*s}).slice(1)),[0]);return GP(o,r)}},Bb=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var a=n[0],o=n[1],i=n[2],s=n[3];if(n.length===1)switch(n[0]){case"linear":a=0,o=0,i=1,s=1;break;case"ease":a=.25,o=.1,i=.25,s=1;break;case"ease-in":a=.42,o=0,i=1,s=1;break;case"ease-out":a=.42,o=0,i=.58,s=1;break;case"ease-in-out":a=0,o=0,i=.58,s=1;break;default:{var l=n[0].split("(");if(l[0]==="cubic-bezier"&&l[1].split(")")[0].split(",").length===4){var u=l[1].split(")")[0].split(",").map(function(g){return parseFloat(g)}),p=NZ(u,4);a=p[0],o=p[1],i=p[2],s=p[3]}}}var c=zb(a,i),f=zb(o,s),d=BZ(a,i),h=function(v){return v>1?1:v<0?0:v},m=function(v){for(var y=v>1?1:v,x=y,P=0;P<8;++P){var w=c(x)-y,S=d(x);if(Math.abs(w-y)<Jp||S<Jp)return f(x);x=h(x-w/S)}return f(x)};return m.isStepper=!1,m},HZ=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.stiff,r=n===void 0?100:n,a=t.damping,o=a===void 0?8:a,i=t.dt,s=i===void 0?17:i,l=function(p,c,f){var d=-(p-c)*r,h=f*o,m=f+(d-h)*s/1e3,g=f*s/1e3+p;return Math.abs(g-c)<Jp&&Math.abs(m)<Jp?[c,0]:[g,m]};return l.isStepper=!0,l.dt=s,l},GZ=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var a=n[0];if(typeof a=="string")switch(a){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return Bb(a);case"spring":return HZ();default:if(a.split("(")[0]==="cubic-bezier")return Bb(a)}return typeof a=="function"?a:null};function uu(e){"@babel/helpers - typeof";return uu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},uu(e)}function Hb(e){return qZ(e)||WZ(e)||UP(e)||UZ()}function UZ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function WZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function qZ(e){if(Array.isArray(e))return rv(e)}function Gb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Gb(Object(n),!0).forEach(function(r){nv(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Gb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function nv(e,t,n){return t=VZ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function VZ(e){var t=KZ(e,"string");return uu(t)==="symbol"?t:String(t)}function KZ(e,t){if(uu(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(uu(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function XZ(e,t){return ZZ(e)||QZ(e,t)||UP(e,t)||YZ()}function YZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function UP(e,t){if(e){if(typeof e=="string")return rv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return rv(e,t)}}function rv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function QZ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function ZZ(e){if(Array.isArray(e))return e}var ef=function(t,n,r){return t+(n-t)*r},av=function(t){var n=t.from,r=t.to;return n!==r},JZ=function e(t,n,r){var a=hl(function(o,i){if(av(i)){var s=t(i.from,i.to,i.velocity),l=XZ(s,2),u=l[0],p=l[1];return mt(mt({},i),{},{from:u,velocity:p})}return i},n);return r<1?hl(function(o,i){return av(i)?mt(mt({},i),{},{velocity:ef(i.velocity,a[o].velocity,r),from:ef(i.from,a[o].from,r)}):i},n):e(t,a,r-1)};const eJ=function(e,t,n,r,a){var o=TZ(e,t),i=o.reduce(function(g,v){return mt(mt({},g),{},nv({},v,[e[v],t[v]]))},{}),s=o.reduce(function(g,v){return mt(mt({},g),{},nv({},v,{from:e[v],velocity:0,to:t[v]}))},{}),l=-1,u,p,c=function(){return null},f=function(){return hl(function(v,y){return y.from},s)},d=function(){return!Object.values(s).filter(av).length},h=function(v){u||(u=v);var y=v-u,x=y/n.dt;s=JZ(n,s,x),a(mt(mt(mt({},e),t),f())),u=v,d()||(l=requestAnimationFrame(c))},m=function(v){p||(p=v);var y=(v-p)/r,x=hl(function(w,S){return ef.apply(void 0,Hb(S).concat([n(y)]))},i);if(a(mt(mt(mt({},e),t),x)),y<1)l=requestAnimationFrame(c);else{var P=hl(function(w,S){return ef.apply(void 0,Hb(S).concat([n(1)]))},i);a(mt(mt(mt({},e),t),P))}};return c=n.isStepper?h:m,function(){return requestAnimationFrame(c),function(){cancelAnimationFrame(l)}}};function Wi(e){"@babel/helpers - typeof";return Wi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wi(e)}var tJ=["children","begin","duration","attributeName","easing","isActive","steps","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart"];function nJ(e,t){if(e==null)return{};var n=rJ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rJ(e,t){if(e==null)return{};var n={},r=Object.keys(e),a,o;for(o=0;o<r.length;o++)a=r[o],!(t.indexOf(a)>=0)&&(n[a]=e[a]);return n}function Ym(e){return sJ(e)||iJ(e)||oJ(e)||aJ()}function aJ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function oJ(e,t){if(e){if(typeof e=="string")return ov(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ov(e,t)}}function iJ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function sJ(e){if(Array.isArray(e))return ov(e)}function ov(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ub(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function _n(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Ub(Object(n),!0).forEach(function(r){nl(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ub(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function nl(e,t,n){return t=WP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lJ(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function uJ(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,WP(r.key),r)}}function cJ(e,t,n){return t&&uJ(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function WP(e){var t=pJ(e,"string");return Wi(t)==="symbol"?t:String(t)}function pJ(e,t){if(Wi(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Wi(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function fJ(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&iv(e,t)}function iv(e,t){return iv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},iv(e,t)}function dJ(e){var t=mJ();return function(){var r=tf(e),a;if(t){var o=tf(this).constructor;a=Reflect.construct(r,arguments,o)}else a=r.apply(this,arguments);return sv(this,a)}}function sv(e,t){if(t&&(Wi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return lv(e)}function lv(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function mJ(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function tf(e){return tf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},tf(e)}var Vn=function(e){fJ(n,e);var t=dJ(n);function n(r,a){var o;lJ(this,n),o=t.call(this,r,a);var i=o.props,s=i.isActive,l=i.attributeName,u=i.from,p=i.to,c=i.steps,f=i.children,d=i.duration;if(o.handleStyleChange=o.handleStyleChange.bind(lv(o)),o.changeStyle=o.changeStyle.bind(lv(o)),!s||d<=0)return o.state={style:{}},typeof f=="function"&&(o.state={style:p}),sv(o);if(c&&c.length)o.state={style:c[0].style};else if(u){if(typeof f=="function")return o.state={style:u},sv(o);o.state={style:l?nl({},l,u):u}}else o.state={style:{}};return o}return cJ(n,[{key:"componentDidMount",value:function(){var a=this.props,o=a.isActive,i=a.canBegin;this.mounted=!0,!(!o||!i)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(a){var o=this.props,i=o.isActive,s=o.canBegin,l=o.attributeName,u=o.shouldReAnimate,p=o.to,c=o.from,f=this.state.style;if(s){if(!i){var d={style:l?nl({},l,p):p};this.state&&f&&(l&&f[l]!==p||!l&&f!==p)&&this.setState(d);return}if(!(wZ(a.to,p)&&a.canBegin&&a.isActive)){var h=!a.canBegin||!a.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var m=h||u?c:a.to;if(this.state&&f){var g={style:l?nl({},l,m):m};(l&&f[l]!==m||!l&&f!==m)&&this.setState(g)}this.runAnimation(_n(_n({},this.props),{},{from:m,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var a=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),a&&a()}},{key:"handleStyleChange",value:function(a){this.changeStyle(a)}},{key:"changeStyle",value:function(a){this.mounted&&this.setState({style:a})}},{key:"runJSAnimation",value:function(a){var o=this,i=a.from,s=a.to,l=a.duration,u=a.easing,p=a.begin,c=a.onAnimationEnd,f=a.onAnimationStart,d=eJ(i,s,GZ(u),l,this.changeStyle),h=function(){o.stopJSAnimation=d()};this.manager.start([f,p,h,l,c])}},{key:"runStepAnimation",value:function(a){var o=this,i=a.steps,s=a.begin,l=a.onAnimationStart,u=i[0],p=u.style,c=u.duration,f=c===void 0?0:c,d=function(m,g,v){if(v===0)return m;var y=g.duration,x=g.easing,P=x===void 0?"ease":x,w=g.style,S=g.properties,O=g.onAnimationEnd,_=v>0?i[v-1]:g,C=S||Object.keys(w);if(typeof P=="function"||P==="spring")return[].concat(Ym(m),[o.runJSAnimation.bind(o,{from:_.style,to:w,duration:y,easing:P}),y]);var j=Fb(C,y,P),E=_n(_n(_n({},_.style),w),{},{transition:j});return[].concat(Ym(m),[E,y,O]).filter(jZ)};return this.manager.start([l].concat(Ym(i.reduce(d,[p,Math.max(f,s)])),[a.onAnimationEnd]))}},{key:"runAnimation",value:function(a){this.manager||(this.manager=CZ());var o=a.begin,i=a.duration,s=a.attributeName,l=a.to,u=a.easing,p=a.onAnimationStart,c=a.onAnimationEnd,f=a.steps,d=a.children,h=this.manager;if(this.unSubscribe=h.subscribe(this.handleStyleChange),typeof u=="function"||typeof d=="function"||u==="spring"){this.runJSAnimation(a);return}if(f.length>1){this.runStepAnimation(a);return}var m=s?nl({},s,l):l,g=Fb(Object.keys(m),i,u);h.start([p,o,_n(_n({},m),{},{transition:g}),i,c])}},{key:"render",value:function(){var a=this.props,o=a.children;a.begin;var i=a.duration;a.attributeName,a.easing;var s=a.isActive;a.steps,a.from,a.to,a.canBegin,a.onAnimationEnd,a.shouldReAnimate,a.onAnimationReStart;var l=nJ(a,tJ),u=k.Children.count(o),p=this.state.style;if(typeof o=="function")return o(p);if(!s||u===0||i<=0)return o;var c=function(d){var h=d.props,m=h.style,g=m===void 0?{}:m,v=h.className,y=k.cloneElement(d,_n(_n({},l),{},{style:_n(_n({},g),p),className:v}));return y};return u===1?c(k.Children.only(o)):A.createElement("div",null,k.Children.map(o,function(f){return c(f)}))}}]),n}(k.PureComponent);Vn.displayName="Animate";Vn.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};Vn.propTypes={from:ge.oneOfType([ge.object,ge.string]),to:ge.oneOfType([ge.object,ge.string]),attributeName:ge.string,duration:ge.number,begin:ge.number,easing:ge.oneOfType([ge.string,ge.func]),steps:ge.arrayOf(ge.shape({duration:ge.number.isRequired,style:ge.object.isRequired,easing:ge.oneOfType([ge.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),ge.func]),properties:ge.arrayOf("string"),onAnimationEnd:ge.func})),children:ge.oneOfType([ge.node,ge.func]),isActive:ge.bool,canBegin:ge.bool,onAnimationEnd:ge.func,shouldReAnimate:ge.bool,onAnimationStart:ge.func,onAnimationReStart:ge.func};function cu(e){"@babel/helpers - typeof";return cu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},cu(e)}function nf(){return nf=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},nf.apply(this,arguments)}function hJ(e,t){return xJ(e)||gJ(e,t)||yJ(e,t)||vJ()}function vJ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function yJ(e,t){if(e){if(typeof e=="string")return Wb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Wb(e,t)}}function Wb(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function gJ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function xJ(e){if(Array.isArray(e))return e}function qb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Vb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?qb(Object(n),!0).forEach(function(r){wJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function wJ(e,t,n){return t=bJ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bJ(e){var t=PJ(e,"string");return cu(t)=="symbol"?t:t+""}function PJ(e,t){if(cu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(cu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Kb=function(t,n,r,a,o){var i=Math.min(Math.abs(r)/2,Math.abs(a)/2),s=a>=0?1:-1,l=r>=0?1:-1,u=a>=0&&r>=0||a<0&&r<0?1:0,p;if(i>0&&o instanceof Array){for(var c=[0,0,0,0],f=0,d=4;f<d;f++)c[f]=o[f]>i?i:o[f];p="M".concat(t,",").concat(n+s*c[0]),c[0]>0&&(p+="A ".concat(c[0],",").concat(c[0],",0,0,").concat(u,",").concat(t+l*c[0],",").concat(n)),p+="L ".concat(t+r-l*c[1],",").concat(n),c[1]>0&&(p+="A ".concat(c[1],",").concat(c[1],",0,0,").concat(u,`,
+        `).concat(t+r,",").concat(n+s*c[1])),p+="L ".concat(t+r,",").concat(n+a-s*c[2]),c[2]>0&&(p+="A ".concat(c[2],",").concat(c[2],",0,0,").concat(u,`,
+        `).concat(t+r-l*c[2],",").concat(n+a)),p+="L ".concat(t+l*c[3],",").concat(n+a),c[3]>0&&(p+="A ".concat(c[3],",").concat(c[3],",0,0,").concat(u,`,
+        `).concat(t,",").concat(n+a-s*c[3])),p+="Z"}else if(i>0&&o===+o&&o>0){var h=Math.min(i,o);p="M ".concat(t,",").concat(n+s*h,`
             A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t+l*h,",").concat(n,`
             L `).concat(t+r-l*h,",").concat(n,`
             A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t+r,",").concat(n+s*h,`
             L `).concat(t+r,",").concat(n+a-s*h,`
             A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t+r-l*h,",").concat(n+a,`
             L `).concat(t+l*h,",").concat(n+a,`
-            A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t,",").concat(n+a-s*h," Z")}else f="M ".concat(t,",").concat(n," h ").concat(r," v ").concat(a," h ").concat(-r," Z");return f},uJ=function(t,n){if(!t||!n)return!1;var r=t.x,a=t.y,o=n.x,i=n.y,s=n.width,l=n.height;if(Math.abs(s)>0&&Math.abs(l)>0){var u=Math.min(o,o+s),f=Math.max(o,o+s),c=Math.min(i,i+l),p=Math.max(i,i+l);return r>=u&&r<=f&&a>=c&&a<=p}return!1},cJ={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},Ug=function(t){var n=Wb(Wb({},cJ),t),r=k.useRef(),a=k.useState(-1),o=tJ(a,2),i=o[0],s=o[1];k.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var P=r.current.getTotalLength();P&&s(P)}catch{}},[]);var l=n.x,u=n.y,f=n.width,c=n.height,p=n.radius,d=n.className,h=n.animationEasing,m=n.animationDuration,g=n.animationBegin,v=n.isAnimationActive,y=n.isUpdateAnimationActive;if(l!==+l||u!==+u||f!==+f||c!==+c||f===0||c===0)return null;var x=ue("recharts-rectangle",d);return y?C.createElement(Vn,{canBegin:i>0,from:{width:f,height:c,x:l,y:u},to:{width:f,height:c,x:l,y:u},duration:m,animationEasing:h,isActive:y},function(P){var w=P.width,S=P.height,O=P.x,_=P.y;return C.createElement(Vn,{canBegin:i>0,from:"0px ".concat(i===-1?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:g,duration:m,isActive:v,easing:h},C.createElement("path",rp({},re(n,!0),{className:x,d:qb(O,_,w,S,p),ref:r})))}):C.createElement("path",rp({},re(n,!0),{className:x,d:qb(l,u,f,c,p)}))};function uy(){return uy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},uy.apply(this,arguments)}var Ad=function(t){var n=t.cx,r=t.cy,a=t.r,o=t.className,i=ue("recharts-dot",o);return n===+n&&r===+r&&a===+a?k.createElement("circle",uy({},re(t,!1),Sf(t),{className:i,cx:n,cy:r,r:a})):null};function fu(e){"@babel/helpers - typeof";return fu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fu(e)}var fJ=["x","y","top","left","width","height","className"];function cy(){return cy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},cy.apply(this,arguments)}function Vb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function pJ(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Vb(Object(n),!0).forEach(function(r){dJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Vb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function dJ(e,t,n){return t=mJ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mJ(e){var t=hJ(e,"string");return fu(t)=="symbol"?t:t+""}function hJ(e,t){if(fu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(fu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function vJ(e,t){if(e==null)return{};var n=yJ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yJ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var gJ=function(t,n,r,a,o,i){return"M".concat(t,",").concat(o,"v").concat(a,"M").concat(i,",").concat(n,"h").concat(r)},xJ=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,o=a===void 0?0:a,i=t.top,s=i===void 0?0:i,l=t.left,u=l===void 0?0:l,f=t.width,c=f===void 0?0:f,p=t.height,d=p===void 0?0:p,h=t.className,m=vJ(t,fJ),g=pJ({x:r,y:o,top:s,left:u,width:c,height:d},m);return!V(r)||!V(o)||!V(c)||!V(d)||!V(s)||!V(u)?null:C.createElement("path",cy({},re(g,!0),{className:ue("recharts-cross",h),d:gJ(r,o,c,d,s,u)}))},wJ=r7,bJ=wJ(Object.getPrototypeOf,Object),PJ=bJ,SJ=Ur,OJ=PJ,kJ=Wr,_J="[object Object]",AJ=Function.prototype,CJ=Object.prototype,GP=AJ.toString,EJ=CJ.hasOwnProperty,TJ=GP.call(Object);function jJ(e){if(!kJ(e)||SJ(e)!=_J)return!1;var t=OJ(e);if(t===null)return!0;var n=EJ.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&GP.call(n)==TJ}var $J=jJ;const NJ=Ce($J);var MJ=Ur,RJ=Wr,IJ="[object Boolean]";function DJ(e){return e===!0||e===!1||RJ(e)&&MJ(e)==IJ}var LJ=DJ;const FJ=Ce(LJ);function pu(e){"@babel/helpers - typeof";return pu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pu(e)}function ap(){return ap=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ap.apply(this,arguments)}function zJ(e,t){return UJ(e)||GJ(e,t)||HJ(e,t)||BJ()}function BJ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function HJ(e,t){if(e){if(typeof e=="string")return Kb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Kb(e,t)}}function Kb(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function GJ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function UJ(e){if(Array.isArray(e))return e}function Xb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Yb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Xb(Object(n),!0).forEach(function(r){WJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function WJ(e,t,n){return t=qJ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function qJ(e){var t=VJ(e,"string");return pu(t)=="symbol"?t:t+""}function VJ(e,t){if(pu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(pu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Qb=function(t,n,r,a,o){var i=r-a,s;return s="M ".concat(t,",").concat(n),s+="L ".concat(t+r,",").concat(n),s+="L ".concat(t+r-i/2,",").concat(n+o),s+="L ".concat(t+r-i/2-a,",").concat(n+o),s+="L ".concat(t,",").concat(n," Z"),s},KJ={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},XJ=function(t){var n=Yb(Yb({},KJ),t),r=k.useRef(),a=k.useState(-1),o=zJ(a,2),i=o[0],s=o[1];k.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var x=r.current.getTotalLength();x&&s(x)}catch{}},[]);var l=n.x,u=n.y,f=n.upperWidth,c=n.lowerWidth,p=n.height,d=n.className,h=n.animationEasing,m=n.animationDuration,g=n.animationBegin,v=n.isUpdateAnimationActive;if(l!==+l||u!==+u||f!==+f||c!==+c||p!==+p||f===0&&c===0||p===0)return null;var y=ue("recharts-trapezoid",d);return v?C.createElement(Vn,{canBegin:i>0,from:{upperWidth:0,lowerWidth:0,height:p,x:l,y:u},to:{upperWidth:f,lowerWidth:c,height:p,x:l,y:u},duration:m,animationEasing:h,isActive:v},function(x){var P=x.upperWidth,w=x.lowerWidth,S=x.height,O=x.x,_=x.y;return C.createElement(Vn,{canBegin:i>0,from:"0px ".concat(i===-1?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:g,duration:m,easing:h},C.createElement("path",ap({},re(n,!0),{className:y,d:Qb(O,_,P,w,S),ref:r})))}):C.createElement("g",null,C.createElement("path",ap({},re(n,!0),{className:y,d:Qb(l,u,f,c,p)})))},YJ=["option","shapeType","propTransformer","activeClassName","isActive"];function du(e){"@babel/helpers - typeof";return du=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},du(e)}function QJ(e,t){if(e==null)return{};var n=ZJ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZJ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Zb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function op(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Zb(Object(n),!0).forEach(function(r){JJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function JJ(e,t,n){return t=eee(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function eee(e){var t=tee(e,"string");return du(t)=="symbol"?t:t+""}function tee(e,t){if(du(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(du(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function nee(e,t){return op(op({},t),e)}function ree(e,t){return e==="symbols"}function Jb(e){var t=e.shapeType,n=e.elementProps;switch(t){case"rectangle":return C.createElement(Ug,n);case"trapezoid":return C.createElement(XJ,n);case"sector":return C.createElement($P,n);case"symbols":if(ree(t))return C.createElement(md,n);break;default:return null}}function aee(e){return k.isValidElement(e)?e.props:e}function fy(e){var t=e.option,n=e.shapeType,r=e.propTransformer,a=r===void 0?nee:r,o=e.activeClassName,i=o===void 0?"recharts-active-shape":o,s=e.isActive,l=QJ(e,YJ),u;if(k.isValidElement(t))u=k.cloneElement(t,op(op({},l),aee(t)));else if(oe(t))u=t(l);else if(NJ(t)&&!FJ(t)){var f=a(t,l);u=C.createElement(Jb,{shapeType:n,elementProps:f})}else{var c=l;u=C.createElement(Jb,{shapeType:n,elementProps:c})}return s?C.createElement(ye,{className:i},u):u}function Cd(e,t){return t!=null&&"trapezoids"in e.props}function Ed(e,t){return t!=null&&"sectors"in e.props}function mu(e,t){return t!=null&&"points"in e.props}function oee(e,t){var n,r,a=e.x===(t==null||(n=t.labelViewBox)===null||n===void 0?void 0:n.x)||e.x===t.x,o=e.y===(t==null||(r=t.labelViewBox)===null||r===void 0?void 0:r.y)||e.y===t.y;return a&&o}function iee(e,t){var n=e.endAngle===t.endAngle,r=e.startAngle===t.startAngle;return n&&r}function see(e,t){var n=e.x===t.x,r=e.y===t.y,a=e.z===t.z;return n&&r&&a}function lee(e,t){var n;return Cd(e,t)?n=oee:Ed(e,t)?n=iee:mu(e,t)&&(n=see),n}function uee(e,t){var n;return Cd(e,t)?n="trapezoids":Ed(e,t)?n="sectors":mu(e,t)&&(n="points"),n}function cee(e,t){if(Cd(e,t)){var n;return(n=t.tooltipPayload)===null||n===void 0||(n=n[0])===null||n===void 0||(n=n.payload)===null||n===void 0?void 0:n.payload}if(Ed(e,t)){var r;return(r=t.tooltipPayload)===null||r===void 0||(r=r[0])===null||r===void 0||(r=r.payload)===null||r===void 0?void 0:r.payload}return mu(e,t)?t.payload:{}}function fee(e){var t=e.activeTooltipItem,n=e.graphicalItem,r=e.itemData,a=uee(n,t),o=cee(n,t),i=r.filter(function(l,u){var f=ko(o,l),c=n.props[a].filter(function(h){var m=lee(n,t);return m(h,t)}),p=n.props[a].indexOf(c[c.length-1]),d=u===p;return f&&d}),s=r.indexOf(i[i.length-1]);return s}var pee=Math.ceil,dee=Math.max;function mee(e,t,n,r){for(var a=-1,o=dee(pee((t-e)/(n||1)),0),i=Array(o);o--;)i[r?o:++a]=e,e+=n;return i}var hee=mee,vee=P7,e2=1/0,yee=17976931348623157e292;function gee(e){if(!e)return e===0?e:0;if(e=vee(e),e===e2||e===-e2){var t=e<0?-1:1;return t*yee}return e===e?e:0}var UP=gee,xee=hee,wee=yd,Qm=UP;function bee(e){return function(t,n,r){return r&&typeof r!="number"&&wee(t,n,r)&&(n=r=void 0),t=Qm(t),n===void 0?(n=t,t=0):n=Qm(n),r=r===void 0?t<n?1:-1:Qm(r),xee(t,n,r,e)}}var Pee=bee,See=Pee,Oee=See(),kee=Oee;const ip=Ce(kee);function hu(e){"@babel/helpers - typeof";return hu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},hu(e)}function t2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function n2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?t2(Object(n),!0).forEach(function(r){WP(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):t2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function WP(e,t,n){return t=_ee(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _ee(e){var t=Aee(e,"string");return hu(t)=="symbol"?t:t+""}function Aee(e,t){if(hu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(hu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Cee=["Webkit","Moz","O","ms"],Eee=function(t,n){var r=t.replace(/(\w)/,function(o){return o.toUpperCase()}),a=Cee.reduce(function(o,i){return n2(n2({},o),{},WP({},i+r,n))},{});return a[t]=n,a};function qi(e){"@babel/helpers - typeof";return qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qi(e)}function sp(){return sp=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},sp.apply(this,arguments)}function r2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Zm(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?r2(Object(n),!0).forEach(function(r){Xt(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Tee(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,VP(r.key),r)}}function jee(e,t,n){return t&&a2(e.prototype,t),n&&a2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function $ee(e,t,n){return t=lp(t),Nee(e,qP()?Reflect.construct(t,n||[],lp(e).constructor):t.apply(e,n))}function Nee(e,t){if(t&&(qi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Mee(e)}function Mee(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function qP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(qP=function(){return!!e})()}function lp(e){return lp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},lp(e)}function Ree(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&py(e,t)}function py(e,t){return py=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},py(e,t)}function Xt(e,t,n){return t=VP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function VP(e){var t=Iee(e,"string");return qi(t)=="symbol"?t:t+""}function Iee(e,t){if(qi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(qi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Dee=function(t){var n=t.data,r=t.startIndex,a=t.endIndex,o=t.x,i=t.width,s=t.travellerWidth;if(!n||!n.length)return{};var l=n.length,u=dl().domain(ip(0,l)).range([o,o+i-s]),f=u.domain().map(function(c){return u(c)});return{isTextActive:!1,isSlideMoving:!1,isTravellerMoving:!1,isTravellerFocused:!1,startX:u(r),endX:u(a),scale:u,scaleValues:f}},o2=function(t){return t.changedTouches&&!!t.changedTouches.length},Vi=function(e){function t(n){var r;return Tee(this,t),r=$ee(this,t,[n]),Xt(r,"handleDrag",function(a){r.leaveTimer&&(clearTimeout(r.leaveTimer),r.leaveTimer=null),r.state.isTravellerMoving?r.handleTravellerMove(a):r.state.isSlideMoving&&r.handleSlideDrag(a)}),Xt(r,"handleTouchMove",function(a){a.changedTouches!=null&&a.changedTouches.length>0&&r.handleDrag(a.changedTouches[0])}),Xt(r,"handleDragEnd",function(){r.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var a=r.props,o=a.endIndex,i=a.onDragEnd,s=a.startIndex;i==null||i({endIndex:o,startIndex:s})}),r.detachDragEndListener()}),Xt(r,"handleLeaveWrapper",function(){(r.state.isTravellerMoving||r.state.isSlideMoving)&&(r.leaveTimer=window.setTimeout(r.handleDragEnd,r.props.leaveTimeOut))}),Xt(r,"handleEnterSlideOrTraveller",function(){r.setState({isTextActive:!0})}),Xt(r,"handleLeaveSlideOrTraveller",function(){r.setState({isTextActive:!1})}),Xt(r,"handleSlideDragStart",function(a){var o=o2(a)?a.changedTouches[0]:a;r.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:o.pageX}),r.attachDragEndListener()}),r.travellerDragStartHandlers={startX:r.handleTravellerDragStart.bind(r,"startX"),endX:r.handleTravellerDragStart.bind(r,"endX")},r.state={},r}return Ree(t,e),jee(t,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(r){var a=r.startX,o=r.endX,i=this.state.scaleValues,s=this.props,l=s.gap,u=s.data,f=u.length-1,c=Math.min(a,o),p=Math.max(a,o),d=t.getIndexInRange(i,c),h=t.getIndexInRange(i,p);return{startIndex:d-d%l,endIndex:h===f?f:h-h%l}}},{key:"getTextOfTick",value:function(r){var a=this.props,o=a.data,i=a.tickFormatter,s=a.dataKey,l=st(o[r],s,r);return oe(i)?i(l,r):l}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(r){var a=this.state,o=a.slideMoveStartX,i=a.startX,s=a.endX,l=this.props,u=l.x,f=l.width,c=l.travellerWidth,p=l.startIndex,d=l.endIndex,h=l.onChange,m=r.pageX-o;m>0?m=Math.min(m,u+f-c-s,u+f-c-i):m<0&&(m=Math.max(m,u-i,u-s));var g=this.getIndex({startX:i+m,endX:s+m});(g.startIndex!==p||g.endIndex!==d)&&h&&h(g),this.setState({startX:i+m,endX:s+m,slideMoveStartX:r.pageX})}},{key:"handleTravellerDragStart",value:function(r,a){var o=o2(a)?a.changedTouches[0]:a;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:r,brushMoveStartX:o.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(r){var a=this.state,o=a.brushMoveStartX,i=a.movingTravellerId,s=a.endX,l=a.startX,u=this.state[i],f=this.props,c=f.x,p=f.width,d=f.travellerWidth,h=f.onChange,m=f.gap,g=f.data,v={startX:this.state.startX,endX:this.state.endX},y=r.pageX-o;y>0?y=Math.min(y,c+p-d-u):y<0&&(y=Math.max(y,c-u)),v[i]=u+y;var x=this.getIndex(v),P=x.startIndex,w=x.endIndex,S=function(){var _=g.length-1;return i==="startX"&&(s>l?P%m===0:w%m===0)||s<l&&w===_||i==="endX"&&(s>l?w%m===0:P%m===0)||s>l&&w===_};this.setState(Xt(Xt({},i,u+y),"brushMoveStartX",r.pageX),function(){h&&S()&&h(x)})}},{key:"handleTravellerMoveKeyboard",value:function(r,a){var o=this,i=this.state,s=i.scaleValues,l=i.startX,u=i.endX,f=this.state[a],c=s.indexOf(f);if(c!==-1){var p=c+r;if(!(p===-1||p>=s.length)){var d=s[p];a==="startX"&&d>=u||a==="endX"&&d<=l||this.setState(Xt({},a,d),function(){o.props.onChange(o.getIndex({startX:o.state.startX,endX:o.state.endX}))})}}}},{key:"renderBackground",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.fill,u=r.stroke;return C.createElement("rect",{stroke:u,fill:l,x:a,y:o,width:i,height:s})}},{key:"renderPanorama",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.data,u=r.children,f=r.padding,c=k.Children.only(u);return c?C.cloneElement(c,{x:a,y:o,width:i,height:s,margin:f,compact:!0,data:l}):null}},{key:"renderTravellerLayer",value:function(r,a){var o,i,s=this,l=this.props,u=l.y,f=l.travellerWidth,c=l.height,p=l.traveller,d=l.ariaLabel,h=l.data,m=l.startIndex,g=l.endIndex,v=Math.max(r,this.props.x),y=Zm(Zm({},re(this.props,!1)),{},{x:v,y:u,width:f,height:c}),x=d||"Min value: ".concat((o=h[m])===null||o===void 0?void 0:o.name,", Max value: ").concat((i=h[g])===null||i===void 0?void 0:i.name);return C.createElement(ye,{tabIndex:0,role:"slider","aria-label":x,"aria-valuenow":r,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[a],onTouchStart:this.travellerDragStartHandlers[a],onKeyDown:function(w){["ArrowLeft","ArrowRight"].includes(w.key)&&(w.preventDefault(),w.stopPropagation(),s.handleTravellerMoveKeyboard(w.key==="ArrowRight"?1:-1,a))},onFocus:function(){s.setState({isTravellerFocused:!0})},onBlur:function(){s.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},t.renderTraveller(p,y))}},{key:"renderSlide",value:function(r,a){var o=this.props,i=o.y,s=o.height,l=o.stroke,u=o.travellerWidth,f=Math.min(r,a)+u,c=Math.max(Math.abs(a-r)-u,0);return C.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:l,fillOpacity:.2,x:f,y:i,width:c,height:s})}},{key:"renderText",value:function(){var r=this.props,a=r.startIndex,o=r.endIndex,i=r.y,s=r.height,l=r.travellerWidth,u=r.stroke,f=this.state,c=f.startX,p=f.endX,d=5,h={pointerEvents:"none",fill:u};return C.createElement(ye,{className:"recharts-brush-texts"},C.createElement(Df,sp({textAnchor:"end",verticalAnchor:"middle",x:Math.min(c,p)-d,y:i+s/2},h),this.getTextOfTick(a)),C.createElement(Df,sp({textAnchor:"start",verticalAnchor:"middle",x:Math.max(c,p)+l+d,y:i+s/2},h),this.getTextOfTick(o)))}},{key:"render",value:function(){var r=this.props,a=r.data,o=r.className,i=r.children,s=r.x,l=r.y,u=r.width,f=r.height,c=r.alwaysShowText,p=this.state,d=p.startX,h=p.endX,m=p.isTextActive,g=p.isSlideMoving,v=p.isTravellerMoving,y=p.isTravellerFocused;if(!a||!a.length||!V(s)||!V(l)||!V(u)||!V(f)||u<=0||f<=0)return null;var x=ue("recharts-brush",o),P=C.Children.count(i)===1,w=Eee("userSelect","none");return C.createElement(ye,{className:x,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:w},this.renderBackground(),P&&this.renderPanorama(),this.renderSlide(d,h),this.renderTravellerLayer(d,"startX"),this.renderTravellerLayer(h,"endX"),(m||g||v||y||c)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(r){var a=r.x,o=r.y,i=r.width,s=r.height,l=r.stroke,u=Math.floor(o+s/2)-1;return C.createElement(C.Fragment,null,C.createElement("rect",{x:a,y:o,width:i,height:s,fill:l,stroke:"none"}),C.createElement("line",{x1:a+1,y1:u,x2:a+i-1,y2:u,fill:"none",stroke:"#fff"}),C.createElement("line",{x1:a+1,y1:u+2,x2:a+i-1,y2:u+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(r,a){var o;return C.isValidElement(r)?o=C.cloneElement(r,a):oe(r)?o=r(a):o=t.renderDefaultTraveller(a),o}},{key:"getDerivedStateFromProps",value:function(r,a){var o=r.data,i=r.width,s=r.x,l=r.travellerWidth,u=r.updateId,f=r.startIndex,c=r.endIndex;if(o!==a.prevData||u!==a.prevUpdateId)return Zm({prevData:o,prevTravellerWidth:l,prevUpdateId:u,prevX:s,prevWidth:i},o&&o.length?Dee({data:o,width:i,x:s,travellerWidth:l,startIndex:f,endIndex:c}):{scale:null,scaleValues:null});if(a.scale&&(i!==a.prevWidth||s!==a.prevX||l!==a.prevTravellerWidth)){a.scale.range([s,s+i-l]);var p=a.scale.domain().map(function(d){return a.scale(d)});return{prevData:o,prevTravellerWidth:l,prevUpdateId:u,prevX:s,prevWidth:i,startX:a.scale(r.startIndex),endX:a.scale(r.endIndex),scaleValues:p}}return null}},{key:"getIndexInRange",value:function(r,a){for(var o=r.length,i=0,s=o-1;s-i>1;){var l=Math.floor((i+s)/2);r[l]>a?s=l:i=l}return a>=r[s]?s:i}}])}(k.PureComponent);Xt(Vi,"displayName","Brush");Xt(Vi,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var Lee=hg;function Fee(e,t){var n;return Lee(e,function(r,a,o){return n=t(r,a,o),!n}),!!n}var zee=Fee,Bee=X8,Hee=Ia,Gee=zee,Uee=Vt,Wee=yd;function qee(e,t,n){var r=Uee(e)?Bee:Gee;return n&&Wee(e,t,n)&&(t=void 0),r(e,Hee(t))}var Vee=qee;const Kee=Ce(Vee);var mr=function(t,n){var r=t.alwaysShow,a=t.ifOverflow;return r&&(a="extendDomain"),a===n},i2=y7;function Xee(e,t,n){t=="__proto__"&&i2?i2(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var Yee=Xee,Qee=Yee,Zee=h7,Jee=Ia;function ete(e,t){var n={};return t=Jee(t),Zee(e,function(r,a,o){Qee(n,a,t(r,a,o))}),n}var tte=ete;const nte=Ce(tte);function rte(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}var ate=rte,ote=hg;function ite(e,t){var n=!0;return ote(e,function(r,a,o){return n=!!t(r,a,o),n}),n}var ste=ite,lte=ate,ute=ste,cte=Ia,fte=Vt,pte=yd;function dte(e,t,n){var r=fte(e)?lte:ute;return n&&pte(e,t,n)&&(t=void 0),r(e,cte(t))}var mte=dte;const KP=Ce(mte);var hte=["x","y"];function vu(e){"@babel/helpers - typeof";return vu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},vu(e)}function dy(){return dy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},dy.apply(this,arguments)}function s2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ys(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?s2(Object(n),!0).forEach(function(r){vte(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function vte(e,t,n){return t=yte(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yte(e){var t=gte(e,"string");return vu(t)=="symbol"?t:t+""}function gte(e,t){if(vu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(vu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function xte(e,t){if(e==null)return{};var n=wte(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wte(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function bte(e,t){var n=e.x,r=e.y,a=xte(e,hte),o="".concat(n),i=parseInt(o,10),s="".concat(r),l=parseInt(s,10),u="".concat(t.height||a.height),f=parseInt(u,10),c="".concat(t.width||a.width),p=parseInt(c,10);return Ys(Ys(Ys(Ys(Ys({},t),a),i?{x:i}:{}),l?{y:l}:{}),{},{height:f,width:p,name:t.name,radius:t.radius})}function l2(e){return C.createElement(fy,dy({shapeType:"rectangle",propTransformer:bte,activeClassName:"recharts-active-bar"},e))}var Pte=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(r,a){if(typeof t=="number")return t;var o=V(r)||FM(r);return o?t(r,a):(o||Ao(),n)}},Ste=["value","background"],XP;function Ki(e){"@babel/helpers - typeof";return Ki=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ki(e)}function Ote(e,t){if(e==null)return{};var n=kte(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kte(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function up(){return up=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},up.apply(this,arguments)}function u2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Je(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?u2(Object(n),!0).forEach(function(r){ma(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function _te(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,QP(r.key),r)}}function Ate(e,t,n){return t&&c2(e.prototype,t),n&&c2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Cte(e,t,n){return t=cp(t),Ete(e,YP()?Reflect.construct(t,n||[],cp(e).constructor):t.apply(e,n))}function Ete(e,t){if(t&&(Ki(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Tte(e)}function Tte(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function YP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(YP=function(){return!!e})()}function cp(e){return cp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},cp(e)}function jte(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&my(e,t)}function my(e,t){return my=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},my(e,t)}function ma(e,t,n){return t=QP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function QP(e){var t=$te(e,"string");return Ki(t)=="symbol"?t:t+""}function $te(e,t){if(Ki(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ki(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Vr=function(e){function t(){var n;_te(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=Cte(this,t,[].concat(a)),ma(n,"state",{isAnimationFinished:!1}),ma(n,"id",$o("recharts-bar-")),ma(n,"handleAnimationEnd",function(){var i=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),i&&i()}),ma(n,"handleAnimationStart",function(){var i=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),i&&i()}),n}return jte(t,e),Ate(t,[{key:"renderRectanglesStatically",value:function(r){var a=this,o=this.props,i=o.shape,s=o.dataKey,l=o.activeIndex,u=o.activeBar,f=re(this.props,!1);return r&&r.map(function(c,p){var d=p===l,h=d?u:i,m=Je(Je(Je({},f),c),{},{isActive:d,option:h,index:p,dataKey:s,onAnimationStart:a.handleAnimationStart,onAnimationEnd:a.handleAnimationEnd});return C.createElement(ye,up({className:"recharts-bar-rectangle"},Fl(a.props,c,p),{key:"rectangle-".concat(c==null?void 0:c.x,"-").concat(c==null?void 0:c.y,"-").concat(c==null?void 0:c.value,"-").concat(p)}),C.createElement(l2,m))})}},{key:"renderRectanglesWithAnimation",value:function(){var r=this,a=this.props,o=a.data,i=a.layout,s=a.isAnimationActive,l=a.animationBegin,u=a.animationDuration,f=a.animationEasing,c=a.animationId,p=this.state.prevData;return C.createElement(Vn,{begin:l,duration:u,isActive:s,easing:f,from:{t:0},to:{t:1},key:"bar-".concat(c),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(d){var h=d.t,m=o.map(function(g,v){var y=p&&p[v];if(y){var x=Xe(y.x,g.x),P=Xe(y.y,g.y),w=Xe(y.width,g.width),S=Xe(y.height,g.height);return Je(Je({},g),{},{x:x(h),y:P(h),width:w(h),height:S(h)})}if(i==="horizontal"){var O=Xe(0,g.height),_=O(h);return Je(Je({},g),{},{y:g.y+g.height-_,height:_})}var A=Xe(0,g.width),j=A(h);return Je(Je({},g),{},{width:j})});return C.createElement(ye,null,r.renderRectanglesStatically(m))})}},{key:"renderRectangles",value:function(){var r=this.props,a=r.data,o=r.isAnimationActive,i=this.state.prevData;return o&&a&&a.length&&(!i||!ko(i,a))?this.renderRectanglesWithAnimation():this.renderRectanglesStatically(a)}},{key:"renderBackground",value:function(){var r=this,a=this.props,o=a.data,i=a.dataKey,s=a.activeIndex,l=re(this.props.background,!1);return o.map(function(u,f){u.value;var c=u.background,p=Ote(u,Ste);if(!c)return null;var d=Je(Je(Je(Je(Je({},p),{},{fill:"#eee"},c),l),Fl(r.props,u,f)),{},{onAnimationStart:r.handleAnimationStart,onAnimationEnd:r.handleAnimationEnd,dataKey:i,index:f,className:"recharts-bar-background-rectangle"});return C.createElement(l2,up({key:"background-bar-".concat(f),option:r.props.background,isActive:f===s},d))})}},{key:"renderErrorBar",value:function(r,a){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var o=this.props,i=o.data,s=o.xAxis,l=o.yAxis,u=o.layout,f=o.children,c=qt(f,Es);if(!c)return null;var p=u==="vertical"?i[0].height/2:i[0].width/2,d=function(g,v){var y=Array.isArray(g.value)?g.value[1]:g.value;return{x:g.x,y:g.y,value:y,errorVal:st(g,v)}},h={clipPath:r?"url(#clipPath-".concat(a,")"):null};return C.createElement(ye,h,c.map(function(m){return C.cloneElement(m,{key:"error-bar-".concat(a,"-").concat(m.props.dataKey),data:i,xAxis:s,yAxis:l,layout:u,offset:p,dataPointFormatter:d})}))}},{key:"render",value:function(){var r=this.props,a=r.hide,o=r.data,i=r.className,s=r.xAxis,l=r.yAxis,u=r.left,f=r.top,c=r.width,p=r.height,d=r.isAnimationActive,h=r.background,m=r.id;if(a||!o||!o.length)return null;var g=this.state.isAnimationFinished,v=ue("recharts-bar",i),y=s&&s.allowDataOverflow,x=l&&l.allowDataOverflow,P=y||x,w=te(m)?this.id:m;return C.createElement(ye,{className:v},y||x?C.createElement("defs",null,C.createElement("clipPath",{id:"clipPath-".concat(w)},C.createElement("rect",{x:y?u:u-c/2,y:x?f:f-p/2,width:y?c:c*2,height:x?p:p*2}))):null,C.createElement(ye,{className:"recharts-bar-rectangles",clipPath:P?"url(#clipPath-".concat(w,")"):null},h?this.renderBackground():null,this.renderRectangles()),this.renderErrorBar(P,w),(!d||g)&&dr.renderCallByParent(this.props,o))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curData:r.data,prevData:a.curData}:r.data!==a.curData?{curData:r.data}:null}}])}(k.PureComponent);XP=Vr;ma(Vr,"displayName","Bar");ma(Vr,"defaultProps",{xAxisId:0,yAxisId:0,legendType:"rect",minPointSize:0,hide:!1,data:[],layout:"vertical",activeBar:!1,isAnimationActive:!Da.isSsr,animationBegin:0,animationDuration:400,animationEasing:"ease"});ma(Vr,"getComposedData",function(e){var t=e.props,n=e.item,r=e.barPosition,a=e.bandSize,o=e.xAxis,i=e.yAxis,s=e.xAxisTicks,l=e.yAxisTicks,u=e.stackedData,f=e.dataStartIndex,c=e.displayedData,p=e.offset,d=uY(r,n);if(!d)return null;var h=t.layout,m=n.type.defaultProps,g=m!==void 0?Je(Je({},m),n.props):n.props,v=g.dataKey,y=g.children,x=g.minPointSize,P=h==="horizontal"?i:o,w=u?P.scale.domain():null,S=yY({numericAxis:P}),O=qt(y,gg),_=c.map(function(A,j){var E,T,N,M,I,R;u?E=cY(u[f+j],w):(E=st(A,v),Array.isArray(E)||(E=[S,E]));var L=Pte(x,XP.defaultProps.minPointSize)(E[1],j);if(h==="horizontal"){var $,D=[i.scale(E[0]),i.scale(E[1])],H=D[0],W=D[1];T=ub({axis:o,ticks:s,bandSize:a,offset:d.offset,entry:A,index:j}),N=($=W??H)!==null&&$!==void 0?$:void 0,M=d.size;var G=H-W;if(I=Number.isNaN(G)?0:G,R={x:T,y:i.y,width:M,height:i.height},Math.abs(L)>0&&Math.abs(I)<Math.abs(L)){var Z=Dn(I||L)*(Math.abs(L)-Math.abs(I));N-=Z,I+=Z}}else{var ie=[o.scale(E[0]),o.scale(E[1])],ve=ie[0],Pe=ie[1];if(T=ve,N=ub({axis:i,ticks:l,bandSize:a,offset:d.offset,entry:A,index:j}),M=Pe-ve,I=d.size,R={x:o.x,y:N,width:o.width,height:I},Math.abs(L)>0&&Math.abs(M)<Math.abs(L)){var J=Dn(M||L)*(Math.abs(L)-Math.abs(M));M+=J}}return Je(Je(Je({},A),{},{x:T,y:N,width:M,height:I,value:u?E:E[1],payload:A,background:R},O&&O[j]&&O[j].props),{},{tooltipPayload:[EP(n,A)],tooltipPosition:{x:T+M/2,y:N+I/2}})});return Je({data:_,layout:h},p)});function yu(e){"@babel/helpers - typeof";return yu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},yu(e)}function Nte(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,ZP(r.key),r)}}function Mte(e,t,n){return t&&f2(e.prototype,t),n&&f2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function p2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Nn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?p2(Object(n),!0).forEach(function(r){Td(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Td(e,t,n){return t=ZP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ZP(e){var t=Rte(e,"string");return yu(t)=="symbol"?t:t+""}function Rte(e,t){if(yu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(yu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var jd=function(t,n,r,a,o){var i=t.width,s=t.height,l=t.layout,u=t.children,f=Object.keys(n),c={left:r.left,leftMirror:r.left,right:i-r.right,rightMirror:i-r.right,top:r.top,topMirror:r.top,bottom:s-r.bottom,bottomMirror:s-r.bottom},p=!!Qt(u,Vr);return f.reduce(function(d,h){var m=n[h],g=m.orientation,v=m.domain,y=m.padding,x=y===void 0?{}:y,P=m.mirror,w=m.reversed,S="".concat(g).concat(P?"Mirror":""),O,_,A,j,E;if(m.type==="number"&&(m.padding==="gap"||m.padding==="no-gap")){var T=v[1]-v[0],N=1/0,M=m.categoricalDomain.sort(GM);if(M.forEach(function(ie,ve){ve>0&&(N=Math.min((ie||0)-(M[ve-1]||0),N))}),Number.isFinite(N)){var I=N/T,R=m.layout==="vertical"?r.height:r.width;if(m.padding==="gap"&&(O=I*R/2),m.padding==="no-gap"){var L=Oo(t.barCategoryGap,I*R),$=I*R/2;O=$-L-($-L)/R*L}}}a==="xAxis"?_=[r.left+(x.left||0)+(O||0),r.left+r.width-(x.right||0)-(O||0)]:a==="yAxis"?_=l==="horizontal"?[r.top+r.height-(x.bottom||0),r.top+(x.top||0)]:[r.top+(x.top||0)+(O||0),r.top+r.height-(x.bottom||0)-(O||0)]:_=m.range,w&&(_=[_[1],_[0]]);var D=sY(m,o,p),H=D.scale,W=D.realScaleType;H.domain(v).range(_),lY(H);var G=vY(H,Nn(Nn({},m),{},{realScaleType:W}));a==="xAxis"?(E=g==="top"&&!P||g==="bottom"&&P,A=r.left,j=c[S]-E*m.height):a==="yAxis"&&(E=g==="left"&&!P||g==="right"&&P,A=c[S]-E*m.width,j=r.top);var Z=Nn(Nn(Nn({},m),G),{},{realScaleType:W,x:A,y:j,scale:H,width:a==="xAxis"?r.width:m.width,height:a==="yAxis"?r.height:m.height});return Z.bandSize=Qf(Z,G),!m.hide&&a==="xAxis"?c[S]+=(E?-1:1)*Z.height:m.hide||(c[S]+=(E?-1:1)*Z.width),Nn(Nn({},d),{},Td({},h,Z))},{})},JP=function(t,n){var r=t.x,a=t.y,o=n.x,i=n.y;return{x:Math.min(r,o),y:Math.min(a,i),width:Math.abs(o-r),height:Math.abs(i-a)}},Ite=function(t){var n=t.x1,r=t.y1,a=t.x2,o=t.y2;return JP({x:n,y:r},{x:a,y:o})},eS=function(){function e(t){Nte(this,e),this.scale=t}return Mte(e,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=r.bandAware,o=r.position;if(n!==void 0){if(o)switch(o){case"start":return this.scale(n);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+i}case"end":{var s=this.bandwidth?this.bandwidth():0;return this.scale(n)+s}default:return this.scale(n)}if(a){var l=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+l}return this.scale(n)}}},{key:"isInRange",value:function(n){var r=this.range(),a=r[0],o=r[r.length-1];return a<=o?n>=a&&n<=o:n>=o&&n<=a}}],[{key:"create",value:function(n){return new e(n)}}])}();Td(eS,"EPS",1e-4);var Wg=function(t){var n=Object.keys(t).reduce(function(r,a){return Nn(Nn({},r),{},Td({},a,eS.create(t[a])))},{});return Nn(Nn({},n),{},{apply:function(a){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.bandAware,s=o.position;return nte(a,function(l,u){return n[u].apply(l,{bandAware:i,position:s})})},isInRange:function(a){return KP(a,function(o,i){return n[i].isInRange(o)})}})};function Dte(e){return(e%180+180)%180}var Lte=function(t){var n=t.width,r=t.height,a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=Dte(a),i=o*Math.PI/180,s=Math.atan(r/n),l=i>s&&i<Math.PI-s?r/Math.sin(i):n/Math.cos(i);return Math.abs(l)},Fte=Ia,zte=Nu,Bte=hd;function Hte(e){return function(t,n,r){var a=Object(t);if(!zte(t)){var o=Fte(n);t=Bte(t),n=function(s){return o(a[s],s,a)}}var i=e(t,n,r);return i>-1?a[o?t[i]:i]:void 0}}var Gte=Hte,Ute=UP;function Wte(e){var t=Ute(e),n=t%1;return t===t?n?t-n:t:0}var qte=Wte,Vte=u7,Kte=Ia,Xte=qte,Yte=Math.max;function Qte(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var a=n==null?0:Xte(n);return a<0&&(a=Yte(r+a,0)),Vte(e,Kte(t),a)}var Zte=Qte,Jte=Gte,ene=Zte,tne=Jte(ene),nne=tne;const rne=Ce(nne);var ane=WN(function(e){return{x:e.left,y:e.top,width:e.width,height:e.height}},function(e){return["l",e.left,"t",e.top,"w",e.width,"h",e.height].join("")}),qg=k.createContext(void 0),Vg=k.createContext(void 0),tS=k.createContext(void 0),nS=k.createContext({}),rS=k.createContext(void 0),aS=k.createContext(0),oS=k.createContext(0),d2=function(t){var n=t.state,r=n.xAxisMap,a=n.yAxisMap,o=n.offset,i=t.clipPathId,s=t.children,l=t.width,u=t.height,f=ane(o);return C.createElement(qg.Provider,{value:r},C.createElement(Vg.Provider,{value:a},C.createElement(nS.Provider,{value:o},C.createElement(tS.Provider,{value:f},C.createElement(rS.Provider,{value:i},C.createElement(aS.Provider,{value:u},C.createElement(oS.Provider,{value:l},s)))))))},one=function(){return k.useContext(rS)},iS=function(t){var n=k.useContext(qg);n==null&&Ao();var r=n[t];return r==null&&Ao(),r},ine=function(){var t=k.useContext(qg);return oa(t)},sne=function(){var t=k.useContext(Vg),n=rne(t,function(r){return KP(r.domain,Number.isFinite)});return n||oa(t)},sS=function(t){var n=k.useContext(Vg);n==null&&Ao();var r=n[t];return r==null&&Ao(),r},lne=function(){var t=k.useContext(tS);return t},une=function(){return k.useContext(nS)},Kg=function(){return k.useContext(oS)},Xg=function(){return k.useContext(aS)};function Xi(e){"@babel/helpers - typeof";return Xi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xi(e)}function cne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fne(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,uS(r.key),r)}}function pne(e,t,n){return t&&fne(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function dne(e,t,n){return t=fp(t),mne(e,lS()?Reflect.construct(t,n||[],fp(e).constructor):t.apply(e,n))}function mne(e,t){if(t&&(Xi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return hne(e)}function hne(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function lS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(lS=function(){return!!e})()}function fp(e){return fp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},fp(e)}function vne(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&hy(e,t)}function hy(e,t){return hy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},hy(e,t)}function m2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function h2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?m2(Object(n),!0).forEach(function(r){Yg(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Yg(e,t,n){return t=uS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function uS(e){var t=yne(e,"string");return Xi(t)=="symbol"?t:t+""}function yne(e,t){if(Xi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Xi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function gne(e,t){return Pne(e)||bne(e,t)||wne(e,t)||xne()}function xne(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function wne(e,t){if(e){if(typeof e=="string")return v2(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return v2(e,t)}}function v2(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function bne(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function Pne(e){if(Array.isArray(e))return e}function vy(){return vy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},vy.apply(this,arguments)}var Sne=function(t,n){var r;return C.isValidElement(t)?r=C.cloneElement(t,n):oe(t)?r=t(n):r=C.createElement("line",vy({},n,{className:"recharts-reference-line-line"})),r},One=function(t,n,r,a,o,i,s,l,u){var f=o.x,c=o.y,p=o.width,d=o.height;if(r){var h=u.y,m=t.y.apply(h,{position:i});if(mr(u,"discard")&&!t.y.isInRange(m))return null;var g=[{x:f+p,y:m},{x:f,y:m}];return l==="left"?g.reverse():g}if(n){var v=u.x,y=t.x.apply(v,{position:i});if(mr(u,"discard")&&!t.x.isInRange(y))return null;var x=[{x:y,y:c+d},{x:y,y:c}];return s==="top"?x.reverse():x}if(a){var P=u.segment,w=P.map(function(S){return t.apply(S,{position:i})});return mr(u,"discard")&&Kee(w,function(S){return!t.isInRange(S)})?null:w}return null};function kne(e){var t=e.x,n=e.y,r=e.segment,a=e.xAxisId,o=e.yAxisId,i=e.shape,s=e.className,l=e.alwaysShow,u=one(),f=iS(a),c=sS(o),p=lne();if(!u||!p)return null;$r(l===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var d=Wg({x:f.scale,y:c.scale}),h=it(t),m=it(n),g=r&&r.length===2,v=One(d,h,m,g,p,e.position,f.orientation,c.orientation,e);if(!v)return null;var y=gne(v,2),x=y[0],P=x.x,w=x.y,S=y[1],O=S.x,_=S.y,A=mr(e,"hidden")?"url(#".concat(u,")"):void 0,j=h2(h2({clipPath:A},re(e,!0)),{},{x1:P,y1:w,x2:O,y2:_});return C.createElement(ye,{className:ue("recharts-reference-line",s)},Sne(i,j),At.renderCallByParent(e,Ite({x1:P,y1:w,x2:O,y2:_})))}var Qg=function(e){function t(){return cne(this,t),dne(this,t,arguments)}return vne(t,e),pne(t,[{key:"render",value:function(){return C.createElement(kne,this.props)}}])}(C.Component);Yg(Qg,"displayName","ReferenceLine");Yg(Qg,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,fill:"none",stroke:"#ccc",fillOpacity:1,strokeWidth:1,position:"middle"});function yy(){return yy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},yy.apply(this,arguments)}function Yi(e){"@babel/helpers - typeof";return Yi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yi(e)}function y2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function g2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?y2(Object(n),!0).forEach(function(r){$d(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function _ne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ane(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,fS(r.key),r)}}function Cne(e,t,n){return t&&Ane(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Ene(e,t,n){return t=pp(t),Tne(e,cS()?Reflect.construct(t,n||[],pp(e).constructor):t.apply(e,n))}function Tne(e,t){if(t&&(Yi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return jne(e)}function jne(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function cS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(cS=function(){return!!e})()}function pp(e){return pp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},pp(e)}function $ne(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gy(e,t)}function gy(e,t){return gy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},gy(e,t)}function $d(e,t,n){return t=fS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fS(e){var t=Nne(e,"string");return Yi(t)=="symbol"?t:t+""}function Nne(e,t){if(Yi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Yi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Mne=function(t){var n=t.x,r=t.y,a=t.xAxis,o=t.yAxis,i=Wg({x:a.scale,y:o.scale}),s=i.apply({x:n,y:r},{bandAware:!0});return mr(t,"discard")&&!i.isInRange(s)?null:s},Nd=function(e){function t(){return _ne(this,t),Ene(this,t,arguments)}return $ne(t,e),Cne(t,[{key:"render",value:function(){var r=this.props,a=r.x,o=r.y,i=r.r,s=r.alwaysShow,l=r.clipPathId,u=it(a),f=it(o);if($r(s===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.'),!u||!f)return null;var c=Mne(this.props);if(!c)return null;var p=c.x,d=c.y,h=this.props,m=h.shape,g=h.className,v=mr(this.props,"hidden")?"url(#".concat(l,")"):void 0,y=g2(g2({clipPath:v},re(this.props,!0)),{},{cx:p,cy:d});return C.createElement(ye,{className:ue("recharts-reference-dot",g)},t.renderDot(m,y),At.renderCallByParent(this.props,{x:p-i,y:d-i,width:2*i,height:2*i}))}}])}(C.Component);$d(Nd,"displayName","ReferenceDot");$d(Nd,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#fff",stroke:"#ccc",fillOpacity:1,strokeWidth:1});$d(Nd,"renderDot",function(e,t){var n;return C.isValidElement(e)?n=C.cloneElement(e,t):oe(e)?n=e(t):n=C.createElement(Ad,yy({},t,{cx:t.cx,cy:t.cy,className:"recharts-reference-dot-dot"})),n});function xy(){return xy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},xy.apply(this,arguments)}function Qi(e){"@babel/helpers - typeof";return Qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Qi(e)}function x2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function w2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?x2(Object(n),!0).forEach(function(r){Md(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):x2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Rne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ine(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,dS(r.key),r)}}function Dne(e,t,n){return t&&Ine(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Lne(e,t,n){return t=dp(t),Fne(e,pS()?Reflect.construct(t,n||[],dp(e).constructor):t.apply(e,n))}function Fne(e,t){if(t&&(Qi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return zne(e)}function zne(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function pS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(pS=function(){return!!e})()}function dp(e){return dp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},dp(e)}function Bne(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wy(e,t)}function wy(e,t){return wy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},wy(e,t)}function Md(e,t,n){return t=dS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function dS(e){var t=Hne(e,"string");return Qi(t)=="symbol"?t:t+""}function Hne(e,t){if(Qi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Qi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Gne=function(t,n,r,a,o){var i=o.x1,s=o.x2,l=o.y1,u=o.y2,f=o.xAxis,c=o.yAxis;if(!f||!c)return null;var p=Wg({x:f.scale,y:c.scale}),d={x:t?p.x.apply(i,{position:"start"}):p.x.rangeMin,y:r?p.y.apply(l,{position:"start"}):p.y.rangeMin},h={x:n?p.x.apply(s,{position:"end"}):p.x.rangeMax,y:a?p.y.apply(u,{position:"end"}):p.y.rangeMax};return mr(o,"discard")&&(!p.isInRange(d)||!p.isInRange(h))?null:JP(d,h)},Rd=function(e){function t(){return Rne(this,t),Lne(this,t,arguments)}return Bne(t,e),Dne(t,[{key:"render",value:function(){var r=this.props,a=r.x1,o=r.x2,i=r.y1,s=r.y2,l=r.className,u=r.alwaysShow,f=r.clipPathId;$r(u===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var c=it(a),p=it(o),d=it(i),h=it(s),m=this.props.shape;if(!c&&!p&&!d&&!h&&!m)return null;var g=Gne(c,p,d,h,this.props);if(!g&&!m)return null;var v=mr(this.props,"hidden")?"url(#".concat(f,")"):void 0;return C.createElement(ye,{className:ue("recharts-reference-area",l)},t.renderRect(m,w2(w2({clipPath:v},re(this.props,!0)),g)),At.renderCallByParent(this.props,g))}}])}(C.Component);Md(Rd,"displayName","ReferenceArea");Md(Rd,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#ccc",fillOpacity:.5,stroke:"none",strokeWidth:1});Md(Rd,"renderRect",function(e,t){var n;return C.isValidElement(e)?n=C.cloneElement(e,t):oe(e)?n=e(t):n=C.createElement(Ug,xy({},t,{className:"recharts-reference-area-rect"})),n});function mS(e,t,n){if(t<1)return[];if(t===1&&n===void 0)return e;for(var r=[],a=0;a<e.length;a+=t)r.push(e[a]);return r}function Une(e,t,n){var r={width:e.width+t.width,height:e.height+t.height};return Lte(r,n)}function Wne(e,t,n){var r=n==="width",a=e.x,o=e.y,i=e.width,s=e.height;return t===1?{start:r?a:o,end:r?a+i:o+s}:{start:r?a+i:o+s,end:r?a:o}}function mp(e,t,n,r,a){if(e*t<e*r||e*t>e*a)return!1;var o=n();return e*(t-e*o/2-r)>=0&&e*(t+e*o/2-a)<=0}function qne(e,t){return mS(e,t+1)}function Vne(e,t,n,r,a){for(var o=(r||[]).slice(),i=t.start,s=t.end,l=0,u=1,f=i,c=function(){var h=r==null?void 0:r[l];if(h===void 0)return{v:mS(r,u)};var m=l,g,v=function(){return g===void 0&&(g=n(h,m)),g},y=h.coordinate,x=l===0||mp(e,y,v,f,s);x||(l=0,f=i,u+=1),x&&(f=y+e*(v()/2+a),l+=u)},p;u<=o.length;)if(p=c(),p)return p.v;return[]}function gu(e){"@babel/helpers - typeof";return gu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},gu(e)}function b2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?b2(Object(n),!0).forEach(function(r){Kne(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):b2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Kne(e,t,n){return t=Xne(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Xne(e){var t=Yne(e,"string");return gu(t)=="symbol"?t:t+""}function Yne(e,t){if(gu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(gu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Qne(e,t,n,r,a){for(var o=(r||[]).slice(),i=o.length,s=t.start,l=t.end,u=function(p){var d=o[p],h,m=function(){return h===void 0&&(h=n(d,p)),h};if(p===i-1){var g=e*(d.coordinate+e*m()/2-l);o[p]=d=kt(kt({},d),{},{tickCoord:g>0?d.coordinate-g*e:d.coordinate})}else o[p]=d=kt(kt({},d),{},{tickCoord:d.coordinate});var v=mp(e,d.tickCoord,m,s,l);v&&(l=d.tickCoord-e*(m()/2+a),o[p]=kt(kt({},d),{},{isShow:!0}))},f=i-1;f>=0;f--)u(f);return o}function Zne(e,t,n,r,a,o){var i=(r||[]).slice(),s=i.length,l=t.start,u=t.end;if(o){var f=r[s-1],c=n(f,s-1),p=e*(f.coordinate+e*c/2-u);i[s-1]=f=kt(kt({},f),{},{tickCoord:p>0?f.coordinate-p*e:f.coordinate});var d=mp(e,f.tickCoord,function(){return c},l,u);d&&(u=f.tickCoord-e*(c/2+a),i[s-1]=kt(kt({},f),{},{isShow:!0}))}for(var h=o?s-1:s,m=function(y){var x=i[y],P,w=function(){return P===void 0&&(P=n(x,y)),P};if(y===0){var S=e*(x.coordinate-e*w()/2-l);i[y]=x=kt(kt({},x),{},{tickCoord:S<0?x.coordinate-S*e:x.coordinate})}else i[y]=x=kt(kt({},x),{},{tickCoord:x.coordinate});var O=mp(e,x.tickCoord,w,l,u);O&&(l=x.tickCoord+e*(w()/2+a),i[y]=kt(kt({},x),{},{isShow:!0}))},g=0;g<h;g++)m(g);return i}function Zg(e,t,n){var r=e.tick,a=e.ticks,o=e.viewBox,i=e.minTickGap,s=e.orientation,l=e.interval,u=e.tickFormatter,f=e.unit,c=e.angle;if(!a||!a.length||!r)return[];if(V(l)||Da.isSsr)return qne(a,typeof l=="number"&&V(l)?l:0);var p=[],d=s==="top"||s==="bottom"?"width":"height",h=f&&d==="width"?pl(f,{fontSize:t,letterSpacing:n}):{width:0,height:0},m=function(x,P){var w=oe(u)?u(x.value,P):x.value;return d==="width"?Une(pl(w,{fontSize:t,letterSpacing:n}),h,c):pl(w,{fontSize:t,letterSpacing:n})[d]},g=a.length>=2?Dn(a[1].coordinate-a[0].coordinate):1,v=Wne(o,g,d);return l==="equidistantPreserveStart"?Vne(g,v,m,a,i):(l==="preserveStart"||l==="preserveStartEnd"?p=Zne(g,v,m,a,i,l==="preserveStartEnd"):p=Qne(g,v,m,a,i),p.filter(function(y){return y.isShow}))}var Jne=["viewBox"],ere=["viewBox"],tre=["ticks"];function Zi(e){"@babel/helpers - typeof";return Zi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zi(e)}function ri(){return ri=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ri.apply(this,arguments)}function P2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function nt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?P2(Object(n),!0).forEach(function(r){Jg(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):P2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Jm(e,t){if(e==null)return{};var n=nre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function rre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,vS(r.key),r)}}function are(e,t,n){return t&&S2(e.prototype,t),n&&S2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function ore(e,t,n){return t=hp(t),ire(e,hS()?Reflect.construct(t,n||[],hp(e).constructor):t.apply(e,n))}function ire(e,t){if(t&&(Zi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return sre(e)}function sre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function hS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(hS=function(){return!!e})()}function hp(e){return hp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},hp(e)}function lre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&by(e,t)}function by(e,t){return by=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},by(e,t)}function Jg(e,t,n){return t=vS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function vS(e){var t=ure(e,"string");return Zi(t)=="symbol"?t:t+""}function ure(e,t){if(Zi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Zi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Ts=function(e){function t(n){var r;return rre(this,t),r=ore(this,t,[n]),r.state={fontSize:"",letterSpacing:""},r}return lre(t,e),are(t,[{key:"shouldComponentUpdate",value:function(r,a){var o=r.viewBox,i=Jm(r,Jne),s=this.props,l=s.viewBox,u=Jm(s,ere);return!mi(o,l)||!mi(i,u)||!mi(a,this.state)}},{key:"componentDidMount",value:function(){var r=this.layerReference;if(r){var a=r.getElementsByClassName("recharts-cartesian-axis-tick-value")[0];a&&this.setState({fontSize:window.getComputedStyle(a).fontSize,letterSpacing:window.getComputedStyle(a).letterSpacing})}}},{key:"getTickLineCoord",value:function(r){var a=this.props,o=a.x,i=a.y,s=a.width,l=a.height,u=a.orientation,f=a.tickSize,c=a.mirror,p=a.tickMargin,d,h,m,g,v,y,x=c?-1:1,P=r.tickSize||f,w=V(r.tickCoord)?r.tickCoord:r.coordinate;switch(u){case"top":d=h=r.coordinate,g=i+ +!c*l,m=g-x*P,y=m-x*p,v=w;break;case"left":m=g=r.coordinate,h=o+ +!c*s,d=h-x*P,v=d-x*p,y=w;break;case"right":m=g=r.coordinate,h=o+ +c*s,d=h+x*P,v=d+x*p,y=w;break;default:d=h=r.coordinate,g=i+ +c*l,m=g+x*P,y=m+x*p,v=w;break}return{line:{x1:d,y1:m,x2:h,y2:g},tick:{x:v,y}}}},{key:"getTickTextAnchor",value:function(){var r=this.props,a=r.orientation,o=r.mirror,i;switch(a){case"left":i=o?"start":"end";break;case"right":i=o?"end":"start";break;default:i="middle";break}return i}},{key:"getTickVerticalAnchor",value:function(){var r=this.props,a=r.orientation,o=r.mirror,i="end";switch(a){case"left":case"right":i="middle";break;case"top":i=o?"start":"end";break;default:i=o?"end":"start";break}return i}},{key:"renderAxisLine",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.orientation,u=r.mirror,f=r.axisLine,c=nt(nt(nt({},re(this.props,!1)),re(f,!1)),{},{fill:"none"});if(l==="top"||l==="bottom"){var p=+(l==="top"&&!u||l==="bottom"&&u);c=nt(nt({},c),{},{x1:a,y1:o+p*s,x2:a+i,y2:o+p*s})}else{var d=+(l==="left"&&!u||l==="right"&&u);c=nt(nt({},c),{},{x1:a+d*i,y1:o,x2:a+d*i,y2:o+s})}return C.createElement("line",ri({},c,{className:ue("recharts-cartesian-axis-line",gn(f,"className"))}))}},{key:"renderTicks",value:function(r,a,o){var i=this,s=this.props,l=s.tickLine,u=s.stroke,f=s.tick,c=s.tickFormatter,p=s.unit,d=Zg(nt(nt({},this.props),{},{ticks:r}),a,o),h=this.getTickTextAnchor(),m=this.getTickVerticalAnchor(),g=re(this.props,!1),v=re(f,!1),y=nt(nt({},g),{},{fill:"none"},re(l,!1)),x=d.map(function(P,w){var S=i.getTickLineCoord(P),O=S.line,_=S.tick,A=nt(nt(nt(nt({textAnchor:h,verticalAnchor:m},g),{},{stroke:"none",fill:u},v),_),{},{index:w,payload:P,visibleTicksCount:d.length,tickFormatter:c});return C.createElement(ye,ri({className:"recharts-cartesian-axis-tick",key:"tick-".concat(P.value,"-").concat(P.coordinate,"-").concat(P.tickCoord)},Fl(i.props,P,w)),l&&C.createElement("line",ri({},y,O,{className:ue("recharts-cartesian-axis-tick-line",gn(l,"className"))})),f&&t.renderTickItem(f,A,"".concat(oe(c)?c(P.value,w):P.value).concat(p||"")))});return C.createElement("g",{className:"recharts-cartesian-axis-ticks"},x)}},{key:"render",value:function(){var r=this,a=this.props,o=a.axisLine,i=a.width,s=a.height,l=a.ticksGenerator,u=a.className,f=a.hide;if(f)return null;var c=this.props,p=c.ticks,d=Jm(c,tre),h=p;return oe(l)&&(h=p&&p.length>0?l(this.props):l(d)),i<=0||s<=0||!h||!h.length?null:C.createElement(ye,{className:ue("recharts-cartesian-axis",u),ref:function(g){r.layerReference=g}},o&&this.renderAxisLine(),this.renderTicks(h,this.state.fontSize,this.state.letterSpacing),At.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(r,a,o){var i,s=ue(a.className,"recharts-cartesian-axis-tick-value");return C.isValidElement(r)?i=C.cloneElement(r,nt(nt({},a),{},{className:s})):oe(r)?i=r(nt(nt({},a),{},{className:s})):i=C.createElement(Df,ri({},a,{className:"recharts-cartesian-axis-tick-value"}),o),i}}])}(k.Component);Jg(Ts,"displayName","CartesianAxis");Jg(Ts,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var cre=["x1","y1","x2","y2","key"],fre=["offset"];function Co(e){"@babel/helpers - typeof";return Co=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Co(e)}function O2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ct(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?O2(Object(n),!0).forEach(function(r){pre(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):O2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function pre(e,t,n){return t=dre(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function dre(e){var t=mre(e,"string");return Co(t)=="symbol"?t:t+""}function mre(e,t){if(Co(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Co(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function to(){return to=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},to.apply(this,arguments)}function k2(e,t){if(e==null)return{};var n=hre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var vre=function(t){var n=t.fill;if(!n||n==="none")return null;var r=t.fillOpacity,a=t.x,o=t.y,i=t.width,s=t.height,l=t.ry;return C.createElement("rect",{x:a,y:o,ry:l,width:i,height:s,stroke:"none",fill:n,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function yS(e,t){var n;if(C.isValidElement(e))n=C.cloneElement(e,t);else if(oe(e))n=e(t);else{var r=t.x1,a=t.y1,o=t.x2,i=t.y2,s=t.key,l=k2(t,cre),u=re(l,!1);u.offset;var f=k2(u,fre);n=C.createElement("line",to({},f,{x1:r,y1:a,x2:o,y2:i,fill:"none",key:s}))}return n}function yre(e){var t=e.x,n=e.width,r=e.horizontal,a=r===void 0?!0:r,o=e.horizontalPoints;if(!a||!o||!o.length)return null;var i=o.map(function(s,l){var u=Ct(Ct({},e),{},{x1:t,y1:s,x2:t+n,y2:s,key:"line-".concat(l),index:l});return yS(a,u)});return C.createElement("g",{className:"recharts-cartesian-grid-horizontal"},i)}function gre(e){var t=e.y,n=e.height,r=e.vertical,a=r===void 0?!0:r,o=e.verticalPoints;if(!a||!o||!o.length)return null;var i=o.map(function(s,l){var u=Ct(Ct({},e),{},{x1:s,y1:t,x2:s,y2:t+n,key:"line-".concat(l),index:l});return yS(a,u)});return C.createElement("g",{className:"recharts-cartesian-grid-vertical"},i)}function xre(e){var t=e.horizontalFill,n=e.fillOpacity,r=e.x,a=e.y,o=e.width,i=e.height,s=e.horizontalPoints,l=e.horizontal,u=l===void 0?!0:l;if(!u||!t||!t.length)return null;var f=s.map(function(p){return Math.round(p+a-a)}).sort(function(p,d){return p-d});a!==f[0]&&f.unshift(0);var c=f.map(function(p,d){var h=!f[d+1],m=h?a+i-p:f[d+1]-p;if(m<=0)return null;var g=d%t.length;return C.createElement("rect",{key:"react-".concat(d),y:p,x:r,height:m,width:o,stroke:"none",fill:t[g],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return C.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},c)}function wre(e){var t=e.vertical,n=t===void 0?!0:t,r=e.verticalFill,a=e.fillOpacity,o=e.x,i=e.y,s=e.width,l=e.height,u=e.verticalPoints;if(!n||!r||!r.length)return null;var f=u.map(function(p){return Math.round(p+o-o)}).sort(function(p,d){return p-d});o!==f[0]&&f.unshift(0);var c=f.map(function(p,d){var h=!f[d+1],m=h?o+s-p:f[d+1]-p;if(m<=0)return null;var g=d%r.length;return C.createElement("rect",{key:"react-".concat(d),x:p,y:i,width:m,height:l,stroke:"none",fill:r[g],fillOpacity:a,className:"recharts-cartesian-grid-bg"})});return C.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},c)}var bre=function(t,n){var r=t.xAxis,a=t.width,o=t.height,i=t.offset;return AP(Zg(Ct(Ct(Ct({},Ts.defaultProps),r),{},{ticks:Er(r,!0),viewBox:{x:0,y:0,width:a,height:o}})),i.left,i.left+i.width,n)},Pre=function(t,n){var r=t.yAxis,a=t.width,o=t.height,i=t.offset;return AP(Zg(Ct(Ct(Ct({},Ts.defaultProps),r),{},{ticks:Er(r,!0),viewBox:{x:0,y:0,width:a,height:o}})),i.top,i.top+i.height,n)},Ho={horizontal:!0,vertical:!0,stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function Ln(e){var t,n,r,a,o,i,s=Kg(),l=Xg(),u=une(),f=Ct(Ct({},e),{},{stroke:(t=e.stroke)!==null&&t!==void 0?t:Ho.stroke,fill:(n=e.fill)!==null&&n!==void 0?n:Ho.fill,horizontal:(r=e.horizontal)!==null&&r!==void 0?r:Ho.horizontal,horizontalFill:(a=e.horizontalFill)!==null&&a!==void 0?a:Ho.horizontalFill,vertical:(o=e.vertical)!==null&&o!==void 0?o:Ho.vertical,verticalFill:(i=e.verticalFill)!==null&&i!==void 0?i:Ho.verticalFill,x:V(e.x)?e.x:u.left,y:V(e.y)?e.y:u.top,width:V(e.width)?e.width:u.width,height:V(e.height)?e.height:u.height}),c=f.x,p=f.y,d=f.width,h=f.height,m=f.syncWithTicks,g=f.horizontalValues,v=f.verticalValues,y=ine(),x=sne();if(!V(d)||d<=0||!V(h)||h<=0||!V(c)||c!==+c||!V(p)||p!==+p)return null;var P=f.verticalCoordinatesGenerator||bre,w=f.horizontalCoordinatesGenerator||Pre,S=f.horizontalPoints,O=f.verticalPoints;if((!S||!S.length)&&oe(w)){var _=g&&g.length,A=w({yAxis:x?Ct(Ct({},x),{},{ticks:_?g:x.ticks}):void 0,width:s,height:l,offset:u},_?!0:m);$r(Array.isArray(A),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(Co(A),"]")),Array.isArray(A)&&(S=A)}if((!O||!O.length)&&oe(P)){var j=v&&v.length,E=P({xAxis:y?Ct(Ct({},y),{},{ticks:j?v:y.ticks}):void 0,width:s,height:l,offset:u},j?!0:m);$r(Array.isArray(E),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(Co(E),"]")),Array.isArray(E)&&(O=E)}return C.createElement("g",{className:"recharts-cartesian-grid"},C.createElement(vre,{fill:f.fill,fillOpacity:f.fillOpacity,x:f.x,y:f.y,width:f.width,height:f.height,ry:f.ry}),C.createElement(yre,to({},f,{offset:u,horizontalPoints:S,xAxis:y,yAxis:x})),C.createElement(gre,to({},f,{offset:u,verticalPoints:O,xAxis:y,yAxis:x})),C.createElement(xre,to({},f,{horizontalPoints:S})),C.createElement(wre,to({},f,{verticalPoints:O})))}Ln.displayName="CartesianGrid";var Sre=["type","layout","connectNulls","ref"],Ore=["key"];function Ji(e){"@babel/helpers - typeof";return Ji=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ji(e)}function _2(e,t){if(e==null)return{};var n=kre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function vl(){return vl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},vl.apply(this,arguments)}function A2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Kt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?A2(Object(n),!0).forEach(function(r){Mn(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):A2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Go(e){return Ere(e)||Cre(e)||Are(e)||_re()}function _re(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Are(e,t){if(e){if(typeof e=="string")return Py(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Py(e,t)}}function Cre(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Ere(e){if(Array.isArray(e))return Py(e)}function Py(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Tre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function C2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,xS(r.key),r)}}function jre(e,t,n){return t&&C2(e.prototype,t),n&&C2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function $re(e,t,n){return t=vp(t),Nre(e,gS()?Reflect.construct(t,n||[],vp(e).constructor):t.apply(e,n))}function Nre(e,t){if(t&&(Ji(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Mre(e)}function Mre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function gS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(gS=function(){return!!e})()}function vp(e){return vp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},vp(e)}function Rre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Sy(e,t)}function Sy(e,t){return Sy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Sy(e,t)}function Mn(e,t,n){return t=xS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xS(e){var t=Ire(e,"string");return Ji(t)=="symbol"?t:t+""}function Ire(e,t){if(Ji(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ji(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Rt=function(e){function t(){var n;Tre(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=$re(this,t,[].concat(a)),Mn(n,"state",{isAnimationFinished:!0,totalLength:0}),Mn(n,"generateSimpleStrokeDasharray",function(i,s){return"".concat(s,"px ").concat(i-s,"px")}),Mn(n,"getStrokeDasharray",function(i,s,l){var u=l.reduce(function(v,y){return v+y});if(!u)return n.generateSimpleStrokeDasharray(s,i);for(var f=Math.floor(i/u),c=i%u,p=s-i,d=[],h=0,m=0;h<l.length;m+=l[h],++h)if(m+l[h]>c){d=[].concat(Go(l.slice(0,h)),[c-m]);break}var g=d.length%2===0?[0,p]:[p];return[].concat(Go(t.repeat(l,f)),Go(d),g).map(function(v){return"".concat(v,"px")}).join(", ")}),Mn(n,"id",$o("recharts-line-")),Mn(n,"pathRef",function(i){n.mainCurve=i}),Mn(n,"handleAnimationEnd",function(){n.setState({isAnimationFinished:!0}),n.props.onAnimationEnd&&n.props.onAnimationEnd()}),Mn(n,"handleAnimationStart",function(){n.setState({isAnimationFinished:!1}),n.props.onAnimationStart&&n.props.onAnimationStart()}),n}return Rre(t,e),jre(t,[{key:"componentDidMount",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();this.setState({totalLength:r})}}},{key:"componentDidUpdate",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();r!==this.state.totalLength&&this.setState({totalLength:r})}}},{key:"getTotalLength",value:function(){var r=this.mainCurve;try{return r&&r.getTotalLength&&r.getTotalLength()||0}catch{return 0}}},{key:"renderErrorBar",value:function(r,a){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var o=this.props,i=o.points,s=o.xAxis,l=o.yAxis,u=o.layout,f=o.children,c=qt(f,Es);if(!c)return null;var p=function(m,g){return{x:m.x,y:m.y,value:m.value,errorVal:st(m.payload,g)}},d={clipPath:r?"url(#clipPath-".concat(a,")"):null};return C.createElement(ye,d,c.map(function(h){return C.cloneElement(h,{key:"bar-".concat(h.props.dataKey),data:i,xAxis:s,yAxis:l,layout:u,dataPointFormatter:p})}))}},{key:"renderDots",value:function(r,a,o){var i=this.props.isAnimationActive;if(i&&!this.state.isAnimationFinished)return null;var s=this.props,l=s.dot,u=s.points,f=s.dataKey,c=re(this.props,!1),p=re(l,!0),d=u.map(function(m,g){var v=Kt(Kt(Kt({key:"dot-".concat(g),r:3},c),p),{},{index:g,cx:m.x,cy:m.y,value:m.value,dataKey:f,payload:m.payload,points:u});return t.renderDotItem(l,v)}),h={clipPath:r?"url(#clipPath-".concat(a?"":"dots-").concat(o,")"):null};return C.createElement(ye,vl({className:"recharts-line-dots",key:"dots"},h),d)}},{key:"renderCurveStatically",value:function(r,a,o,i){var s=this.props,l=s.type,u=s.layout,f=s.connectNulls;s.ref;var c=_2(s,Sre),p=Kt(Kt(Kt({},re(c,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:a?"url(#clipPath-".concat(o,")"):null,points:r},i),{},{type:l,layout:u,connectNulls:f});return C.createElement(mo,vl({},p,{pathRef:this.pathRef}))}},{key:"renderCurveWithAnimation",value:function(r,a){var o=this,i=this.props,s=i.points,l=i.strokeDasharray,u=i.isAnimationActive,f=i.animationBegin,c=i.animationDuration,p=i.animationEasing,d=i.animationId,h=i.animateNewValues,m=i.width,g=i.height,v=this.state,y=v.prevPoints,x=v.totalLength;return C.createElement(Vn,{begin:f,duration:c,isActive:u,easing:p,from:{t:0},to:{t:1},key:"line-".concat(d),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(P){var w=P.t;if(y){var S=y.length/s.length,O=s.map(function(T,N){var M=Math.floor(N*S);if(y[M]){var I=y[M],R=Xe(I.x,T.x),L=Xe(I.y,T.y);return Kt(Kt({},T),{},{x:R(w),y:L(w)})}if(h){var $=Xe(m*2,T.x),D=Xe(g/2,T.y);return Kt(Kt({},T),{},{x:$(w),y:D(w)})}return Kt(Kt({},T),{},{x:T.x,y:T.y})});return o.renderCurveStatically(O,r,a)}var _=Xe(0,x),A=_(w),j;if(l){var E="".concat(l).split(/[,\s]+/gim).map(function(T){return parseFloat(T)});j=o.getStrokeDasharray(A,x,E)}else j=o.generateSimpleStrokeDasharray(x,A);return o.renderCurveStatically(s,r,a,{strokeDasharray:j})})}},{key:"renderCurve",value:function(r,a){var o=this.props,i=o.points,s=o.isAnimationActive,l=this.state,u=l.prevPoints,f=l.totalLength;return s&&i&&i.length&&(!u&&f>0||!ko(u,i))?this.renderCurveWithAnimation(r,a):this.renderCurveStatically(i,r,a)}},{key:"render",value:function(){var r,a=this.props,o=a.hide,i=a.dot,s=a.points,l=a.className,u=a.xAxis,f=a.yAxis,c=a.top,p=a.left,d=a.width,h=a.height,m=a.isAnimationActive,g=a.id;if(o||!s||!s.length)return null;var v=this.state.isAnimationFinished,y=s.length===1,x=ue("recharts-line",l),P=u&&u.allowDataOverflow,w=f&&f.allowDataOverflow,S=P||w,O=te(g)?this.id:g,_=(r=re(i,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},A=_.r,j=A===void 0?3:A,E=_.strokeWidth,T=E===void 0?2:E,N=w8(i)?i:{},M=N.clipDot,I=M===void 0?!0:M,R=j*2+T;return C.createElement(ye,{className:x},P||w?C.createElement("defs",null,C.createElement("clipPath",{id:"clipPath-".concat(O)},C.createElement("rect",{x:P?p:p-d/2,y:w?c:c-h/2,width:P?d:d*2,height:w?h:h*2})),!I&&C.createElement("clipPath",{id:"clipPath-dots-".concat(O)},C.createElement("rect",{x:p-R/2,y:c-R/2,width:d+R,height:h+R}))):null,!y&&this.renderCurve(S,O),this.renderErrorBar(S,O),(y||i)&&this.renderDots(S,I,O),(!m||v)&&dr.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,prevPoints:a.curPoints}:r.points!==a.curPoints?{curPoints:r.points}:null}},{key:"repeat",value:function(r,a){for(var o=r.length%2!==0?[].concat(Go(r),[0]):r,i=[],s=0;s<a;++s)i=[].concat(Go(i),Go(o));return i}},{key:"renderDotItem",value:function(r,a){var o;if(C.isValidElement(r))o=C.cloneElement(r,a);else if(oe(r))o=r(a);else{var i=a.key,s=_2(a,Ore),l=ue("recharts-line-dot",typeof r!="boolean"?r.className:"");o=C.createElement(Ad,vl({key:i},s,{className:l}))}return o}}])}(k.PureComponent);Mn(Rt,"displayName","Line");Mn(Rt,"defaultProps",{xAxisId:0,yAxisId:0,connectNulls:!1,activeDot:!0,dot:!0,legendType:"line",stroke:"#3182bd",strokeWidth:1,fill:"#fff",points:[],isAnimationActive:!Da.isSsr,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",hide:!1,label:!1});Mn(Rt,"getComposedData",function(e){var t=e.props,n=e.xAxis,r=e.yAxis,a=e.xAxisTicks,o=e.yAxisTicks,i=e.dataKey,s=e.bandSize,l=e.displayedData,u=e.offset,f=t.layout,c=l.map(function(p,d){var h=st(p,i);return f==="horizontal"?{x:Ui({axis:n,ticks:a,bandSize:s,entry:p,index:d}),y:te(h)?null:r.scale(h),value:h,payload:p}:{x:te(h)?null:n.scale(h),y:Ui({axis:r,ticks:o,bandSize:s,entry:p,index:d}),value:h,payload:p}});return Kt({points:c,layout:f},u)});var Dre=["layout","type","stroke","connectNulls","isRange","ref"],Lre=["key"],wS;function es(e){"@babel/helpers - typeof";return es=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},es(e)}function bS(e,t){if(e==null)return{};var n=Fre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function no(){return no=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},no.apply(this,arguments)}function E2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Zr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?E2(Object(n),!0).forEach(function(r){ir(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):E2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function zre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function T2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,SS(r.key),r)}}function Bre(e,t,n){return t&&T2(e.prototype,t),n&&T2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Hre(e,t,n){return t=yp(t),Gre(e,PS()?Reflect.construct(t,n||[],yp(e).constructor):t.apply(e,n))}function Gre(e,t){if(t&&(es(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Ure(e)}function Ure(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function PS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(PS=function(){return!!e})()}function yp(e){return yp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},yp(e)}function Wre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Oy(e,t)}function Oy(e,t){return Oy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Oy(e,t)}function ir(e,t,n){return t=SS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function SS(e){var t=qre(e,"string");return es(t)=="symbol"?t:t+""}function qre(e,t){if(es(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(es(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var ft=function(e){function t(){var n;zre(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=Hre(this,t,[].concat(a)),ir(n,"state",{isAnimationFinished:!0}),ir(n,"id",$o("recharts-area-")),ir(n,"handleAnimationEnd",function(){var i=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),oe(i)&&i()}),ir(n,"handleAnimationStart",function(){var i=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),oe(i)&&i()}),n}return Wre(t,e),Bre(t,[{key:"renderDots",value:function(r,a,o){var i=this.props.isAnimationActive,s=this.state.isAnimationFinished;if(i&&!s)return null;var l=this.props,u=l.dot,f=l.points,c=l.dataKey,p=re(this.props,!1),d=re(u,!0),h=f.map(function(g,v){var y=Zr(Zr(Zr({key:"dot-".concat(v),r:3},p),d),{},{index:v,cx:g.x,cy:g.y,dataKey:c,value:g.value,payload:g.payload,points:f});return t.renderDotItem(u,y)}),m={clipPath:r?"url(#clipPath-".concat(a?"":"dots-").concat(o,")"):null};return C.createElement(ye,no({className:"recharts-area-dots"},m),h)}},{key:"renderHorizontalRect",value:function(r){var a=this.props,o=a.baseLine,i=a.points,s=a.strokeWidth,l=i[0].x,u=i[i.length-1].x,f=r*Math.abs(l-u),c=da(i.map(function(p){return p.y||0}));return V(o)&&typeof o=="number"?c=Math.max(o,c):o&&Array.isArray(o)&&o.length&&(c=Math.max(da(o.map(function(p){return p.y||0})),c)),V(c)?C.createElement("rect",{x:l<u?l:l-f,y:0,width:f,height:Math.floor(c+(s?parseInt("".concat(s),10):1))}):null}},{key:"renderVerticalRect",value:function(r){var a=this.props,o=a.baseLine,i=a.points,s=a.strokeWidth,l=i[0].y,u=i[i.length-1].y,f=r*Math.abs(l-u),c=da(i.map(function(p){return p.x||0}));return V(o)&&typeof o=="number"?c=Math.max(o,c):o&&Array.isArray(o)&&o.length&&(c=Math.max(da(o.map(function(p){return p.x||0})),c)),V(c)?C.createElement("rect",{x:0,y:l<u?l:l-f,width:c+(s?parseInt("".concat(s),10):1),height:Math.floor(f)}):null}},{key:"renderClipRect",value:function(r){var a=this.props.layout;return a==="vertical"?this.renderVerticalRect(r):this.renderHorizontalRect(r)}},{key:"renderAreaStatically",value:function(r,a,o,i){var s=this.props,l=s.layout,u=s.type,f=s.stroke,c=s.connectNulls,p=s.isRange;s.ref;var d=bS(s,Dre);return C.createElement(ye,{clipPath:o?"url(#clipPath-".concat(i,")"):null},C.createElement(mo,no({},re(d,!0),{points:r,connectNulls:c,type:u,baseLine:a,layout:l,stroke:"none",className:"recharts-area-area"})),f!=="none"&&C.createElement(mo,no({},re(this.props,!1),{className:"recharts-area-curve",layout:l,type:u,connectNulls:c,fill:"none",points:r})),f!=="none"&&p&&C.createElement(mo,no({},re(this.props,!1),{className:"recharts-area-curve",layout:l,type:u,connectNulls:c,fill:"none",points:a})))}},{key:"renderAreaWithAnimation",value:function(r,a){var o=this,i=this.props,s=i.points,l=i.baseLine,u=i.isAnimationActive,f=i.animationBegin,c=i.animationDuration,p=i.animationEasing,d=i.animationId,h=this.state,m=h.prevPoints,g=h.prevBaseLine;return C.createElement(Vn,{begin:f,duration:c,isActive:u,easing:p,from:{t:0},to:{t:1},key:"area-".concat(d),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(v){var y=v.t;if(m){var x=m.length/s.length,P=s.map(function(_,A){var j=Math.floor(A*x);if(m[j]){var E=m[j],T=Xe(E.x,_.x),N=Xe(E.y,_.y);return Zr(Zr({},_),{},{x:T(y),y:N(y)})}return _}),w;if(V(l)&&typeof l=="number"){var S=Xe(g,l);w=S(y)}else if(te(l)||Ps(l)){var O=Xe(g,0);w=O(y)}else w=l.map(function(_,A){var j=Math.floor(A*x);if(g[j]){var E=g[j],T=Xe(E.x,_.x),N=Xe(E.y,_.y);return Zr(Zr({},_),{},{x:T(y),y:N(y)})}return _});return o.renderAreaStatically(P,w,r,a)}return C.createElement(ye,null,C.createElement("defs",null,C.createElement("clipPath",{id:"animationClipPath-".concat(a)},o.renderClipRect(y))),C.createElement(ye,{clipPath:"url(#animationClipPath-".concat(a,")")},o.renderAreaStatically(s,l,r,a)))})}},{key:"renderArea",value:function(r,a){var o=this.props,i=o.points,s=o.baseLine,l=o.isAnimationActive,u=this.state,f=u.prevPoints,c=u.prevBaseLine,p=u.totalLength;return l&&i&&i.length&&(!f&&p>0||!ko(f,i)||!ko(c,s))?this.renderAreaWithAnimation(r,a):this.renderAreaStatically(i,s,r,a)}},{key:"render",value:function(){var r,a=this.props,o=a.hide,i=a.dot,s=a.points,l=a.className,u=a.top,f=a.left,c=a.xAxis,p=a.yAxis,d=a.width,h=a.height,m=a.isAnimationActive,g=a.id;if(o||!s||!s.length)return null;var v=this.state.isAnimationFinished,y=s.length===1,x=ue("recharts-area",l),P=c&&c.allowDataOverflow,w=p&&p.allowDataOverflow,S=P||w,O=te(g)?this.id:g,_=(r=re(i,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},A=_.r,j=A===void 0?3:A,E=_.strokeWidth,T=E===void 0?2:E,N=w8(i)?i:{},M=N.clipDot,I=M===void 0?!0:M,R=j*2+T;return C.createElement(ye,{className:x},P||w?C.createElement("defs",null,C.createElement("clipPath",{id:"clipPath-".concat(O)},C.createElement("rect",{x:P?f:f-d/2,y:w?u:u-h/2,width:P?d:d*2,height:w?h:h*2})),!I&&C.createElement("clipPath",{id:"clipPath-dots-".concat(O)},C.createElement("rect",{x:f-R/2,y:u-R/2,width:d+R,height:h+R}))):null,y?null:this.renderArea(S,O),(i||y)&&this.renderDots(S,I,O),(!m||v)&&dr.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,curBaseLine:r.baseLine,prevPoints:a.curPoints,prevBaseLine:a.curBaseLine}:r.points!==a.curPoints||r.baseLine!==a.curBaseLine?{curPoints:r.points,curBaseLine:r.baseLine}:null}}])}(k.PureComponent);wS=ft;ir(ft,"displayName","Area");ir(ft,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!Da.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});ir(ft,"getBaseValue",function(e,t,n,r){var a=e.layout,o=e.baseValue,i=t.props.baseValue,s=i??o;if(V(s)&&typeof s=="number")return s;var l=a==="horizontal"?r:n,u=l.scale.domain();if(l.type==="number"){var f=Math.max(u[0],u[1]),c=Math.min(u[0],u[1]);return s==="dataMin"?c:s==="dataMax"||f<0?f:Math.max(Math.min(u[0],u[1]),0)}return s==="dataMin"?u[0]:s==="dataMax"?u[1]:u[0]});ir(ft,"getComposedData",function(e){var t=e.props,n=e.item,r=e.xAxis,a=e.yAxis,o=e.xAxisTicks,i=e.yAxisTicks,s=e.bandSize,l=e.dataKey,u=e.stackedData,f=e.dataStartIndex,c=e.displayedData,p=e.offset,d=t.layout,h=u&&u.length,m=wS.getBaseValue(t,n,r,a),g=d==="horizontal",v=!1,y=c.map(function(P,w){var S;h?S=u[f+w]:(S=st(P,l),Array.isArray(S)?v=!0:S=[m,S]);var O=S[1]==null||h&&st(P,l)==null;return g?{x:Ui({axis:r,ticks:o,bandSize:s,entry:P,index:w}),y:O?null:a.scale(S[1]),value:S,payload:P}:{x:O?null:r.scale(S[1]),y:Ui({axis:a,ticks:i,bandSize:s,entry:P,index:w}),value:S,payload:P}}),x;return h||v?x=y.map(function(P){var w=Array.isArray(P.value)?P.value[0]:null;return g?{x:P.x,y:w!=null&&P.y!=null?a.scale(w):null}:{x:w!=null?r.scale(w):null,y:P.y}}):x=g?a.scale(m):r.scale(m),Zr({points:y,baseLine:x,layout:d,isRange:v},p)});ir(ft,"renderDotItem",function(e,t){var n;if(C.isValidElement(e))n=C.cloneElement(e,t);else if(oe(e))n=e(t);else{var r=ue("recharts-area-dot",typeof e!="boolean"?e.className:""),a=t.key,o=bS(t,Lre);n=C.createElement(Ad,no({},o,{key:a,className:r}))}return n});function ts(e){"@babel/helpers - typeof";return ts=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ts(e)}function Vre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Kre(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,_S(r.key),r)}}function Xre(e,t,n){return t&&Kre(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Yre(e,t,n){return t=gp(t),Qre(e,OS()?Reflect.construct(t,n||[],gp(e).constructor):t.apply(e,n))}function Qre(e,t){if(t&&(ts(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Zre(e)}function Zre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function OS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(OS=function(){return!!e})()}function gp(e){return gp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},gp(e)}function Jre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ky(e,t)}function ky(e,t){return ky=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},ky(e,t)}function kS(e,t,n){return t=_S(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _S(e){var t=eae(e,"string");return ts(t)=="symbol"?t:t+""}function eae(e,t){if(ts(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ts(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Id=function(e){function t(){return Vre(this,t),Yre(this,t,arguments)}return Jre(t,e),Xre(t,[{key:"render",value:function(){return null}}])}(k.Component);kS(Id,"displayName","ZAxis");kS(Id,"defaultProps",{zAxisId:0,range:[64,64],scale:"auto",type:"number"});var tae=["option","isActive"];function yl(){return yl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},yl.apply(this,arguments)}function nae(e,t){if(e==null)return{};var n=rae(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rae(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function aae(e){var t=e.option,n=e.isActive,r=nae(e,tae);return typeof t=="string"?k.createElement(fy,yl({option:k.createElement(md,yl({type:t},r)),isActive:n,shapeType:"symbols"},r)):k.createElement(fy,yl({option:t,isActive:n,shapeType:"symbols"},r))}function ns(e){"@babel/helpers - typeof";return ns=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ns(e)}function gl(){return gl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},gl.apply(this,arguments)}function j2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function fn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?j2(Object(n),!0).forEach(function(r){ha(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):j2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function oae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function $2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,CS(r.key),r)}}function iae(e,t,n){return t&&$2(e.prototype,t),n&&$2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function sae(e,t,n){return t=xp(t),lae(e,AS()?Reflect.construct(t,n||[],xp(e).constructor):t.apply(e,n))}function lae(e,t){if(t&&(ns(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return uae(e)}function uae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function AS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(AS=function(){return!!e})()}function xp(e){return xp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},xp(e)}function cae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&_y(e,t)}function _y(e,t){return _y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},_y(e,t)}function ha(e,t,n){return t=CS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function CS(e){var t=fae(e,"string");return ns(t)=="symbol"?t:t+""}function fae(e,t){if(ns(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ns(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Dd=function(e){function t(){var n;oae(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=sae(this,t,[].concat(a)),ha(n,"state",{isAnimationFinished:!1}),ha(n,"handleAnimationEnd",function(){n.setState({isAnimationFinished:!0})}),ha(n,"handleAnimationStart",function(){n.setState({isAnimationFinished:!1})}),ha(n,"id",$o("recharts-scatter-")),n}return cae(t,e),iae(t,[{key:"renderSymbolsStatically",value:function(r){var a=this,o=this.props,i=o.shape,s=o.activeShape,l=o.activeIndex,u=re(this.props,!1);return r.map(function(f,c){var p=l===c,d=p?s:i,h=fn(fn({},u),f);return C.createElement(ye,gl({className:"recharts-scatter-symbol",key:"symbol-".concat(f==null?void 0:f.cx,"-").concat(f==null?void 0:f.cy,"-").concat(f==null?void 0:f.size,"-").concat(c)},Fl(a.props,f,c),{role:"img"}),C.createElement(aae,gl({option:d,isActive:p,key:"symbol-".concat(c)},h)))})}},{key:"renderSymbolsWithAnimation",value:function(){var r=this,a=this.props,o=a.points,i=a.isAnimationActive,s=a.animationBegin,l=a.animationDuration,u=a.animationEasing,f=a.animationId,c=this.state.prevPoints;return C.createElement(Vn,{begin:s,duration:l,isActive:i,easing:u,from:{t:0},to:{t:1},key:"pie-".concat(f),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(p){var d=p.t,h=o.map(function(m,g){var v=c&&c[g];if(v){var y=Xe(v.cx,m.cx),x=Xe(v.cy,m.cy),P=Xe(v.size,m.size);return fn(fn({},m),{},{cx:y(d),cy:x(d),size:P(d)})}var w=Xe(0,m.size);return fn(fn({},m),{},{size:w(d)})});return C.createElement(ye,null,r.renderSymbolsStatically(h))})}},{key:"renderSymbols",value:function(){var r=this.props,a=r.points,o=r.isAnimationActive,i=this.state.prevPoints;return o&&a&&a.length&&(!i||!ko(i,a))?this.renderSymbolsWithAnimation():this.renderSymbolsStatically(a)}},{key:"renderErrorBar",value:function(){var r=this.props.isAnimationActive;if(r&&!this.state.isAnimationFinished)return null;var a=this.props,o=a.points,i=a.xAxis,s=a.yAxis,l=a.children,u=qt(l,Es);return u?u.map(function(f,c){var p=f.props,d=p.direction,h=p.dataKey;return C.cloneElement(f,{key:"".concat(d,"-").concat(h,"-").concat(o[c]),data:o,xAxis:i,yAxis:s,layout:d==="x"?"vertical":"horizontal",dataPointFormatter:function(g,v){return{x:g.cx,y:g.cy,value:d==="x"?+g.node.x:+g.node.y,errorVal:st(g,v)}}})}):null}},{key:"renderLine",value:function(){var r=this.props,a=r.points,o=r.line,i=r.lineType,s=r.lineJointType,l=re(this.props,!1),u=re(o,!1),f,c;if(i==="joint")f=a.map(function(x){return{x:x.cx,y:x.cy}});else if(i==="fitting"){var p=HM(a),d=p.xmin,h=p.xmax,m=p.a,g=p.b,v=function(P){return m*P+g};f=[{x:d,y:v(d)},{x:h,y:v(h)}]}var y=fn(fn(fn({},l),{},{fill:"none",stroke:l&&l.fill},u),{},{points:f});return C.isValidElement(o)?c=C.cloneElement(o,y):oe(o)?c=o(y):c=C.createElement(mo,gl({},y,{type:s})),C.createElement(ye,{className:"recharts-scatter-line",key:"recharts-scatter-line"},c)}},{key:"render",value:function(){var r=this.props,a=r.hide,o=r.points,i=r.line,s=r.className,l=r.xAxis,u=r.yAxis,f=r.left,c=r.top,p=r.width,d=r.height,h=r.id,m=r.isAnimationActive;if(a||!o||!o.length)return null;var g=this.state.isAnimationFinished,v=ue("recharts-scatter",s),y=l&&l.allowDataOverflow,x=u&&u.allowDataOverflow,P=y||x,w=te(h)?this.id:h;return C.createElement(ye,{className:v,clipPath:P?"url(#clipPath-".concat(w,")"):null},y||x?C.createElement("defs",null,C.createElement("clipPath",{id:"clipPath-".concat(w)},C.createElement("rect",{x:y?f:f-p/2,y:x?c:c-d/2,width:y?p:p*2,height:x?d:d*2}))):null,i&&this.renderLine(),this.renderErrorBar(),C.createElement(ye,{key:"recharts-scatter-symbols"},this.renderSymbols()),(!m||g)&&dr.renderCallByParent(this.props,o))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,prevPoints:a.curPoints}:r.points!==a.curPoints?{curPoints:r.points}:null}}])}(k.PureComponent);ha(Dd,"displayName","Scatter");ha(Dd,"defaultProps",{xAxisId:0,yAxisId:0,zAxisId:0,legendType:"circle",lineType:"joint",lineJointType:"linear",data:[],shape:"circle",hide:!1,isAnimationActive:!Da.isSsr,animationBegin:0,animationDuration:400,animationEasing:"linear"});ha(Dd,"getComposedData",function(e){var t=e.xAxis,n=e.yAxis,r=e.zAxis,a=e.item,o=e.displayedData,i=e.xAxisTicks,s=e.yAxisTicks,l=e.offset,u=a.props.tooltipType,f=qt(a.props.children,gg),c=te(t.dataKey)?a.props.dataKey:t.dataKey,p=te(n.dataKey)?a.props.dataKey:n.dataKey,d=r&&r.dataKey,h=r?r.range:Id.defaultProps.range,m=h&&h[0],g=t.scale.bandwidth?t.scale.bandwidth():0,v=n.scale.bandwidth?n.scale.bandwidth():0,y=o.map(function(x,P){var w=st(x,c),S=st(x,p),O=!te(d)&&st(x,d)||"-",_=[{name:te(t.dataKey)?a.props.name:t.name||t.dataKey,unit:t.unit||"",value:w,payload:x,dataKey:c,type:u},{name:te(n.dataKey)?a.props.name:n.name||n.dataKey,unit:n.unit||"",value:S,payload:x,dataKey:p,type:u}];O!=="-"&&_.push({name:r.name||r.dataKey,unit:r.unit||"",value:O,payload:x,dataKey:d,type:u});var A=Ui({axis:t,ticks:i,bandSize:g,entry:x,index:P,dataKey:c}),j=Ui({axis:n,ticks:s,bandSize:v,entry:x,index:P,dataKey:p}),E=O!=="-"?r.scale(O):m,T=Math.sqrt(Math.max(E,0)/Math.PI);return fn(fn({},x),{},{cx:A,cy:j,x:A-T,y:j-T,xAxis:t,yAxis:n,zAxis:r,width:2*T,height:2*T,size:E,node:{x:w,y:S,z:O},tooltipPayload:_,tooltipPosition:{x:A,y:j},payload:x},f&&f[P]&&f[P].props)});return fn({points:y},l)});function rs(e){"@babel/helpers - typeof";return rs=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rs(e)}function pae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function dae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,jS(r.key),r)}}function mae(e,t,n){return t&&dae(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function hae(e,t,n){return t=wp(t),vae(e,ES()?Reflect.construct(t,n||[],wp(e).constructor):t.apply(e,n))}function vae(e,t){if(t&&(rs(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return yae(e)}function yae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function ES(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(ES=function(){return!!e})()}function wp(e){return wp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},wp(e)}function gae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ay(e,t)}function Ay(e,t){return Ay=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Ay(e,t)}function TS(e,t,n){return t=jS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function jS(e){var t=xae(e,"string");return rs(t)=="symbol"?t:t+""}function xae(e,t){if(rs(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(rs(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function Cy(){return Cy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Cy.apply(this,arguments)}function wae(e){var t=e.xAxisId,n=Kg(),r=Xg(),a=iS(t);return a==null?null:k.createElement(Ts,Cy({},a,{className:ue("recharts-".concat(a.axisType," ").concat(a.axisType),a.className),viewBox:{x:0,y:0,width:n,height:r},ticksGenerator:function(i){return Er(i,!0)}}))}var Et=function(e){function t(){return pae(this,t),hae(this,t,arguments)}return gae(t,e),mae(t,[{key:"render",value:function(){return k.createElement(wae,this.props)}}])}(k.Component);TS(Et,"displayName","XAxis");TS(Et,"defaultProps",{allowDecimals:!0,hide:!1,orientation:"bottom",width:0,height:30,mirror:!1,xAxisId:0,tickCount:5,type:"category",padding:{left:0,right:0},allowDataOverflow:!1,scale:"auto",reversed:!1,allowDuplicatedCategory:!0});function as(e){"@babel/helpers - typeof";return as=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},as(e)}function bae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Pae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,MS(r.key),r)}}function Sae(e,t,n){return t&&Pae(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Oae(e,t,n){return t=bp(t),kae(e,$S()?Reflect.construct(t,n||[],bp(e).constructor):t.apply(e,n))}function kae(e,t){if(t&&(as(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return _ae(e)}function _ae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function $S(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return($S=function(){return!!e})()}function bp(e){return bp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},bp(e)}function Aae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ey(e,t)}function Ey(e,t){return Ey=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Ey(e,t)}function NS(e,t,n){return t=MS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function MS(e){var t=Cae(e,"string");return as(t)=="symbol"?t:t+""}function Cae(e,t){if(as(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(as(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function Ty(){return Ty=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ty.apply(this,arguments)}var Eae=function(t){var n=t.yAxisId,r=Kg(),a=Xg(),o=sS(n);return o==null?null:k.createElement(Ts,Ty({},o,{className:ue("recharts-".concat(o.axisType," ").concat(o.axisType),o.className),viewBox:{x:0,y:0,width:r,height:a},ticksGenerator:function(s){return Er(s,!0)}}))},yt=function(e){function t(){return bae(this,t),Oae(this,t,arguments)}return Aae(t,e),Sae(t,[{key:"render",value:function(){return k.createElement(Eae,this.props)}}])}(k.Component);NS(yt,"displayName","YAxis");NS(yt,"defaultProps",{allowDuplicatedCategory:!0,allowDecimals:!0,hide:!1,orientation:"left",width:60,height:0,mirror:!1,yAxisId:0,tickCount:5,type:"number",padding:{top:0,bottom:0},allowDataOverflow:!1,scale:"auto",reversed:!1});function N2(e){return Nae(e)||$ae(e)||jae(e)||Tae()}function Tae(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function jae(e,t){if(e){if(typeof e=="string")return jy(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return jy(e,t)}}function $ae(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Nae(e){if(Array.isArray(e))return jy(e)}function jy(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var $y=function(t,n,r,a,o){var i=qt(t,Qg),s=qt(t,Nd),l=[].concat(N2(i),N2(s)),u=qt(t,Rd),f="".concat(a,"Id"),c=a[0],p=n;if(l.length&&(p=l.reduce(function(m,g){if(g.props[f]===r&&mr(g.props,"extendDomain")&&V(g.props[c])){var v=g.props[c];return[Math.min(m[0],v),Math.max(m[1],v)]}return m},p)),u.length){var d="".concat(c,"1"),h="".concat(c,"2");p=u.reduce(function(m,g){if(g.props[f]===r&&mr(g.props,"extendDomain")&&V(g.props[d])&&V(g.props[h])){var v=g.props[d],y=g.props[h];return[Math.min(m[0],v,y),Math.max(m[1],v,y)]}return m},p)}return o&&o.length&&(p=o.reduce(function(m,g){return V(g)?[Math.min(m[0],g),Math.max(m[1],g)]:m},p)),p},RS={exports:{}};(function(e){var t=Object.prototype.hasOwnProperty,n="~";function r(){}Object.create&&(r.prototype=Object.create(null),new r().__proto__||(n=!1));function a(l,u,f){this.fn=l,this.context=u,this.once=f||!1}function o(l,u,f,c,p){if(typeof f!="function")throw new TypeError("The listener must be a function");var d=new a(f,c||l,p),h=n?n+u:u;return l._events[h]?l._events[h].fn?l._events[h]=[l._events[h],d]:l._events[h].push(d):(l._events[h]=d,l._eventsCount++),l}function i(l,u){--l._eventsCount===0?l._events=new r:delete l._events[u]}function s(){this._events=new r,this._eventsCount=0}s.prototype.eventNames=function(){var u=[],f,c;if(this._eventsCount===0)return u;for(c in f=this._events)t.call(f,c)&&u.push(n?c.slice(1):c);return Object.getOwnPropertySymbols?u.concat(Object.getOwnPropertySymbols(f)):u},s.prototype.listeners=function(u){var f=n?n+u:u,c=this._events[f];if(!c)return[];if(c.fn)return[c.fn];for(var p=0,d=c.length,h=new Array(d);p<d;p++)h[p]=c[p].fn;return h},s.prototype.listenerCount=function(u){var f=n?n+u:u,c=this._events[f];return c?c.fn?1:c.length:0},s.prototype.emit=function(u,f,c,p,d,h){var m=n?n+u:u;if(!this._events[m])return!1;var g=this._events[m],v=arguments.length,y,x;if(g.fn){switch(g.once&&this.removeListener(u,g.fn,void 0,!0),v){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,f),!0;case 3:return g.fn.call(g.context,f,c),!0;case 4:return g.fn.call(g.context,f,c,p),!0;case 5:return g.fn.call(g.context,f,c,p,d),!0;case 6:return g.fn.call(g.context,f,c,p,d,h),!0}for(x=1,y=new Array(v-1);x<v;x++)y[x-1]=arguments[x];g.fn.apply(g.context,y)}else{var P=g.length,w;for(x=0;x<P;x++)switch(g[x].once&&this.removeListener(u,g[x].fn,void 0,!0),v){case 1:g[x].fn.call(g[x].context);break;case 2:g[x].fn.call(g[x].context,f);break;case 3:g[x].fn.call(g[x].context,f,c);break;case 4:g[x].fn.call(g[x].context,f,c,p);break;default:if(!y)for(w=1,y=new Array(v-1);w<v;w++)y[w-1]=arguments[w];g[x].fn.apply(g[x].context,y)}}return!0},s.prototype.on=function(u,f,c){return o(this,u,f,c,!1)},s.prototype.once=function(u,f,c){return o(this,u,f,c,!0)},s.prototype.removeListener=function(u,f,c,p){var d=n?n+u:u;if(!this._events[d])return this;if(!f)return i(this,d),this;var h=this._events[d];if(h.fn)h.fn===f&&(!p||h.once)&&(!c||h.context===c)&&i(this,d);else{for(var m=0,g=[],v=h.length;m<v;m++)(h[m].fn!==f||p&&!h[m].once||c&&h[m].context!==c)&&g.push(h[m]);g.length?this._events[d]=g.length===1?g[0]:g:i(this,d)}return this},s.prototype.removeAllListeners=function(u){var f;return u?(f=n?n+u:u,this._events[f]&&i(this,f)):(this._events=new r,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prefixed=n,s.EventEmitter=s,e.exports=s})(RS);var Mae=RS.exports;const Rae=Ce(Mae);var eh=new Rae,th="recharts.syncMouseEvents";function xu(e){"@babel/helpers - typeof";return xu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xu(e)}function Iae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Dae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,IS(r.key),r)}}function Lae(e,t,n){return t&&Dae(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function nh(e,t,n){return t=IS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function IS(e){var t=Fae(e,"string");return xu(t)=="symbol"?t:t+""}function Fae(e,t){if(xu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(xu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var zae=function(){function e(){Iae(this,e),nh(this,"activeIndex",0),nh(this,"coordinateList",[]),nh(this,"layout","horizontal")}return Lae(e,[{key:"setDetails",value:function(n){var r,a=n.coordinateList,o=a===void 0?null:a,i=n.container,s=i===void 0?null:i,l=n.layout,u=l===void 0?null:l,f=n.offset,c=f===void 0?null:f,p=n.mouseHandlerCallback,d=p===void 0?null:p;this.coordinateList=(r=o??this.coordinateList)!==null&&r!==void 0?r:[],this.container=s??this.container,this.layout=u??this.layout,this.offset=c??this.offset,this.mouseHandlerCallback=d??this.mouseHandlerCallback,this.activeIndex=Math.min(Math.max(this.activeIndex,0),this.coordinateList.length-1)}},{key:"focus",value:function(){this.spoofMouse()}},{key:"keyboardEvent",value:function(n){if(this.coordinateList.length!==0)switch(n.key){case"ArrowRight":{if(this.layout!=="horizontal")return;this.activeIndex=Math.min(this.activeIndex+1,this.coordinateList.length-1),this.spoofMouse();break}case"ArrowLeft":{if(this.layout!=="horizontal")return;this.activeIndex=Math.max(this.activeIndex-1,0),this.spoofMouse();break}}}},{key:"setIndex",value:function(n){this.activeIndex=n}},{key:"spoofMouse",value:function(){var n,r;if(this.layout==="horizontal"&&this.coordinateList.length!==0){var a=this.container.getBoundingClientRect(),o=a.x,i=a.y,s=a.height,l=this.coordinateList[this.activeIndex].coordinate,u=((n=window)===null||n===void 0?void 0:n.scrollX)||0,f=((r=window)===null||r===void 0?void 0:r.scrollY)||0,c=o+l+u,p=i+this.offset.top+s/2+f;this.mouseHandlerCallback({pageX:c,pageY:p})}}}])}();function Bae(e,t,n){if(n==="number"&&t===!0&&Array.isArray(e)){var r=e==null?void 0:e[0],a=e==null?void 0:e[1];if(r&&a&&V(r)&&V(a))return!0}return!1}function Hae(e,t,n,r){var a=r/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-a:n.left+.5,y:e==="horizontal"?n.top+.5:t.y-a,width:e==="horizontal"?r:n.width-1,height:e==="horizontal"?n.height-1:r}}function DS(e){var t=e.cx,n=e.cy,r=e.radius,a=e.startAngle,o=e.endAngle,i=vt(t,n,r,a),s=vt(t,n,r,o);return{points:[i,s],cx:t,cy:n,radius:r,startAngle:a,endAngle:o}}function Gae(e,t,n){var r,a,o,i;if(e==="horizontal")r=t.x,o=r,a=n.top,i=n.top+n.height;else if(e==="vertical")a=t.y,i=a,r=n.left,o=n.left+n.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var s=t.cx,l=t.cy,u=t.innerRadius,f=t.outerRadius,c=t.angle,p=vt(s,l,u,c),d=vt(s,l,f,c);r=p.x,a=p.y,o=d.x,i=d.y}else return DS(t);return[{x:r,y:a},{x:o,y:i}]}function wu(e){"@babel/helpers - typeof";return wu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},wu(e)}function M2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Pc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?M2(Object(n),!0).forEach(function(r){Uae(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):M2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Uae(e,t,n){return t=Wae(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Wae(e){var t=qae(e,"string");return wu(t)=="symbol"?t:t+""}function qae(e,t){if(wu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(wu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Vae(e){var t,n,r=e.element,a=e.tooltipEventType,o=e.isActive,i=e.activeCoordinate,s=e.activePayload,l=e.offset,u=e.activeTooltipIndex,f=e.tooltipAxisBandSize,c=e.layout,p=e.chartName,d=(t=r.props.cursor)!==null&&t!==void 0?t:(n=r.type.defaultProps)===null||n===void 0?void 0:n.cursor;if(!r||!d||!o||!i||p!=="ScatterChart"&&a!=="axis")return null;var h,m=mo;if(p==="ScatterChart")h=i,m=xJ;else if(p==="BarChart")h=Hae(c,i,l,f),m=Ug;else if(c==="radial"){var g=DS(i),v=g.cx,y=g.cy,x=g.radius,P=g.startAngle,w=g.endAngle;h={cx:v,cy:y,startAngle:P,endAngle:w,innerRadius:x,outerRadius:x},m=$P}else h={points:Gae(c,i,l)},m=mo;var S=Pc(Pc(Pc(Pc({stroke:"#ccc",pointerEvents:"none"},l),h),re(d,!1)),{},{payload:s,payloadIndex:u,className:ue("recharts-tooltip-cursor",d.className)});return k.isValidElement(d)?k.cloneElement(d,S):k.createElement(m,S)}var Kae=["item"],Xae=["children","className","width","height","style","compact","title","desc"];function os(e){"@babel/helpers - typeof";return os=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},os(e)}function ai(){return ai=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ai.apply(this,arguments)}function R2(e,t){return Zae(e)||Qae(e,t)||FS(e,t)||Yae()}function Yae(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Qae(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function Zae(e){if(Array.isArray(e))return e}function I2(e,t){if(e==null)return{};var n=Jae(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jae(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function eoe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function toe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,zS(r.key),r)}}function noe(e,t,n){return t&&toe(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function roe(e,t,n){return t=Pp(t),aoe(e,LS()?Reflect.construct(t,n||[],Pp(e).constructor):t.apply(e,n))}function aoe(e,t){if(t&&(os(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return ooe(e)}function ooe(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function LS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(LS=function(){return!!e})()}function Pp(e){return Pp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Pp(e)}function ioe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ny(e,t)}function Ny(e,t){return Ny=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Ny(e,t)}function is(e){return uoe(e)||loe(e)||FS(e)||soe()}function soe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function FS(e,t){if(e){if(typeof e=="string")return My(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return My(e,t)}}function loe(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function uoe(e){if(Array.isArray(e))return My(e)}function My(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function D2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function z(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?D2(Object(n),!0).forEach(function(r){ee(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):D2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function ee(e,t,n){return t=zS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function zS(e){var t=coe(e,"string");return os(t)=="symbol"?t:t+""}function coe(e,t){if(os(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(os(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var foe={xAxis:["bottom","top"],yAxis:["left","right"]},poe={width:"100%",height:"100%"},BS={x:0,y:0};function Sc(e){return e}var doe=function(t,n){return n==="horizontal"?t.x:n==="vertical"?t.y:n==="centric"?t.angle:t.radius},moe=function(t,n,r,a){var o=n.find(function(f){return f&&f.index===r});if(o){if(t==="horizontal")return{x:o.coordinate,y:a.y};if(t==="vertical")return{x:a.x,y:o.coordinate};if(t==="centric"){var i=o.coordinate,s=a.radius;return z(z(z({},a),vt(a.cx,a.cy,s,i)),{},{angle:i,radius:s})}var l=o.coordinate,u=a.angle;return z(z(z({},a),vt(a.cx,a.cy,l,u)),{},{angle:u,radius:l})}return BS},Ld=function(t,n){var r=n.graphicalItems,a=n.dataStartIndex,o=n.dataEndIndex,i=(r??[]).reduce(function(s,l){var u=l.props.data;return u&&u.length?[].concat(is(s),is(u)):s},[]);return i.length>0?i:t&&t.length&&V(a)&&V(o)?t.slice(a,o+1):[]};function HS(e){return e==="number"?[0,"auto"]:void 0}var Ry=function(t,n,r,a){var o=t.graphicalItems,i=t.tooltipAxis,s=Ld(n,t);return r<0||!o||!o.length||r>=s.length?null:o.reduce(function(l,u){var f,c=(f=u.props.data)!==null&&f!==void 0?f:n;c&&t.dataStartIndex+t.dataEndIndex!==0&&t.dataEndIndex-t.dataStartIndex>=r&&(c=c.slice(t.dataStartIndex,t.dataEndIndex+1));var p;if(i.dataKey&&!i.allowDuplicatedCategory){var d=c===void 0?s:c;p=Pf(d,i.dataKey,a)}else p=c&&c[r]||s[r];return p?[].concat(is(l),[EP(u,p)]):l},[])},L2=function(t,n,r,a){var o=a||{x:t.chartX,y:t.chartY},i=doe(o,r),s=t.orderedTooltipTicks,l=t.tooltipAxis,u=t.tooltipTicks,f=tY(i,s,u,l);if(f>=0&&u){var c=u[f]&&u[f].value,p=Ry(t,n,f,c),d=moe(r,s,f,o);return{activeTooltipIndex:f,activeLabel:c,activePayload:p,activeCoordinate:d}}return null},hoe=function(t,n){var r=n.axes,a=n.graphicalItems,o=n.axisType,i=n.axisIdKey,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,f=t.layout,c=t.children,p=t.stackOffset,d=_P(f,o);return r.reduce(function(h,m){var g,v=m.type.defaultProps!==void 0?z(z({},m.type.defaultProps),m.props):m.props,y=v.type,x=v.dataKey,P=v.allowDataOverflow,w=v.allowDuplicatedCategory,S=v.scale,O=v.ticks,_=v.includeHidden,A=v[i];if(h[A])return h;var j=Ld(t.data,{graphicalItems:a.filter(function(G){var Z,ie=i in G.props?G.props[i]:(Z=G.type.defaultProps)===null||Z===void 0?void 0:Z[i];return ie===A}),dataStartIndex:l,dataEndIndex:u}),E=j.length,T,N,M;Bae(v.domain,P,y)&&(T=Xv(v.domain,null,P),d&&(y==="number"||S!=="auto")&&(M=ml(j,x,"category")));var I=HS(y);if(!T||T.length===0){var R,L=(R=v.domain)!==null&&R!==void 0?R:I;if(x){if(T=ml(j,x,y),y==="category"&&d){var $=BM(T);w&&$?(N=T,T=ip(0,E)):w||(T=pb(L,T,m).reduce(function(G,Z){return G.indexOf(Z)>=0?G:[].concat(is(G),[Z])},[]))}else if(y==="category")w?T=T.filter(function(G){return G!==""&&!te(G)}):T=pb(L,T,m).reduce(function(G,Z){return G.indexOf(Z)>=0||Z===""||te(Z)?G:[].concat(is(G),[Z])},[]);else if(y==="number"){var D=iY(j,a.filter(function(G){var Z,ie,ve=i in G.props?G.props[i]:(Z=G.type.defaultProps)===null||Z===void 0?void 0:Z[i],Pe="hide"in G.props?G.props.hide:(ie=G.type.defaultProps)===null||ie===void 0?void 0:ie.hide;return ve===A&&(_||!Pe)}),x,o,f);D&&(T=D)}d&&(y==="number"||S!=="auto")&&(M=ml(j,x,"category"))}else d?T=ip(0,E):s&&s[A]&&s[A].hasStack&&y==="number"?T=p==="expand"?[0,1]:CP(s[A].stackGroups,l,u):T=kP(j,a.filter(function(G){var Z=i in G.props?G.props[i]:G.type.defaultProps[i],ie="hide"in G.props?G.props.hide:G.type.defaultProps.hide;return Z===A&&(_||!ie)}),y,f,!0);if(y==="number")T=$y(c,T,A,o,O),L&&(T=Xv(L,T,P));else if(y==="category"&&L){var H=L,W=T.every(function(G){return H.indexOf(G)>=0});W&&(T=H)}}return z(z({},h),{},ee({},A,z(z({},v),{},{axisType:o,domain:T,categoricalDomain:M,duplicateDomain:N,originalDomain:(g=v.domain)!==null&&g!==void 0?g:I,isCategorical:d,layout:f})))},{})},voe=function(t,n){var r=n.graphicalItems,a=n.Axis,o=n.axisType,i=n.axisIdKey,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,f=t.layout,c=t.children,p=Ld(t.data,{graphicalItems:r,dataStartIndex:l,dataEndIndex:u}),d=p.length,h=_P(f,o),m=-1;return r.reduce(function(g,v){var y=v.type.defaultProps!==void 0?z(z({},v.type.defaultProps),v.props):v.props,x=y[i],P=HS("number");if(!g[x]){m++;var w;return h?w=ip(0,d):s&&s[x]&&s[x].hasStack?(w=CP(s[x].stackGroups,l,u),w=$y(c,w,x,o)):(w=Xv(P,kP(p,r.filter(function(S){var O,_,A=i in S.props?S.props[i]:(O=S.type.defaultProps)===null||O===void 0?void 0:O[i],j="hide"in S.props?S.props.hide:(_=S.type.defaultProps)===null||_===void 0?void 0:_.hide;return A===x&&!j}),"number",f),a.defaultProps.allowDataOverflow),w=$y(c,w,x,o)),z(z({},g),{},ee({},x,z(z({axisType:o},a.defaultProps),{},{hide:!0,orientation:gn(foe,"".concat(o,".").concat(m%2),null),domain:w,originalDomain:P,isCategorical:h,layout:f})))}return g},{})},yoe=function(t,n){var r=n.axisType,a=r===void 0?"xAxis":r,o=n.AxisComp,i=n.graphicalItems,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,f=t.children,c="".concat(a,"Id"),p=qt(f,o),d={};return p&&p.length?d=hoe(t,{axes:p,graphicalItems:i,axisType:a,axisIdKey:c,stackGroups:s,dataStartIndex:l,dataEndIndex:u}):i&&i.length&&(d=voe(t,{Axis:o,graphicalItems:i,axisType:a,axisIdKey:c,stackGroups:s,dataStartIndex:l,dataEndIndex:u})),d},goe=function(t){var n=oa(t),r=Er(n,!1,!0);return{tooltipTicks:r,orderedTooltipTicks:vg(r,function(a){return a.coordinate}),tooltipAxis:n,tooltipAxisBandSize:Qf(n,r)}},F2=function(t){var n=t.children,r=t.defaultShowTooltip,a=Qt(n,Vi),o=0,i=0;return t.data&&t.data.length!==0&&(i=t.data.length-1),a&&a.props&&(a.props.startIndex>=0&&(o=a.props.startIndex),a.props.endIndex>=0&&(i=a.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:o,dataEndIndex:i,activeTooltipIndex:-1,isTooltipActive:!!r}},xoe=function(t){return!t||!t.length?!1:t.some(function(n){var r=jr(n&&n.type);return r&&r.indexOf("Bar")>=0})},z2=function(t){return t==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:t==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:t==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},woe=function(t,n){var r=t.props,a=t.graphicalItems,o=t.xAxisMap,i=o===void 0?{}:o,s=t.yAxisMap,l=s===void 0?{}:s,u=r.width,f=r.height,c=r.children,p=r.margin||{},d=Qt(c,Vi),h=Qt(c,hi),m=Object.keys(l).reduce(function(w,S){var O=l[S],_=O.orientation;return!O.mirror&&!O.hide?z(z({},w),{},ee({},_,w[_]+O.width)):w},{left:p.left||0,right:p.right||0}),g=Object.keys(i).reduce(function(w,S){var O=i[S],_=O.orientation;return!O.mirror&&!O.hide?z(z({},w),{},ee({},_,gn(w,"".concat(_))+O.height)):w},{top:p.top||0,bottom:p.bottom||0}),v=z(z({},g),m),y=v.bottom;d&&(v.bottom+=d.props.height||Vi.defaultProps.height),h&&n&&(v=aY(v,a,r,n));var x=u-v.left-v.right,P=f-v.top-v.bottom;return z(z({brushBottom:y},v),{},{width:Math.max(x,0),height:Math.max(P,0)})},boe=function(t,n){if(n==="xAxis")return t[n].width;if(n==="yAxis")return t[n].height},Fd=function(t){var n=t.chartName,r=t.GraphicalChild,a=t.defaultTooltipEventType,o=a===void 0?"axis":a,i=t.validateTooltipEventTypes,s=i===void 0?["axis"]:i,l=t.axisComponents,u=t.legendContent,f=t.formatAxisMap,c=t.defaultProps,p=function(v,y){var x=y.graphicalItems,P=y.stackGroups,w=y.offset,S=y.updateId,O=y.dataStartIndex,_=y.dataEndIndex,A=v.barSize,j=v.layout,E=v.barGap,T=v.barCategoryGap,N=v.maxBarSize,M=z2(j),I=M.numericAxisName,R=M.cateAxisName,L=xoe(x),$=[];return x.forEach(function(D,H){var W=Ld(v.data,{graphicalItems:[D],dataStartIndex:O,dataEndIndex:_}),G=D.type.defaultProps!==void 0?z(z({},D.type.defaultProps),D.props):D.props,Z=G.dataKey,ie=G.maxBarSize,ve=G["".concat(I,"Id")],Pe=G["".concat(R,"Id")],J={},le=l.reduce(function(Ba,Ha){var Wd=y["".concat(Ha.axisType,"Map")],l1=G["".concat(Ha.axisType,"Id")];Wd&&Wd[l1]||Ha.axisType==="zAxis"||Ao();var u1=Wd[l1];return z(z({},Ba),{},ee(ee({},Ha.axisType,u1),"".concat(Ha.axisType,"Ticks"),Er(u1)))},J),q=le[R],K=le["".concat(R,"Ticks")],X=P&&P[ve]&&P[ve].hasStack&&gY(D,P[ve].stackGroups),F=jr(D.type).indexOf("Bar")>=0,fe=Qf(q,K),ne=[],Ne=L&&nY({barSize:A,stackGroups:P,totalSize:boe(le,R)});if(F){var Me,Ze,Xn=te(ie)?N:ie,On=(Me=(Ze=Qf(q,K,!0))!==null&&Ze!==void 0?Ze:Xn)!==null&&Me!==void 0?Me:0;ne=rY({barGap:E,barCategoryGap:T,bandSize:On!==fe?On:fe,sizeList:Ne[Pe],maxBarSize:Xn}),On!==fe&&(ne=ne.map(function(Ba){return z(z({},Ba),{},{position:z(z({},Ba.position),{},{offset:Ba.position.offset-On/2})})}))}var Fu=D&&D.type&&D.type.getComposedData;Fu&&$.push({props:z(z({},Fu(z(z({},le),{},{displayedData:W,props:v,dataKey:Z,item:D,bandSize:fe,barPosition:ne,offset:w,stackedData:X,layout:j,dataStartIndex:O,dataEndIndex:_}))),{},ee(ee(ee({key:D.key||"item-".concat(H)},I,le[I]),R,le[R]),"animationId",S)),childIndex:eR(D,v.children),item:D})}),$},d=function(v,y){var x=v.props,P=v.dataStartIndex,w=v.dataEndIndex,S=v.updateId;if(!iw({props:x}))return null;var O=x.children,_=x.layout,A=x.stackOffset,j=x.data,E=x.reverseStackOrder,T=z2(_),N=T.numericAxisName,M=T.cateAxisName,I=qt(O,r),R=hY(j,I,"".concat(N,"Id"),"".concat(M,"Id"),A,E),L=l.reduce(function(G,Z){var ie="".concat(Z.axisType,"Map");return z(z({},G),{},ee({},ie,yoe(x,z(z({},Z),{},{graphicalItems:I,stackGroups:Z.axisType===N&&R,dataStartIndex:P,dataEndIndex:w}))))},{}),$=woe(z(z({},L),{},{props:x,graphicalItems:I}),y==null?void 0:y.legendBBox);Object.keys(L).forEach(function(G){L[G]=f(x,L[G],$,G.replace("Map",""),n)});var D=L["".concat(M,"Map")],H=goe(D),W=p(x,z(z({},L),{},{dataStartIndex:P,dataEndIndex:w,updateId:S,graphicalItems:I,stackGroups:R,offset:$}));return z(z({formattedGraphicalItems:W,graphicalItems:I,offset:$,stackGroups:R},H),L)},h=function(g){function v(y){var x,P,w;return eoe(this,v),w=roe(this,v,[y]),ee(w,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),ee(w,"accessibilityManager",new zae),ee(w,"handleLegendBBoxUpdate",function(S){if(S){var O=w.state,_=O.dataStartIndex,A=O.dataEndIndex,j=O.updateId;w.setState(z({legendBBox:S},d({props:w.props,dataStartIndex:_,dataEndIndex:A,updateId:j},z(z({},w.state),{},{legendBBox:S}))))}}),ee(w,"handleReceiveSyncEvent",function(S,O,_){if(w.props.syncId===S){if(_===w.eventEmitterSymbol&&typeof w.props.syncMethod!="function")return;w.applySyncEvent(O)}}),ee(w,"handleBrushChange",function(S){var O=S.startIndex,_=S.endIndex;if(O!==w.state.dataStartIndex||_!==w.state.dataEndIndex){var A=w.state.updateId;w.setState(function(){return z({dataStartIndex:O,dataEndIndex:_},d({props:w.props,dataStartIndex:O,dataEndIndex:_,updateId:A},w.state))}),w.triggerSyncEvent({dataStartIndex:O,dataEndIndex:_})}}),ee(w,"handleMouseEnter",function(S){var O=w.getMouseInfo(S);if(O){var _=z(z({},O),{},{isTooltipActive:!0});w.setState(_),w.triggerSyncEvent(_);var A=w.props.onMouseEnter;oe(A)&&A(_,S)}}),ee(w,"triggeredAfterMouseMove",function(S){var O=w.getMouseInfo(S),_=O?z(z({},O),{},{isTooltipActive:!0}):{isTooltipActive:!1};w.setState(_),w.triggerSyncEvent(_);var A=w.props.onMouseMove;oe(A)&&A(_,S)}),ee(w,"handleItemMouseEnter",function(S){w.setState(function(){return{isTooltipActive:!0,activeItem:S,activePayload:S.tooltipPayload,activeCoordinate:S.tooltipPosition||{x:S.cx,y:S.cy}}})}),ee(w,"handleItemMouseLeave",function(){w.setState(function(){return{isTooltipActive:!1}})}),ee(w,"handleMouseMove",function(S){S.persist(),w.throttleTriggeredAfterMouseMove(S)}),ee(w,"handleMouseLeave",function(S){w.throttleTriggeredAfterMouseMove.cancel();var O={isTooltipActive:!1};w.setState(O),w.triggerSyncEvent(O);var _=w.props.onMouseLeave;oe(_)&&_(O,S)}),ee(w,"handleOuterEvent",function(S){var O=JM(S),_=gn(w.props,"".concat(O));if(O&&oe(_)){var A,j;/.*touch.*/i.test(O)?j=w.getMouseInfo(S.changedTouches[0]):j=w.getMouseInfo(S),_((A=j)!==null&&A!==void 0?A:{},S)}}),ee(w,"handleClick",function(S){var O=w.getMouseInfo(S);if(O){var _=z(z({},O),{},{isTooltipActive:!0});w.setState(_),w.triggerSyncEvent(_);var A=w.props.onClick;oe(A)&&A(_,S)}}),ee(w,"handleMouseDown",function(S){var O=w.props.onMouseDown;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"handleMouseUp",function(S){var O=w.props.onMouseUp;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"handleTouchMove",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&w.throttleTriggeredAfterMouseMove(S.changedTouches[0])}),ee(w,"handleTouchStart",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&w.handleMouseDown(S.changedTouches[0])}),ee(w,"handleTouchEnd",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&w.handleMouseUp(S.changedTouches[0])}),ee(w,"handleDoubleClick",function(S){var O=w.props.onDoubleClick;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"handleContextMenu",function(S){var O=w.props.onContextMenu;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"triggerSyncEvent",function(S){w.props.syncId!==void 0&&eh.emit(th,w.props.syncId,S,w.eventEmitterSymbol)}),ee(w,"applySyncEvent",function(S){var O=w.props,_=O.layout,A=O.syncMethod,j=w.state.updateId,E=S.dataStartIndex,T=S.dataEndIndex;if(S.dataStartIndex!==void 0||S.dataEndIndex!==void 0)w.setState(z({dataStartIndex:E,dataEndIndex:T},d({props:w.props,dataStartIndex:E,dataEndIndex:T,updateId:j},w.state)));else if(S.activeTooltipIndex!==void 0){var N=S.chartX,M=S.chartY,I=S.activeTooltipIndex,R=w.state,L=R.offset,$=R.tooltipTicks;if(!L)return;if(typeof A=="function")I=A($,S);else if(A==="value"){I=-1;for(var D=0;D<$.length;D++)if($[D].value===S.activeLabel){I=D;break}}var H=z(z({},L),{},{x:L.left,y:L.top}),W=Math.min(N,H.x+H.width),G=Math.min(M,H.y+H.height),Z=$[I]&&$[I].value,ie=Ry(w.state,w.props.data,I),ve=$[I]?{x:_==="horizontal"?$[I].coordinate:W,y:_==="horizontal"?G:$[I].coordinate}:BS;w.setState(z(z({},S),{},{activeLabel:Z,activeCoordinate:ve,activePayload:ie,activeTooltipIndex:I}))}else w.setState(S)}),ee(w,"renderCursor",function(S){var O,_=w.state,A=_.isTooltipActive,j=_.activeCoordinate,E=_.activePayload,T=_.offset,N=_.activeTooltipIndex,M=_.tooltipAxisBandSize,I=w.getTooltipEventType(),R=(O=S.props.active)!==null&&O!==void 0?O:A,L=w.props.layout,$=S.key||"_recharts-cursor";return C.createElement(Vae,{key:$,activeCoordinate:j,activePayload:E,activeTooltipIndex:N,chartName:n,element:S,isActive:R,layout:L,offset:T,tooltipAxisBandSize:M,tooltipEventType:I})}),ee(w,"renderPolarAxis",function(S,O,_){var A=gn(S,"type.axisType"),j=gn(w.state,"".concat(A,"Map")),E=S.type.defaultProps,T=E!==void 0?z(z({},E),S.props):S.props,N=j&&j[T["".concat(A,"Id")]];return k.cloneElement(S,z(z({},N),{},{className:ue(A,N.className),key:S.key||"".concat(O,"-").concat(_),ticks:Er(N,!0)}))}),ee(w,"renderPolarGrid",function(S){var O=S.props,_=O.radialLines,A=O.polarAngles,j=O.polarRadius,E=w.state,T=E.radiusAxisMap,N=E.angleAxisMap,M=oa(T),I=oa(N),R=I.cx,L=I.cy,$=I.innerRadius,D=I.outerRadius;return k.cloneElement(S,{polarAngles:Array.isArray(A)?A:Er(I,!0).map(function(H){return H.coordinate}),polarRadius:Array.isArray(j)?j:Er(M,!0).map(function(H){return H.coordinate}),cx:R,cy:L,innerRadius:$,outerRadius:D,key:S.key||"polar-grid",radialLines:_})}),ee(w,"renderLegend",function(){var S=w.state.formattedGraphicalItems,O=w.props,_=O.children,A=O.width,j=O.height,E=w.props.margin||{},T=A-(E.left||0)-(E.right||0),N=SP({children:_,formattedGraphicalItems:S,legendWidth:T,legendContent:u});if(!N)return null;var M=N.item,I=I2(N,Kae);return k.cloneElement(M,z(z({},I),{},{chartWidth:A,chartHeight:j,margin:E,onBBoxUpdate:w.handleLegendBBoxUpdate}))}),ee(w,"renderTooltip",function(){var S,O=w.props,_=O.children,A=O.accessibilityLayer,j=Qt(_,Zn);if(!j)return null;var E=w.state,T=E.isTooltipActive,N=E.activeCoordinate,M=E.activePayload,I=E.activeLabel,R=E.offset,L=(S=j.props.active)!==null&&S!==void 0?S:T;return k.cloneElement(j,{viewBox:z(z({},R),{},{x:R.left,y:R.top}),active:L,label:I,payload:L?M:[],coordinate:N,accessibilityLayer:A})}),ee(w,"renderBrush",function(S){var O=w.props,_=O.margin,A=O.data,j=w.state,E=j.offset,T=j.dataStartIndex,N=j.dataEndIndex,M=j.updateId;return k.cloneElement(S,{key:S.key||"_recharts-brush",onChange:gc(w.handleBrushChange,S.props.onChange),data:A,x:V(S.props.x)?S.props.x:E.left,y:V(S.props.y)?S.props.y:E.top+E.height+E.brushBottom-(_.bottom||0),width:V(S.props.width)?S.props.width:E.width,startIndex:T,endIndex:N,updateId:"brush-".concat(M)})}),ee(w,"renderReferenceElement",function(S,O,_){if(!S)return null;var A=w,j=A.clipPathId,E=w.state,T=E.xAxisMap,N=E.yAxisMap,M=E.offset,I=S.type.defaultProps||{},R=S.props,L=R.xAxisId,$=L===void 0?I.xAxisId:L,D=R.yAxisId,H=D===void 0?I.yAxisId:D;return k.cloneElement(S,{key:S.key||"".concat(O,"-").concat(_),xAxis:T[$],yAxis:N[H],viewBox:{x:M.left,y:M.top,width:M.width,height:M.height},clipPathId:j})}),ee(w,"renderActivePoints",function(S){var O=S.item,_=S.activePoint,A=S.basePoint,j=S.childIndex,E=S.isRange,T=[],N=O.props.key,M=O.item.type.defaultProps!==void 0?z(z({},O.item.type.defaultProps),O.item.props):O.item.props,I=M.activeDot,R=M.dataKey,L=z(z({index:j,dataKey:R,cx:_.x,cy:_.y,r:4,fill:Gg(O.item),strokeWidth:2,stroke:"#fff",payload:_.payload,value:_.value},re(I,!1)),Sf(I));return T.push(v.renderActiveDot(I,L,"".concat(N,"-activePoint-").concat(j))),A?T.push(v.renderActiveDot(I,z(z({},L),{},{cx:A.x,cy:A.y}),"".concat(N,"-basePoint-").concat(j))):E&&T.push(null),T}),ee(w,"renderGraphicChild",function(S,O,_){var A=w.filterFormatItem(S,O,_);if(!A)return null;var j=w.getTooltipEventType(),E=w.state,T=E.isTooltipActive,N=E.tooltipAxis,M=E.activeTooltipIndex,I=E.activeLabel,R=w.props.children,L=Qt(R,Zn),$=A.props,D=$.points,H=$.isRange,W=$.baseLine,G=A.item.type.defaultProps!==void 0?z(z({},A.item.type.defaultProps),A.item.props):A.item.props,Z=G.activeDot,ie=G.hide,ve=G.activeBar,Pe=G.activeShape,J=!!(!ie&&T&&L&&(Z||ve||Pe)),le={};j!=="axis"&&L&&L.props.trigger==="click"?le={onClick:gc(w.handleItemMouseEnter,S.props.onClick)}:j!=="axis"&&(le={onMouseLeave:gc(w.handleItemMouseLeave,S.props.onMouseLeave),onMouseEnter:gc(w.handleItemMouseEnter,S.props.onMouseEnter)});var q=k.cloneElement(S,z(z({},A.props),le));function K(Ha){return typeof N.dataKey=="function"?N.dataKey(Ha.payload):null}if(J)if(M>=0){var X,F;if(N.dataKey&&!N.allowDuplicatedCategory){var fe=typeof N.dataKey=="function"?K:"payload.".concat(N.dataKey.toString());X=Pf(D,fe,I),F=H&&W&&Pf(W,fe,I)}else X=D==null?void 0:D[M],F=H&&W&&W[M];if(Pe||ve){var ne=S.props.activeIndex!==void 0?S.props.activeIndex:M;return[k.cloneElement(S,z(z(z({},A.props),le),{},{activeIndex:ne})),null,null]}if(!te(X))return[q].concat(is(w.renderActivePoints({item:A,activePoint:X,basePoint:F,childIndex:M,isRange:H})))}else{var Ne,Me=(Ne=w.getItemByXY(w.state.activeCoordinate))!==null&&Ne!==void 0?Ne:{graphicalItem:q},Ze=Me.graphicalItem,Xn=Ze.item,On=Xn===void 0?S:Xn,Fu=Ze.childIndex,Ba=z(z(z({},A.props),le),{},{activeIndex:Fu});return[k.cloneElement(On,Ba),null,null]}return H?[q,null,null]:[q,null]}),ee(w,"renderCustomized",function(S,O,_){return k.cloneElement(S,z(z({key:"recharts-customized-".concat(_)},w.props),w.state))}),ee(w,"renderMap",{CartesianGrid:{handler:Sc,once:!0},ReferenceArea:{handler:w.renderReferenceElement},ReferenceLine:{handler:Sc},ReferenceDot:{handler:w.renderReferenceElement},XAxis:{handler:Sc},YAxis:{handler:Sc},Brush:{handler:w.renderBrush,once:!0},Bar:{handler:w.renderGraphicChild},Line:{handler:w.renderGraphicChild},Area:{handler:w.renderGraphicChild},Radar:{handler:w.renderGraphicChild},RadialBar:{handler:w.renderGraphicChild},Scatter:{handler:w.renderGraphicChild},Pie:{handler:w.renderGraphicChild},Funnel:{handler:w.renderGraphicChild},Tooltip:{handler:w.renderCursor,once:!0},PolarGrid:{handler:w.renderPolarGrid,once:!0},PolarAngleAxis:{handler:w.renderPolarAxis},PolarRadiusAxis:{handler:w.renderPolarAxis},Customized:{handler:w.renderCustomized}}),w.clipPathId="".concat((x=y.id)!==null&&x!==void 0?x:$o("recharts"),"-clip"),w.throttleTriggeredAfterMouseMove=S7(w.triggeredAfterMouseMove,(P=y.throttleDelay)!==null&&P!==void 0?P:1e3/60),w.state={},w}return ioe(v,g),noe(v,[{key:"componentDidMount",value:function(){var x,P;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(x=this.props.margin.left)!==null&&x!==void 0?x:0,top:(P=this.props.margin.top)!==null&&P!==void 0?P:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var x=this.props,P=x.children,w=x.data,S=x.height,O=x.layout,_=Qt(P,Zn);if(_){var A=_.props.defaultIndex;if(!(typeof A!="number"||A<0||A>this.state.tooltipTicks.length-1)){var j=this.state.tooltipTicks[A]&&this.state.tooltipTicks[A].value,E=Ry(this.state,w,A,j),T=this.state.tooltipTicks[A].coordinate,N=(this.state.offset.top+S)/2,M=O==="horizontal",I=M?{x:T,y:N}:{y:T,x:N},R=this.state.formattedGraphicalItems.find(function($){var D=$.item;return D.type.name==="Scatter"});R&&(I=z(z({},I),R.props.points[A].tooltipPosition),E=R.props.points[A].tooltipPayload);var L={activeTooltipIndex:A,isTooltipActive:!0,activeLabel:j,activePayload:E,activeCoordinate:I};this.setState(L),this.renderCursor(_),this.accessibilityManager.setIndex(A)}}}},{key:"getSnapshotBeforeUpdate",value:function(x,P){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==P.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==x.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==x.margin){var w,S;this.accessibilityManager.setDetails({offset:{left:(w=this.props.margin.left)!==null&&w!==void 0?w:0,top:(S=this.props.margin.top)!==null&&S!==void 0?S:0}})}return null}},{key:"componentDidUpdate",value:function(x){cv([Qt(x.children,Zn)],[Qt(this.props.children,Zn)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var x=Qt(this.props.children,Zn);if(x&&typeof x.props.shared=="boolean"){var P=x.props.shared?"axis":"item";return s.indexOf(P)>=0?P:o}return o}},{key:"getMouseInfo",value:function(x){if(!this.container)return null;var P=this.container,w=P.getBoundingClientRect(),S=AW(w),O={chartX:Math.round(x.pageX-S.left),chartY:Math.round(x.pageY-S.top)},_=w.width/P.offsetWidth||1,A=this.inRange(O.chartX,O.chartY,_);if(!A)return null;var j=this.state,E=j.xAxisMap,T=j.yAxisMap,N=this.getTooltipEventType(),M=L2(this.state,this.props.data,this.props.layout,A);if(N!=="axis"&&E&&T){var I=oa(E).scale,R=oa(T).scale,L=I&&I.invert?I.invert(O.chartX):null,$=R&&R.invert?R.invert(O.chartY):null;return z(z({},O),{},{xValue:L,yValue:$},M)}return M?z(z({},O),M):null}},{key:"inRange",value:function(x,P){var w=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,S=this.props.layout,O=x/w,_=P/w;if(S==="horizontal"||S==="vertical"){var A=this.state.offset,j=O>=A.left&&O<=A.left+A.width&&_>=A.top&&_<=A.top+A.height;return j?{x:O,y:_}:null}var E=this.state,T=E.angleAxisMap,N=E.radiusAxisMap;if(T&&N){var M=oa(T);return hb({x:O,y:_},M)}return null}},{key:"parseEventsOfWrapper",value:function(){var x=this.props.children,P=this.getTooltipEventType(),w=Qt(x,Zn),S={};w&&P==="axis"&&(w.props.trigger==="click"?S={onClick:this.handleClick}:S={onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu});var O=Sf(this.props,this.handleOuterEvent);return z(z({},O),S)}},{key:"addListener",value:function(){eh.on(th,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){eh.removeListener(th,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(x,P,w){for(var S=this.state.formattedGraphicalItems,O=0,_=S.length;O<_;O++){var A=S[O];if(A.item===x||A.props.key===x.key||P===jr(A.item.type)&&w===A.childIndex)return A}return null}},{key:"renderClipPath",value:function(){var x=this.clipPathId,P=this.state.offset,w=P.left,S=P.top,O=P.height,_=P.width;return C.createElement("defs",null,C.createElement("clipPath",{id:x},C.createElement("rect",{x:w,y:S,height:O,width:_})))}},{key:"getXScales",value:function(){var x=this.state.xAxisMap;return x?Object.entries(x).reduce(function(P,w){var S=R2(w,2),O=S[0],_=S[1];return z(z({},P),{},ee({},O,_.scale))},{}):null}},{key:"getYScales",value:function(){var x=this.state.yAxisMap;return x?Object.entries(x).reduce(function(P,w){var S=R2(w,2),O=S[0],_=S[1];return z(z({},P),{},ee({},O,_.scale))},{}):null}},{key:"getXScaleByAxisId",value:function(x){var P;return(P=this.state.xAxisMap)===null||P===void 0||(P=P[x])===null||P===void 0?void 0:P.scale}},{key:"getYScaleByAxisId",value:function(x){var P;return(P=this.state.yAxisMap)===null||P===void 0||(P=P[x])===null||P===void 0?void 0:P.scale}},{key:"getItemByXY",value:function(x){var P=this.state,w=P.formattedGraphicalItems,S=P.activeItem;if(w&&w.length)for(var O=0,_=w.length;O<_;O++){var A=w[O],j=A.props,E=A.item,T=E.type.defaultProps!==void 0?z(z({},E.type.defaultProps),E.props):E.props,N=jr(E.type);if(N==="Bar"){var M=(j.data||[]).find(function($){return uJ(x,$)});if(M)return{graphicalItem:A,payload:M}}else if(N==="RadialBar"){var I=(j.data||[]).find(function($){return hb(x,$)});if(I)return{graphicalItem:A,payload:I}}else if(Cd(A,S)||Ed(A,S)||mu(A,S)){var R=fee({graphicalItem:A,activeTooltipItem:S,itemData:T.data}),L=T.activeIndex===void 0?R:T.activeIndex;return{graphicalItem:z(z({},A),{},{childIndex:L}),payload:mu(A,S)?T.data[R]:A.props.data[R]}}}return null}},{key:"render",value:function(){var x=this;if(!iw(this))return null;var P=this.props,w=P.children,S=P.className,O=P.width,_=P.height,A=P.style,j=P.compact,E=P.title,T=P.desc,N=I2(P,Xae),M=re(N,!1);if(j)return C.createElement(d2,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},C.createElement(pv,ai({},M,{width:O,height:_,title:E,desc:T}),this.renderClipPath(),lw(w,this.renderMap)));if(this.props.accessibilityLayer){var I,R;M.tabIndex=(I=this.props.tabIndex)!==null&&I!==void 0?I:0,M.role=(R=this.props.role)!==null&&R!==void 0?R:"application",M.onKeyDown=function($){x.accessibilityManager.keyboardEvent($)},M.onFocus=function(){x.accessibilityManager.focus()}}var L=this.parseEventsOfWrapper();return C.createElement(d2,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},C.createElement("div",ai({className:ue("recharts-wrapper",S),style:z({position:"relative",cursor:"default",width:O,height:_},A)},L,{ref:function(D){x.container=D}}),C.createElement(pv,ai({},M,{width:O,height:_,title:E,desc:T,style:poe}),this.renderClipPath(),lw(w,this.renderMap)),this.renderLegend(),this.renderTooltip()))}}])}(k.Component);ee(h,"displayName",n),ee(h,"defaultProps",z({layout:"horizontal",stackOffset:"none",barCategoryGap:"10%",barGap:4,margin:{top:5,right:5,bottom:5,left:5},reverseStackOrder:!1,syncMethod:"index"},c)),ee(h,"getDerivedStateFromProps",function(g,v){var y=g.dataKey,x=g.data,P=g.children,w=g.width,S=g.height,O=g.layout,_=g.stackOffset,A=g.margin,j=v.dataStartIndex,E=v.dataEndIndex;if(v.updateId===void 0){var T=F2(g);return z(z(z({},T),{},{updateId:0},d(z(z({props:g},T),{},{updateId:0}),v)),{},{prevDataKey:y,prevData:x,prevWidth:w,prevHeight:S,prevLayout:O,prevStackOffset:_,prevMargin:A,prevChildren:P})}if(y!==v.prevDataKey||x!==v.prevData||w!==v.prevWidth||S!==v.prevHeight||O!==v.prevLayout||_!==v.prevStackOffset||!mi(A,v.prevMargin)){var N=F2(g),M={chartX:v.chartX,chartY:v.chartY,isTooltipActive:v.isTooltipActive},I=z(z({},L2(v,x,O)),{},{updateId:v.updateId+1}),R=z(z(z({},N),M),I);return z(z(z({},R),d(z({props:g},R),v)),{},{prevDataKey:y,prevData:x,prevWidth:w,prevHeight:S,prevLayout:O,prevStackOffset:_,prevMargin:A,prevChildren:P})}if(!cv(P,v.prevChildren)){var L,$,D,H,W=Qt(P,Vi),G=W&&(L=($=W.props)===null||$===void 0?void 0:$.startIndex)!==null&&L!==void 0?L:j,Z=W&&(D=(H=W.props)===null||H===void 0?void 0:H.endIndex)!==null&&D!==void 0?D:E,ie=G!==j||Z!==E,ve=!te(x),Pe=ve&&!ie?v.updateId:v.updateId+1;return z(z({updateId:Pe},d(z(z({props:g},v),{},{updateId:Pe,dataStartIndex:G,dataEndIndex:Z}),v)),{},{prevChildren:P,dataStartIndex:G,dataEndIndex:Z})}return null}),ee(h,"renderActiveDot",function(g,v,y){var x;return k.isValidElement(g)?x=k.cloneElement(g,v):oe(g)?x=g(v):x=C.createElement(Ad,v),C.createElement(ye,{className:"recharts-active-dot",key:y},x)});var m=k.forwardRef(function(v,y){return C.createElement(h,ai({},v,{ref:y}))});return m.displayName=h.displayName,m},e1=Fd({chartName:"LineChart",GraphicalChild:Rt,axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt}],formatAxisMap:jd}),GS=Fd({chartName:"BarChart",GraphicalChild:Vr,defaultTooltipEventType:"axis",validateTooltipEventTypes:["axis","item"],axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt}],formatAxisMap:jd}),Sp=Fd({chartName:"AreaChart",GraphicalChild:ft,axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt}],formatAxisMap:jd}),Poe=Fd({chartName:"ComposedChart",GraphicalChild:[Rt,ft,Vr,Dd],axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt},{axisType:"zAxis",AxisComp:Id}],formatAxisMap:jd});const Soe={light:"",dark:".dark"},US=k.createContext(null);function WS(){const e=k.useContext(US);if(!e)throw new Error("useChart must be used within a <ChartContainer />");return e}const Fn=k.forwardRef(({id:e,className:t,children:n,config:r,...a},o)=>{const i=k.useId(),s=`chart-${e||i.replace(/:/g,"")}`;return b.jsx(US.Provider,{value:{config:r},children:b.jsxs("div",{"data-chart":s,ref:o,className:Oe("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",t),...a,children:[b.jsx(Ooe,{id:s,config:r}),b.jsx(wW,{children:n})]})})});Fn.displayName="Chart";const Ooe=({id:e,config:t})=>{const n=Object.entries(t).filter(([r,a])=>a.theme||a.color);return n.length?b.jsx("style",{dangerouslySetInnerHTML:{__html:Object.entries(Soe).map(([r,a])=>`
+            A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t,",").concat(n+a-s*h," Z")}else p="M ".concat(t,",").concat(n," h ").concat(r," v ").concat(a," h ").concat(-r," Z");return p},SJ=function(t,n){if(!t||!n)return!1;var r=t.x,a=t.y,o=n.x,i=n.y,s=n.width,l=n.height;if(Math.abs(s)>0&&Math.abs(l)>0){var u=Math.min(o,o+s),p=Math.max(o,o+s),c=Math.min(i,i+l),f=Math.max(i,i+l);return r>=u&&r<=p&&a>=c&&a<=f}return!1},OJ={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},Ug=function(t){var n=Vb(Vb({},OJ),t),r=k.useRef(),a=k.useState(-1),o=hJ(a,2),i=o[0],s=o[1];k.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var P=r.current.getTotalLength();P&&s(P)}catch{}},[]);var l=n.x,u=n.y,p=n.width,c=n.height,f=n.radius,d=n.className,h=n.animationEasing,m=n.animationDuration,g=n.animationBegin,v=n.isAnimationActive,y=n.isUpdateAnimationActive;if(l!==+l||u!==+u||p!==+p||c!==+c||p===0||c===0)return null;var x=ue("recharts-rectangle",d);return y?A.createElement(Vn,{canBegin:i>0,from:{width:p,height:c,x:l,y:u},to:{width:p,height:c,x:l,y:u},duration:m,animationEasing:h,isActive:y},function(P){var w=P.width,S=P.height,O=P.x,_=P.y;return A.createElement(Vn,{canBegin:i>0,from:"0px ".concat(i===-1?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:g,duration:m,isActive:v,easing:h},A.createElement("path",nf({},re(n,!0),{className:x,d:Kb(O,_,w,S,f),ref:r})))}):A.createElement("path",nf({},re(n,!0),{className:x,d:Kb(l,u,p,c,f)}))};function uv(){return uv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},uv.apply(this,arguments)}var Cd=function(t){var n=t.cx,r=t.cy,a=t.r,o=t.className,i=ue("recharts-dot",o);return n===+n&&r===+r&&a===+a?k.createElement("circle",uv({},re(t,!1),Pp(t),{className:i,cx:n,cy:r,r:a})):null};function pu(e){"@babel/helpers - typeof";return pu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pu(e)}var kJ=["x","y","top","left","width","height","className"];function cv(){return cv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},cv.apply(this,arguments)}function Xb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function _J(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Xb(Object(n),!0).forEach(function(r){CJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function CJ(e,t,n){return t=AJ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function AJ(e){var t=EJ(e,"string");return pu(t)=="symbol"?t:t+""}function EJ(e,t){if(pu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(pu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function TJ(e,t){if(e==null)return{};var n=jJ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jJ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var $J=function(t,n,r,a,o,i){return"M".concat(t,",").concat(o,"v").concat(a,"M").concat(i,",").concat(n,"h").concat(r)},NJ=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,o=a===void 0?0:a,i=t.top,s=i===void 0?0:i,l=t.left,u=l===void 0?0:l,p=t.width,c=p===void 0?0:p,f=t.height,d=f===void 0?0:f,h=t.className,m=TJ(t,kJ),g=_J({x:r,y:o,top:s,left:u,width:c,height:d},m);return!V(r)||!V(o)||!V(c)||!V(d)||!V(s)||!V(u)?null:A.createElement("path",cv({},re(g,!0),{className:ue("recharts-cross",h),d:$J(r,o,c,d,s,u)}))},MJ=i7,RJ=MJ(Object.getPrototypeOf,Object),IJ=RJ,DJ=Ur,LJ=IJ,FJ=Wr,zJ="[object Object]",BJ=Function.prototype,HJ=Object.prototype,qP=BJ.toString,GJ=HJ.hasOwnProperty,UJ=qP.call(Object);function WJ(e){if(!FJ(e)||DJ(e)!=zJ)return!1;var t=LJ(e);if(t===null)return!0;var n=GJ.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&qP.call(n)==UJ}var qJ=WJ;const VJ=Ae(qJ);var KJ=Ur,XJ=Wr,YJ="[object Boolean]";function QJ(e){return e===!0||e===!1||XJ(e)&&KJ(e)==YJ}var ZJ=QJ;const JJ=Ae(ZJ);function fu(e){"@babel/helpers - typeof";return fu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fu(e)}function rf(){return rf=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},rf.apply(this,arguments)}function eee(e,t){return aee(e)||ree(e,t)||nee(e,t)||tee()}function tee(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function nee(e,t){if(e){if(typeof e=="string")return Yb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yb(e,t)}}function Yb(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function ree(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function aee(e){if(Array.isArray(e))return e}function Qb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Zb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Qb(Object(n),!0).forEach(function(r){oee(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Qb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function oee(e,t,n){return t=iee(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function iee(e){var t=see(e,"string");return fu(t)=="symbol"?t:t+""}function see(e,t){if(fu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(fu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Jb=function(t,n,r,a,o){var i=r-a,s;return s="M ".concat(t,",").concat(n),s+="L ".concat(t+r,",").concat(n),s+="L ".concat(t+r-i/2,",").concat(n+o),s+="L ".concat(t+r-i/2-a,",").concat(n+o),s+="L ".concat(t,",").concat(n," Z"),s},lee={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},uee=function(t){var n=Zb(Zb({},lee),t),r=k.useRef(),a=k.useState(-1),o=eee(a,2),i=o[0],s=o[1];k.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var x=r.current.getTotalLength();x&&s(x)}catch{}},[]);var l=n.x,u=n.y,p=n.upperWidth,c=n.lowerWidth,f=n.height,d=n.className,h=n.animationEasing,m=n.animationDuration,g=n.animationBegin,v=n.isUpdateAnimationActive;if(l!==+l||u!==+u||p!==+p||c!==+c||f!==+f||p===0&&c===0||f===0)return null;var y=ue("recharts-trapezoid",d);return v?A.createElement(Vn,{canBegin:i>0,from:{upperWidth:0,lowerWidth:0,height:f,x:l,y:u},to:{upperWidth:p,lowerWidth:c,height:f,x:l,y:u},duration:m,animationEasing:h,isActive:v},function(x){var P=x.upperWidth,w=x.lowerWidth,S=x.height,O=x.x,_=x.y;return A.createElement(Vn,{canBegin:i>0,from:"0px ".concat(i===-1?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:g,duration:m,easing:h},A.createElement("path",rf({},re(n,!0),{className:y,d:Jb(O,_,P,w,S),ref:r})))}):A.createElement("g",null,A.createElement("path",rf({},re(n,!0),{className:y,d:Jb(l,u,p,c,f)})))},cee=["option","shapeType","propTransformer","activeClassName","isActive"];function du(e){"@babel/helpers - typeof";return du=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},du(e)}function pee(e,t){if(e==null)return{};var n=fee(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fee(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function e2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function af(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?e2(Object(n),!0).forEach(function(r){dee(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):e2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function dee(e,t,n){return t=mee(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mee(e){var t=hee(e,"string");return du(t)=="symbol"?t:t+""}function hee(e,t){if(du(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(du(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function vee(e,t){return af(af({},t),e)}function yee(e,t){return e==="symbols"}function t2(e){var t=e.shapeType,n=e.elementProps;switch(t){case"rectangle":return A.createElement(Ug,n);case"trapezoid":return A.createElement(uee,n);case"sector":return A.createElement(RP,n);case"symbols":if(yee(t))return A.createElement(md,n);break;default:return null}}function gee(e){return k.isValidElement(e)?e.props:e}function pv(e){var t=e.option,n=e.shapeType,r=e.propTransformer,a=r===void 0?vee:r,o=e.activeClassName,i=o===void 0?"recharts-active-shape":o,s=e.isActive,l=pee(e,cee),u;if(k.isValidElement(t))u=k.cloneElement(t,af(af({},l),gee(t)));else if(oe(t))u=t(l);else if(VJ(t)&&!JJ(t)){var p=a(t,l);u=A.createElement(t2,{shapeType:n,elementProps:p})}else{var c=l;u=A.createElement(t2,{shapeType:n,elementProps:c})}return s?A.createElement(ye,{className:i},u):u}function Ad(e,t){return t!=null&&"trapezoids"in e.props}function Ed(e,t){return t!=null&&"sectors"in e.props}function mu(e,t){return t!=null&&"points"in e.props}function xee(e,t){var n,r,a=e.x===(t==null||(n=t.labelViewBox)===null||n===void 0?void 0:n.x)||e.x===t.x,o=e.y===(t==null||(r=t.labelViewBox)===null||r===void 0?void 0:r.y)||e.y===t.y;return a&&o}function wee(e,t){var n=e.endAngle===t.endAngle,r=e.startAngle===t.startAngle;return n&&r}function bee(e,t){var n=e.x===t.x,r=e.y===t.y,a=e.z===t.z;return n&&r&&a}function Pee(e,t){var n;return Ad(e,t)?n=xee:Ed(e,t)?n=wee:mu(e,t)&&(n=bee),n}function See(e,t){var n;return Ad(e,t)?n="trapezoids":Ed(e,t)?n="sectors":mu(e,t)&&(n="points"),n}function Oee(e,t){if(Ad(e,t)){var n;return(n=t.tooltipPayload)===null||n===void 0||(n=n[0])===null||n===void 0||(n=n.payload)===null||n===void 0?void 0:n.payload}if(Ed(e,t)){var r;return(r=t.tooltipPayload)===null||r===void 0||(r=r[0])===null||r===void 0||(r=r.payload)===null||r===void 0?void 0:r.payload}return mu(e,t)?t.payload:{}}function kee(e){var t=e.activeTooltipItem,n=e.graphicalItem,r=e.itemData,a=See(n,t),o=Oee(n,t),i=r.filter(function(l,u){var p=ko(o,l),c=n.props[a].filter(function(h){var m=Pee(n,t);return m(h,t)}),f=n.props[a].indexOf(c[c.length-1]),d=u===f;return p&&d}),s=r.indexOf(i[i.length-1]);return s}var _ee=Math.ceil,Cee=Math.max;function Aee(e,t,n,r){for(var a=-1,o=Cee(_ee((t-e)/(n||1)),0),i=Array(o);o--;)i[r?o:++a]=e,e+=n;return i}var Eee=Aee,Tee=k7,n2=1/0,jee=17976931348623157e292;function $ee(e){if(!e)return e===0?e:0;if(e=Tee(e),e===n2||e===-n2){var t=e<0?-1:1;return t*jee}return e===e?e:0}var VP=$ee,Nee=Eee,Mee=yd,Qm=VP;function Ree(e){return function(t,n,r){return r&&typeof r!="number"&&Mee(t,n,r)&&(n=r=void 0),t=Qm(t),n===void 0?(n=t,t=0):n=Qm(n),r=r===void 0?t<n?1:-1:Qm(r),Nee(t,n,r,e)}}var Iee=Ree,Dee=Iee,Lee=Dee(),Fee=Lee;const of=Ae(Fee);function hu(e){"@babel/helpers - typeof";return hu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},hu(e)}function r2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function a2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?r2(Object(n),!0).forEach(function(r){KP(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function KP(e,t,n){return t=zee(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function zee(e){var t=Bee(e,"string");return hu(t)=="symbol"?t:t+""}function Bee(e,t){if(hu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(hu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Hee=["Webkit","Moz","O","ms"],Gee=function(t,n){var r=t.replace(/(\w)/,function(o){return o.toUpperCase()}),a=Hee.reduce(function(o,i){return a2(a2({},o),{},KP({},i+r,n))},{});return a[t]=n,a};function qi(e){"@babel/helpers - typeof";return qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qi(e)}function sf(){return sf=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},sf.apply(this,arguments)}function o2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Zm(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?o2(Object(n),!0).forEach(function(r){Xt(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Uee(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,YP(r.key),r)}}function Wee(e,t,n){return t&&i2(e.prototype,t),n&&i2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function qee(e,t,n){return t=lf(t),Vee(e,XP()?Reflect.construct(t,n||[],lf(e).constructor):t.apply(e,n))}function Vee(e,t){if(t&&(qi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Kee(e)}function Kee(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function XP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(XP=function(){return!!e})()}function lf(e){return lf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},lf(e)}function Xee(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&fv(e,t)}function fv(e,t){return fv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},fv(e,t)}function Xt(e,t,n){return t=YP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function YP(e){var t=Yee(e,"string");return qi(t)=="symbol"?t:t+""}function Yee(e,t){if(qi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(qi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Qee=function(t){var n=t.data,r=t.startIndex,a=t.endIndex,o=t.x,i=t.width,s=t.travellerWidth;if(!n||!n.length)return{};var l=n.length,u=dl().domain(of(0,l)).range([o,o+i-s]),p=u.domain().map(function(c){return u(c)});return{isTextActive:!1,isSlideMoving:!1,isTravellerMoving:!1,isTravellerFocused:!1,startX:u(r),endX:u(a),scale:u,scaleValues:p}},s2=function(t){return t.changedTouches&&!!t.changedTouches.length},Vi=function(e){function t(n){var r;return Uee(this,t),r=qee(this,t,[n]),Xt(r,"handleDrag",function(a){r.leaveTimer&&(clearTimeout(r.leaveTimer),r.leaveTimer=null),r.state.isTravellerMoving?r.handleTravellerMove(a):r.state.isSlideMoving&&r.handleSlideDrag(a)}),Xt(r,"handleTouchMove",function(a){a.changedTouches!=null&&a.changedTouches.length>0&&r.handleDrag(a.changedTouches[0])}),Xt(r,"handleDragEnd",function(){r.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var a=r.props,o=a.endIndex,i=a.onDragEnd,s=a.startIndex;i==null||i({endIndex:o,startIndex:s})}),r.detachDragEndListener()}),Xt(r,"handleLeaveWrapper",function(){(r.state.isTravellerMoving||r.state.isSlideMoving)&&(r.leaveTimer=window.setTimeout(r.handleDragEnd,r.props.leaveTimeOut))}),Xt(r,"handleEnterSlideOrTraveller",function(){r.setState({isTextActive:!0})}),Xt(r,"handleLeaveSlideOrTraveller",function(){r.setState({isTextActive:!1})}),Xt(r,"handleSlideDragStart",function(a){var o=s2(a)?a.changedTouches[0]:a;r.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:o.pageX}),r.attachDragEndListener()}),r.travellerDragStartHandlers={startX:r.handleTravellerDragStart.bind(r,"startX"),endX:r.handleTravellerDragStart.bind(r,"endX")},r.state={},r}return Xee(t,e),Wee(t,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(r){var a=r.startX,o=r.endX,i=this.state.scaleValues,s=this.props,l=s.gap,u=s.data,p=u.length-1,c=Math.min(a,o),f=Math.max(a,o),d=t.getIndexInRange(i,c),h=t.getIndexInRange(i,f);return{startIndex:d-d%l,endIndex:h===p?p:h-h%l}}},{key:"getTextOfTick",value:function(r){var a=this.props,o=a.data,i=a.tickFormatter,s=a.dataKey,l=st(o[r],s,r);return oe(i)?i(l,r):l}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(r){var a=this.state,o=a.slideMoveStartX,i=a.startX,s=a.endX,l=this.props,u=l.x,p=l.width,c=l.travellerWidth,f=l.startIndex,d=l.endIndex,h=l.onChange,m=r.pageX-o;m>0?m=Math.min(m,u+p-c-s,u+p-c-i):m<0&&(m=Math.max(m,u-i,u-s));var g=this.getIndex({startX:i+m,endX:s+m});(g.startIndex!==f||g.endIndex!==d)&&h&&h(g),this.setState({startX:i+m,endX:s+m,slideMoveStartX:r.pageX})}},{key:"handleTravellerDragStart",value:function(r,a){var o=s2(a)?a.changedTouches[0]:a;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:r,brushMoveStartX:o.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(r){var a=this.state,o=a.brushMoveStartX,i=a.movingTravellerId,s=a.endX,l=a.startX,u=this.state[i],p=this.props,c=p.x,f=p.width,d=p.travellerWidth,h=p.onChange,m=p.gap,g=p.data,v={startX:this.state.startX,endX:this.state.endX},y=r.pageX-o;y>0?y=Math.min(y,c+f-d-u):y<0&&(y=Math.max(y,c-u)),v[i]=u+y;var x=this.getIndex(v),P=x.startIndex,w=x.endIndex,S=function(){var _=g.length-1;return i==="startX"&&(s>l?P%m===0:w%m===0)||s<l&&w===_||i==="endX"&&(s>l?w%m===0:P%m===0)||s>l&&w===_};this.setState(Xt(Xt({},i,u+y),"brushMoveStartX",r.pageX),function(){h&&S()&&h(x)})}},{key:"handleTravellerMoveKeyboard",value:function(r,a){var o=this,i=this.state,s=i.scaleValues,l=i.startX,u=i.endX,p=this.state[a],c=s.indexOf(p);if(c!==-1){var f=c+r;if(!(f===-1||f>=s.length)){var d=s[f];a==="startX"&&d>=u||a==="endX"&&d<=l||this.setState(Xt({},a,d),function(){o.props.onChange(o.getIndex({startX:o.state.startX,endX:o.state.endX}))})}}}},{key:"renderBackground",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.fill,u=r.stroke;return A.createElement("rect",{stroke:u,fill:l,x:a,y:o,width:i,height:s})}},{key:"renderPanorama",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.data,u=r.children,p=r.padding,c=k.Children.only(u);return c?A.cloneElement(c,{x:a,y:o,width:i,height:s,margin:p,compact:!0,data:l}):null}},{key:"renderTravellerLayer",value:function(r,a){var o,i,s=this,l=this.props,u=l.y,p=l.travellerWidth,c=l.height,f=l.traveller,d=l.ariaLabel,h=l.data,m=l.startIndex,g=l.endIndex,v=Math.max(r,this.props.x),y=Zm(Zm({},re(this.props,!1)),{},{x:v,y:u,width:p,height:c}),x=d||"Min value: ".concat((o=h[m])===null||o===void 0?void 0:o.name,", Max value: ").concat((i=h[g])===null||i===void 0?void 0:i.name);return A.createElement(ye,{tabIndex:0,role:"slider","aria-label":x,"aria-valuenow":r,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[a],onTouchStart:this.travellerDragStartHandlers[a],onKeyDown:function(w){["ArrowLeft","ArrowRight"].includes(w.key)&&(w.preventDefault(),w.stopPropagation(),s.handleTravellerMoveKeyboard(w.key==="ArrowRight"?1:-1,a))},onFocus:function(){s.setState({isTravellerFocused:!0})},onBlur:function(){s.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},t.renderTraveller(f,y))}},{key:"renderSlide",value:function(r,a){var o=this.props,i=o.y,s=o.height,l=o.stroke,u=o.travellerWidth,p=Math.min(r,a)+u,c=Math.max(Math.abs(a-r)-u,0);return A.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:l,fillOpacity:.2,x:p,y:i,width:c,height:s})}},{key:"renderText",value:function(){var r=this.props,a=r.startIndex,o=r.endIndex,i=r.y,s=r.height,l=r.travellerWidth,u=r.stroke,p=this.state,c=p.startX,f=p.endX,d=5,h={pointerEvents:"none",fill:u};return A.createElement(ye,{className:"recharts-brush-texts"},A.createElement(Ip,sf({textAnchor:"end",verticalAnchor:"middle",x:Math.min(c,f)-d,y:i+s/2},h),this.getTextOfTick(a)),A.createElement(Ip,sf({textAnchor:"start",verticalAnchor:"middle",x:Math.max(c,f)+l+d,y:i+s/2},h),this.getTextOfTick(o)))}},{key:"render",value:function(){var r=this.props,a=r.data,o=r.className,i=r.children,s=r.x,l=r.y,u=r.width,p=r.height,c=r.alwaysShowText,f=this.state,d=f.startX,h=f.endX,m=f.isTextActive,g=f.isSlideMoving,v=f.isTravellerMoving,y=f.isTravellerFocused;if(!a||!a.length||!V(s)||!V(l)||!V(u)||!V(p)||u<=0||p<=0)return null;var x=ue("recharts-brush",o),P=A.Children.count(i)===1,w=Gee("userSelect","none");return A.createElement(ye,{className:x,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:w},this.renderBackground(),P&&this.renderPanorama(),this.renderSlide(d,h),this.renderTravellerLayer(d,"startX"),this.renderTravellerLayer(h,"endX"),(m||g||v||y||c)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(r){var a=r.x,o=r.y,i=r.width,s=r.height,l=r.stroke,u=Math.floor(o+s/2)-1;return A.createElement(A.Fragment,null,A.createElement("rect",{x:a,y:o,width:i,height:s,fill:l,stroke:"none"}),A.createElement("line",{x1:a+1,y1:u,x2:a+i-1,y2:u,fill:"none",stroke:"#fff"}),A.createElement("line",{x1:a+1,y1:u+2,x2:a+i-1,y2:u+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(r,a){var o;return A.isValidElement(r)?o=A.cloneElement(r,a):oe(r)?o=r(a):o=t.renderDefaultTraveller(a),o}},{key:"getDerivedStateFromProps",value:function(r,a){var o=r.data,i=r.width,s=r.x,l=r.travellerWidth,u=r.updateId,p=r.startIndex,c=r.endIndex;if(o!==a.prevData||u!==a.prevUpdateId)return Zm({prevData:o,prevTravellerWidth:l,prevUpdateId:u,prevX:s,prevWidth:i},o&&o.length?Qee({data:o,width:i,x:s,travellerWidth:l,startIndex:p,endIndex:c}):{scale:null,scaleValues:null});if(a.scale&&(i!==a.prevWidth||s!==a.prevX||l!==a.prevTravellerWidth)){a.scale.range([s,s+i-l]);var f=a.scale.domain().map(function(d){return a.scale(d)});return{prevData:o,prevTravellerWidth:l,prevUpdateId:u,prevX:s,prevWidth:i,startX:a.scale(r.startIndex),endX:a.scale(r.endIndex),scaleValues:f}}return null}},{key:"getIndexInRange",value:function(r,a){for(var o=r.length,i=0,s=o-1;s-i>1;){var l=Math.floor((i+s)/2);r[l]>a?s=l:i=l}return a>=r[s]?s:i}}])}(k.PureComponent);Xt(Vi,"displayName","Brush");Xt(Vi,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var Zee=hg;function Jee(e,t){var n;return Zee(e,function(r,a,o){return n=t(r,a,o),!n}),!!n}var ete=Jee,tte=Z8,nte=Ia,rte=ete,ate=Vt,ote=yd;function ite(e,t,n){var r=ate(e)?tte:rte;return n&&ote(e,t,n)&&(t=void 0),r(e,nte(t))}var ste=ite;const lte=Ae(ste);var mr=function(t,n){var r=t.alwaysShow,a=t.ifOverflow;return r&&(a="extendDomain"),a===n},l2=w7;function ute(e,t,n){t=="__proto__"&&l2?l2(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var cte=ute,pte=cte,fte=g7,dte=Ia;function mte(e,t){var n={};return t=dte(t),fte(e,function(r,a,o){pte(n,a,t(r,a,o))}),n}var hte=mte;const vte=Ae(hte);function yte(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}var gte=yte,xte=hg;function wte(e,t){var n=!0;return xte(e,function(r,a,o){return n=!!t(r,a,o),n}),n}var bte=wte,Pte=gte,Ste=bte,Ote=Ia,kte=Vt,_te=yd;function Cte(e,t,n){var r=kte(e)?Pte:Ste;return n&&_te(e,t,n)&&(t=void 0),r(e,Ote(t))}var Ate=Cte;const QP=Ae(Ate);var Ete=["x","y"];function vu(e){"@babel/helpers - typeof";return vu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},vu(e)}function dv(){return dv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},dv.apply(this,arguments)}function u2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ys(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?u2(Object(n),!0).forEach(function(r){Tte(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Tte(e,t,n){return t=jte(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function jte(e){var t=$te(e,"string");return vu(t)=="symbol"?t:t+""}function $te(e,t){if(vu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(vu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Nte(e,t){if(e==null)return{};var n=Mte(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mte(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Rte(e,t){var n=e.x,r=e.y,a=Nte(e,Ete),o="".concat(n),i=parseInt(o,10),s="".concat(r),l=parseInt(s,10),u="".concat(t.height||a.height),p=parseInt(u,10),c="".concat(t.width||a.width),f=parseInt(c,10);return Ys(Ys(Ys(Ys(Ys({},t),a),i?{x:i}:{}),l?{y:l}:{}),{},{height:p,width:f,name:t.name,radius:t.radius})}function c2(e){return A.createElement(pv,dv({shapeType:"rectangle",propTransformer:Rte,activeClassName:"recharts-active-bar"},e))}var Ite=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(r,a){if(typeof t=="number")return t;var o=V(r)||JM(r);return o?t(r,a):(o||Co(),n)}},Dte=["value","background"],ZP;function Ki(e){"@babel/helpers - typeof";return Ki=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ki(e)}function Lte(e,t){if(e==null)return{};var n=Fte(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fte(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function uf(){return uf=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},uf.apply(this,arguments)}function p2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Je(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?p2(Object(n),!0).forEach(function(r){ma(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function zte(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,eS(r.key),r)}}function Bte(e,t,n){return t&&f2(e.prototype,t),n&&f2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Hte(e,t,n){return t=cf(t),Gte(e,JP()?Reflect.construct(t,n||[],cf(e).constructor):t.apply(e,n))}function Gte(e,t){if(t&&(Ki(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Ute(e)}function Ute(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function JP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(JP=function(){return!!e})()}function cf(e){return cf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},cf(e)}function Wte(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&mv(e,t)}function mv(e,t){return mv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},mv(e,t)}function ma(e,t,n){return t=eS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function eS(e){var t=qte(e,"string");return Ki(t)=="symbol"?t:t+""}function qte(e,t){if(Ki(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ki(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Vr=function(e){function t(){var n;zte(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=Hte(this,t,[].concat(a)),ma(n,"state",{isAnimationFinished:!1}),ma(n,"id",$o("recharts-bar-")),ma(n,"handleAnimationEnd",function(){var i=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),i&&i()}),ma(n,"handleAnimationStart",function(){var i=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),i&&i()}),n}return Wte(t,e),Bte(t,[{key:"renderRectanglesStatically",value:function(r){var a=this,o=this.props,i=o.shape,s=o.dataKey,l=o.activeIndex,u=o.activeBar,p=re(this.props,!1);return r&&r.map(function(c,f){var d=f===l,h=d?u:i,m=Je(Je(Je({},p),c),{},{isActive:d,option:h,index:f,dataKey:s,onAnimationStart:a.handleAnimationStart,onAnimationEnd:a.handleAnimationEnd});return A.createElement(ye,uf({className:"recharts-bar-rectangle"},Fl(a.props,c,f),{key:"rectangle-".concat(c==null?void 0:c.x,"-").concat(c==null?void 0:c.y,"-").concat(c==null?void 0:c.value,"-").concat(f)}),A.createElement(c2,m))})}},{key:"renderRectanglesWithAnimation",value:function(){var r=this,a=this.props,o=a.data,i=a.layout,s=a.isAnimationActive,l=a.animationBegin,u=a.animationDuration,p=a.animationEasing,c=a.animationId,f=this.state.prevData;return A.createElement(Vn,{begin:l,duration:u,isActive:s,easing:p,from:{t:0},to:{t:1},key:"bar-".concat(c),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(d){var h=d.t,m=o.map(function(g,v){var y=f&&f[v];if(y){var x=Xe(y.x,g.x),P=Xe(y.y,g.y),w=Xe(y.width,g.width),S=Xe(y.height,g.height);return Je(Je({},g),{},{x:x(h),y:P(h),width:w(h),height:S(h)})}if(i==="horizontal"){var O=Xe(0,g.height),_=O(h);return Je(Je({},g),{},{y:g.y+g.height-_,height:_})}var C=Xe(0,g.width),j=C(h);return Je(Je({},g),{},{width:j})});return A.createElement(ye,null,r.renderRectanglesStatically(m))})}},{key:"renderRectangles",value:function(){var r=this.props,a=r.data,o=r.isAnimationActive,i=this.state.prevData;return o&&a&&a.length&&(!i||!ko(i,a))?this.renderRectanglesWithAnimation():this.renderRectanglesStatically(a)}},{key:"renderBackground",value:function(){var r=this,a=this.props,o=a.data,i=a.dataKey,s=a.activeIndex,l=re(this.props.background,!1);return o.map(function(u,p){u.value;var c=u.background,f=Lte(u,Dte);if(!c)return null;var d=Je(Je(Je(Je(Je({},f),{},{fill:"#eee"},c),l),Fl(r.props,u,p)),{},{onAnimationStart:r.handleAnimationStart,onAnimationEnd:r.handleAnimationEnd,dataKey:i,index:p,className:"recharts-bar-background-rectangle"});return A.createElement(c2,uf({key:"background-bar-".concat(p),option:r.props.background,isActive:p===s},d))})}},{key:"renderErrorBar",value:function(r,a){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var o=this.props,i=o.data,s=o.xAxis,l=o.yAxis,u=o.layout,p=o.children,c=qt(p,Es);if(!c)return null;var f=u==="vertical"?i[0].height/2:i[0].width/2,d=function(g,v){var y=Array.isArray(g.value)?g.value[1]:g.value;return{x:g.x,y:g.y,value:y,errorVal:st(g,v)}},h={clipPath:r?"url(#clipPath-".concat(a,")"):null};return A.createElement(ye,h,c.map(function(m){return A.cloneElement(m,{key:"error-bar-".concat(a,"-").concat(m.props.dataKey),data:i,xAxis:s,yAxis:l,layout:u,offset:f,dataPointFormatter:d})}))}},{key:"render",value:function(){var r=this.props,a=r.hide,o=r.data,i=r.className,s=r.xAxis,l=r.yAxis,u=r.left,p=r.top,c=r.width,f=r.height,d=r.isAnimationActive,h=r.background,m=r.id;if(a||!o||!o.length)return null;var g=this.state.isAnimationFinished,v=ue("recharts-bar",i),y=s&&s.allowDataOverflow,x=l&&l.allowDataOverflow,P=y||x,w=te(m)?this.id:m;return A.createElement(ye,{className:v},y||x?A.createElement("defs",null,A.createElement("clipPath",{id:"clipPath-".concat(w)},A.createElement("rect",{x:y?u:u-c/2,y:x?p:p-f/2,width:y?c:c*2,height:x?f:f*2}))):null,A.createElement(ye,{className:"recharts-bar-rectangles",clipPath:P?"url(#clipPath-".concat(w,")"):null},h?this.renderBackground():null,this.renderRectangles()),this.renderErrorBar(P,w),(!d||g)&&dr.renderCallByParent(this.props,o))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curData:r.data,prevData:a.curData}:r.data!==a.curData?{curData:r.data}:null}}])}(k.PureComponent);ZP=Vr;ma(Vr,"displayName","Bar");ma(Vr,"defaultProps",{xAxisId:0,yAxisId:0,legendType:"rect",minPointSize:0,hide:!1,data:[],layout:"vertical",activeBar:!1,isAnimationActive:!Da.isSsr,animationBegin:0,animationDuration:400,animationEasing:"ease"});ma(Vr,"getComposedData",function(e){var t=e.props,n=e.item,r=e.barPosition,a=e.bandSize,o=e.xAxis,i=e.yAxis,s=e.xAxisTicks,l=e.yAxisTicks,u=e.stackedData,p=e.dataStartIndex,c=e.displayedData,f=e.offset,d=SY(r,n);if(!d)return null;var h=t.layout,m=n.type.defaultProps,g=m!==void 0?Je(Je({},m),n.props):n.props,v=g.dataKey,y=g.children,x=g.minPointSize,P=h==="horizontal"?i:o,w=u?P.scale.domain():null,S=jY({numericAxis:P}),O=qt(y,gg),_=c.map(function(C,j){var E,T,N,M,I,R;u?E=OY(u[p+j],w):(E=st(C,v),Array.isArray(E)||(E=[S,E]));var L=Ite(x,ZP.defaultProps.minPointSize)(E[1],j);if(h==="horizontal"){var $,D=[i.scale(E[0]),i.scale(E[1])],H=D[0],W=D[1];T=pb({axis:o,ticks:s,bandSize:a,offset:d.offset,entry:C,index:j}),N=($=W??H)!==null&&$!==void 0?$:void 0,M=d.size;var G=H-W;if(I=Number.isNaN(G)?0:G,R={x:T,y:i.y,width:M,height:i.height},Math.abs(L)>0&&Math.abs(I)<Math.abs(L)){var Z=Dn(I||L)*(Math.abs(L)-Math.abs(I));N-=Z,I+=Z}}else{var ie=[o.scale(E[0]),o.scale(E[1])],ve=ie[0],Pe=ie[1];if(T=ve,N=pb({axis:i,ticks:l,bandSize:a,offset:d.offset,entry:C,index:j}),M=Pe-ve,I=d.size,R={x:o.x,y:N,width:o.width,height:I},Math.abs(L)>0&&Math.abs(M)<Math.abs(L)){var J=Dn(M||L)*(Math.abs(L)-Math.abs(M));M+=J}}return Je(Je(Je({},C),{},{x:T,y:N,width:M,height:I,value:u?E:E[1],payload:C,background:R},O&&O[j]&&O[j].props),{},{tooltipPayload:[$P(n,C)],tooltipPosition:{x:T+M/2,y:N+I/2}})});return Je({data:_,layout:h},f)});function yu(e){"@babel/helpers - typeof";return yu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},yu(e)}function Vte(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,tS(r.key),r)}}function Kte(e,t,n){return t&&d2(e.prototype,t),n&&d2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function m2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Nn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?m2(Object(n),!0).forEach(function(r){Td(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Td(e,t,n){return t=tS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function tS(e){var t=Xte(e,"string");return yu(t)=="symbol"?t:t+""}function Xte(e,t){if(yu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(yu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var jd=function(t,n,r,a,o){var i=t.width,s=t.height,l=t.layout,u=t.children,p=Object.keys(n),c={left:r.left,leftMirror:r.left,right:i-r.right,rightMirror:i-r.right,top:r.top,topMirror:r.top,bottom:s-r.bottom,bottomMirror:s-r.bottom},f=!!Qt(u,Vr);return p.reduce(function(d,h){var m=n[h],g=m.orientation,v=m.domain,y=m.padding,x=y===void 0?{}:y,P=m.mirror,w=m.reversed,S="".concat(g).concat(P?"Mirror":""),O,_,C,j,E;if(m.type==="number"&&(m.padding==="gap"||m.padding==="no-gap")){var T=v[1]-v[0],N=1/0,M=m.categoricalDomain.sort(rR);if(M.forEach(function(ie,ve){ve>0&&(N=Math.min((ie||0)-(M[ve-1]||0),N))}),Number.isFinite(N)){var I=N/T,R=m.layout==="vertical"?r.height:r.width;if(m.padding==="gap"&&(O=I*R/2),m.padding==="no-gap"){var L=Oo(t.barCategoryGap,I*R),$=I*R/2;O=$-L-($-L)/R*L}}}a==="xAxis"?_=[r.left+(x.left||0)+(O||0),r.left+r.width-(x.right||0)-(O||0)]:a==="yAxis"?_=l==="horizontal"?[r.top+r.height-(x.bottom||0),r.top+(x.top||0)]:[r.top+(x.top||0)+(O||0),r.top+r.height-(x.bottom||0)-(O||0)]:_=m.range,w&&(_=[_[1],_[0]]);var D=bY(m,o,f),H=D.scale,W=D.realScaleType;H.domain(v).range(_),PY(H);var G=TY(H,Nn(Nn({},m),{},{realScaleType:W}));a==="xAxis"?(E=g==="top"&&!P||g==="bottom"&&P,C=r.left,j=c[S]-E*m.height):a==="yAxis"&&(E=g==="left"&&!P||g==="right"&&P,C=c[S]-E*m.width,j=r.top);var Z=Nn(Nn(Nn({},m),G),{},{realScaleType:W,x:C,y:j,scale:H,width:a==="xAxis"?r.width:m.width,height:a==="yAxis"?r.height:m.height});return Z.bandSize=Yp(Z,G),!m.hide&&a==="xAxis"?c[S]+=(E?-1:1)*Z.height:m.hide||(c[S]+=(E?-1:1)*Z.width),Nn(Nn({},d),{},Td({},h,Z))},{})},nS=function(t,n){var r=t.x,a=t.y,o=n.x,i=n.y;return{x:Math.min(r,o),y:Math.min(a,i),width:Math.abs(o-r),height:Math.abs(i-a)}},Yte=function(t){var n=t.x1,r=t.y1,a=t.x2,o=t.y2;return nS({x:n,y:r},{x:a,y:o})},rS=function(){function e(t){Vte(this,e),this.scale=t}return Kte(e,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=r.bandAware,o=r.position;if(n!==void 0){if(o)switch(o){case"start":return this.scale(n);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+i}case"end":{var s=this.bandwidth?this.bandwidth():0;return this.scale(n)+s}default:return this.scale(n)}if(a){var l=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+l}return this.scale(n)}}},{key:"isInRange",value:function(n){var r=this.range(),a=r[0],o=r[r.length-1];return a<=o?n>=a&&n<=o:n>=o&&n<=a}}],[{key:"create",value:function(n){return new e(n)}}])}();Td(rS,"EPS",1e-4);var Wg=function(t){var n=Object.keys(t).reduce(function(r,a){return Nn(Nn({},r),{},Td({},a,rS.create(t[a])))},{});return Nn(Nn({},n),{},{apply:function(a){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.bandAware,s=o.position;return vte(a,function(l,u){return n[u].apply(l,{bandAware:i,position:s})})},isInRange:function(a){return QP(a,function(o,i){return n[i].isInRange(o)})}})};function Qte(e){return(e%180+180)%180}var Zte=function(t){var n=t.width,r=t.height,a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=Qte(a),i=o*Math.PI/180,s=Math.atan(r/n),l=i>s&&i<Math.PI-s?r/Math.sin(i):n/Math.cos(i);return Math.abs(l)},Jte=Ia,ene=Nu,tne=hd;function nne(e){return function(t,n,r){var a=Object(t);if(!ene(t)){var o=Jte(n);t=tne(t),n=function(s){return o(a[s],s,a)}}var i=e(t,n,r);return i>-1?a[o?t[i]:i]:void 0}}var rne=nne,ane=VP;function one(e){var t=ane(e),n=t%1;return t===t?n?t-n:t:0}var ine=one,sne=f7,lne=Ia,une=ine,cne=Math.max;function pne(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var a=n==null?0:une(n);return a<0&&(a=cne(r+a,0)),sne(e,lne(t),a)}var fne=pne,dne=rne,mne=fne,hne=dne(mne),vne=hne;const yne=Ae(vne);var gne=oM(function(e){return{x:e.left,y:e.top,width:e.width,height:e.height}},function(e){return["l",e.left,"t",e.top,"w",e.width,"h",e.height].join("")}),qg=k.createContext(void 0),Vg=k.createContext(void 0),aS=k.createContext(void 0),oS=k.createContext({}),iS=k.createContext(void 0),sS=k.createContext(0),lS=k.createContext(0),h2=function(t){var n=t.state,r=n.xAxisMap,a=n.yAxisMap,o=n.offset,i=t.clipPathId,s=t.children,l=t.width,u=t.height,p=gne(o);return A.createElement(qg.Provider,{value:r},A.createElement(Vg.Provider,{value:a},A.createElement(oS.Provider,{value:o},A.createElement(aS.Provider,{value:p},A.createElement(iS.Provider,{value:i},A.createElement(sS.Provider,{value:u},A.createElement(lS.Provider,{value:l},s)))))))},xne=function(){return k.useContext(iS)},uS=function(t){var n=k.useContext(qg);n==null&&Co();var r=n[t];return r==null&&Co(),r},wne=function(){var t=k.useContext(qg);return oa(t)},bne=function(){var t=k.useContext(Vg),n=yne(t,function(r){return QP(r.domain,Number.isFinite)});return n||oa(t)},cS=function(t){var n=k.useContext(Vg);n==null&&Co();var r=n[t];return r==null&&Co(),r},Pne=function(){var t=k.useContext(aS);return t},Sne=function(){return k.useContext(oS)},Kg=function(){return k.useContext(lS)},Xg=function(){return k.useContext(sS)};function Xi(e){"@babel/helpers - typeof";return Xi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xi(e)}function One(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kne(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,fS(r.key),r)}}function _ne(e,t,n){return t&&kne(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Cne(e,t,n){return t=pf(t),Ane(e,pS()?Reflect.construct(t,n||[],pf(e).constructor):t.apply(e,n))}function Ane(e,t){if(t&&(Xi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Ene(e)}function Ene(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function pS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(pS=function(){return!!e})()}function pf(e){return pf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},pf(e)}function Tne(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&hv(e,t)}function hv(e,t){return hv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},hv(e,t)}function v2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function y2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?v2(Object(n),!0).forEach(function(r){Yg(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Yg(e,t,n){return t=fS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fS(e){var t=jne(e,"string");return Xi(t)=="symbol"?t:t+""}function jne(e,t){if(Xi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Xi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function $ne(e,t){return Ine(e)||Rne(e,t)||Mne(e,t)||Nne()}function Nne(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Mne(e,t){if(e){if(typeof e=="string")return g2(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return g2(e,t)}}function g2(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Rne(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function Ine(e){if(Array.isArray(e))return e}function vv(){return vv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},vv.apply(this,arguments)}var Dne=function(t,n){var r;return A.isValidElement(t)?r=A.cloneElement(t,n):oe(t)?r=t(n):r=A.createElement("line",vv({},n,{className:"recharts-reference-line-line"})),r},Lne=function(t,n,r,a,o,i,s,l,u){var p=o.x,c=o.y,f=o.width,d=o.height;if(r){var h=u.y,m=t.y.apply(h,{position:i});if(mr(u,"discard")&&!t.y.isInRange(m))return null;var g=[{x:p+f,y:m},{x:p,y:m}];return l==="left"?g.reverse():g}if(n){var v=u.x,y=t.x.apply(v,{position:i});if(mr(u,"discard")&&!t.x.isInRange(y))return null;var x=[{x:y,y:c+d},{x:y,y:c}];return s==="top"?x.reverse():x}if(a){var P=u.segment,w=P.map(function(S){return t.apply(S,{position:i})});return mr(u,"discard")&&lte(w,function(S){return!t.isInRange(S)})?null:w}return null};function Fne(e){var t=e.x,n=e.y,r=e.segment,a=e.xAxisId,o=e.yAxisId,i=e.shape,s=e.className,l=e.alwaysShow,u=xne(),p=uS(a),c=cS(o),f=Pne();if(!u||!f)return null;$r(l===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var d=Wg({x:p.scale,y:c.scale}),h=it(t),m=it(n),g=r&&r.length===2,v=Lne(d,h,m,g,f,e.position,p.orientation,c.orientation,e);if(!v)return null;var y=$ne(v,2),x=y[0],P=x.x,w=x.y,S=y[1],O=S.x,_=S.y,C=mr(e,"hidden")?"url(#".concat(u,")"):void 0,j=y2(y2({clipPath:C},re(e,!0)),{},{x1:P,y1:w,x2:O,y2:_});return A.createElement(ye,{className:ue("recharts-reference-line",s)},Dne(i,j),Ct.renderCallByParent(e,Yte({x1:P,y1:w,x2:O,y2:_})))}var Qg=function(e){function t(){return One(this,t),Cne(this,t,arguments)}return Tne(t,e),_ne(t,[{key:"render",value:function(){return A.createElement(Fne,this.props)}}])}(A.Component);Yg(Qg,"displayName","ReferenceLine");Yg(Qg,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,fill:"none",stroke:"#ccc",fillOpacity:1,strokeWidth:1,position:"middle"});function yv(){return yv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},yv.apply(this,arguments)}function Yi(e){"@babel/helpers - typeof";return Yi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yi(e)}function x2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function w2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?x2(Object(n),!0).forEach(function(r){$d(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):x2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function zne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Bne(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,mS(r.key),r)}}function Hne(e,t,n){return t&&Bne(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Gne(e,t,n){return t=ff(t),Une(e,dS()?Reflect.construct(t,n||[],ff(e).constructor):t.apply(e,n))}function Une(e,t){if(t&&(Yi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Wne(e)}function Wne(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function dS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(dS=function(){return!!e})()}function ff(e){return ff=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},ff(e)}function qne(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gv(e,t)}function gv(e,t){return gv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},gv(e,t)}function $d(e,t,n){return t=mS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mS(e){var t=Vne(e,"string");return Yi(t)=="symbol"?t:t+""}function Vne(e,t){if(Yi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Yi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Kne=function(t){var n=t.x,r=t.y,a=t.xAxis,o=t.yAxis,i=Wg({x:a.scale,y:o.scale}),s=i.apply({x:n,y:r},{bandAware:!0});return mr(t,"discard")&&!i.isInRange(s)?null:s},Nd=function(e){function t(){return zne(this,t),Gne(this,t,arguments)}return qne(t,e),Hne(t,[{key:"render",value:function(){var r=this.props,a=r.x,o=r.y,i=r.r,s=r.alwaysShow,l=r.clipPathId,u=it(a),p=it(o);if($r(s===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.'),!u||!p)return null;var c=Kne(this.props);if(!c)return null;var f=c.x,d=c.y,h=this.props,m=h.shape,g=h.className,v=mr(this.props,"hidden")?"url(#".concat(l,")"):void 0,y=w2(w2({clipPath:v},re(this.props,!0)),{},{cx:f,cy:d});return A.createElement(ye,{className:ue("recharts-reference-dot",g)},t.renderDot(m,y),Ct.renderCallByParent(this.props,{x:f-i,y:d-i,width:2*i,height:2*i}))}}])}(A.Component);$d(Nd,"displayName","ReferenceDot");$d(Nd,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#fff",stroke:"#ccc",fillOpacity:1,strokeWidth:1});$d(Nd,"renderDot",function(e,t){var n;return A.isValidElement(e)?n=A.cloneElement(e,t):oe(e)?n=e(t):n=A.createElement(Cd,yv({},t,{cx:t.cx,cy:t.cy,className:"recharts-reference-dot-dot"})),n});function xv(){return xv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},xv.apply(this,arguments)}function Qi(e){"@babel/helpers - typeof";return Qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Qi(e)}function b2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function P2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?b2(Object(n),!0).forEach(function(r){Md(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):b2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Xne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Yne(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,vS(r.key),r)}}function Qne(e,t,n){return t&&Yne(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Zne(e,t,n){return t=df(t),Jne(e,hS()?Reflect.construct(t,n||[],df(e).constructor):t.apply(e,n))}function Jne(e,t){if(t&&(Qi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return ere(e)}function ere(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function hS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(hS=function(){return!!e})()}function df(e){return df=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},df(e)}function tre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wv(e,t)}function wv(e,t){return wv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},wv(e,t)}function Md(e,t,n){return t=vS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function vS(e){var t=nre(e,"string");return Qi(t)=="symbol"?t:t+""}function nre(e,t){if(Qi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Qi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var rre=function(t,n,r,a,o){var i=o.x1,s=o.x2,l=o.y1,u=o.y2,p=o.xAxis,c=o.yAxis;if(!p||!c)return null;var f=Wg({x:p.scale,y:c.scale}),d={x:t?f.x.apply(i,{position:"start"}):f.x.rangeMin,y:r?f.y.apply(l,{position:"start"}):f.y.rangeMin},h={x:n?f.x.apply(s,{position:"end"}):f.x.rangeMax,y:a?f.y.apply(u,{position:"end"}):f.y.rangeMax};return mr(o,"discard")&&(!f.isInRange(d)||!f.isInRange(h))?null:nS(d,h)},Rd=function(e){function t(){return Xne(this,t),Zne(this,t,arguments)}return tre(t,e),Qne(t,[{key:"render",value:function(){var r=this.props,a=r.x1,o=r.x2,i=r.y1,s=r.y2,l=r.className,u=r.alwaysShow,p=r.clipPathId;$r(u===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var c=it(a),f=it(o),d=it(i),h=it(s),m=this.props.shape;if(!c&&!f&&!d&&!h&&!m)return null;var g=rre(c,f,d,h,this.props);if(!g&&!m)return null;var v=mr(this.props,"hidden")?"url(#".concat(p,")"):void 0;return A.createElement(ye,{className:ue("recharts-reference-area",l)},t.renderRect(m,P2(P2({clipPath:v},re(this.props,!0)),g)),Ct.renderCallByParent(this.props,g))}}])}(A.Component);Md(Rd,"displayName","ReferenceArea");Md(Rd,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#ccc",fillOpacity:.5,stroke:"none",strokeWidth:1});Md(Rd,"renderRect",function(e,t){var n;return A.isValidElement(e)?n=A.cloneElement(e,t):oe(e)?n=e(t):n=A.createElement(Ug,xv({},t,{className:"recharts-reference-area-rect"})),n});function yS(e,t,n){if(t<1)return[];if(t===1&&n===void 0)return e;for(var r=[],a=0;a<e.length;a+=t)r.push(e[a]);return r}function are(e,t,n){var r={width:e.width+t.width,height:e.height+t.height};return Zte(r,n)}function ore(e,t,n){var r=n==="width",a=e.x,o=e.y,i=e.width,s=e.height;return t===1?{start:r?a:o,end:r?a+i:o+s}:{start:r?a+i:o+s,end:r?a:o}}function mf(e,t,n,r,a){if(e*t<e*r||e*t>e*a)return!1;var o=n();return e*(t-e*o/2-r)>=0&&e*(t+e*o/2-a)<=0}function ire(e,t){return yS(e,t+1)}function sre(e,t,n,r,a){for(var o=(r||[]).slice(),i=t.start,s=t.end,l=0,u=1,p=i,c=function(){var h=r==null?void 0:r[l];if(h===void 0)return{v:yS(r,u)};var m=l,g,v=function(){return g===void 0&&(g=n(h,m)),g},y=h.coordinate,x=l===0||mf(e,y,v,p,s);x||(l=0,p=i,u+=1),x&&(p=y+e*(v()/2+a),l+=u)},f;u<=o.length;)if(f=c(),f)return f.v;return[]}function gu(e){"@babel/helpers - typeof";return gu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},gu(e)}function S2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?S2(Object(n),!0).forEach(function(r){lre(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):S2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function lre(e,t,n){return t=ure(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ure(e){var t=cre(e,"string");return gu(t)=="symbol"?t:t+""}function cre(e,t){if(gu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(gu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function pre(e,t,n,r,a){for(var o=(r||[]).slice(),i=o.length,s=t.start,l=t.end,u=function(f){var d=o[f],h,m=function(){return h===void 0&&(h=n(d,f)),h};if(f===i-1){var g=e*(d.coordinate+e*m()/2-l);o[f]=d=kt(kt({},d),{},{tickCoord:g>0?d.coordinate-g*e:d.coordinate})}else o[f]=d=kt(kt({},d),{},{tickCoord:d.coordinate});var v=mf(e,d.tickCoord,m,s,l);v&&(l=d.tickCoord-e*(m()/2+a),o[f]=kt(kt({},d),{},{isShow:!0}))},p=i-1;p>=0;p--)u(p);return o}function fre(e,t,n,r,a,o){var i=(r||[]).slice(),s=i.length,l=t.start,u=t.end;if(o){var p=r[s-1],c=n(p,s-1),f=e*(p.coordinate+e*c/2-u);i[s-1]=p=kt(kt({},p),{},{tickCoord:f>0?p.coordinate-f*e:p.coordinate});var d=mf(e,p.tickCoord,function(){return c},l,u);d&&(u=p.tickCoord-e*(c/2+a),i[s-1]=kt(kt({},p),{},{isShow:!0}))}for(var h=o?s-1:s,m=function(y){var x=i[y],P,w=function(){return P===void 0&&(P=n(x,y)),P};if(y===0){var S=e*(x.coordinate-e*w()/2-l);i[y]=x=kt(kt({},x),{},{tickCoord:S<0?x.coordinate-S*e:x.coordinate})}else i[y]=x=kt(kt({},x),{},{tickCoord:x.coordinate});var O=mf(e,x.tickCoord,w,l,u);O&&(l=x.tickCoord+e*(w()/2+a),i[y]=kt(kt({},x),{},{isShow:!0}))},g=0;g<h;g++)m(g);return i}function Zg(e,t,n){var r=e.tick,a=e.ticks,o=e.viewBox,i=e.minTickGap,s=e.orientation,l=e.interval,u=e.tickFormatter,p=e.unit,c=e.angle;if(!a||!a.length||!r)return[];if(V(l)||Da.isSsr)return ire(a,typeof l=="number"&&V(l)?l:0);var f=[],d=s==="top"||s==="bottom"?"width":"height",h=p&&d==="width"?fl(p,{fontSize:t,letterSpacing:n}):{width:0,height:0},m=function(x,P){var w=oe(u)?u(x.value,P):x.value;return d==="width"?are(fl(w,{fontSize:t,letterSpacing:n}),h,c):fl(w,{fontSize:t,letterSpacing:n})[d]},g=a.length>=2?Dn(a[1].coordinate-a[0].coordinate):1,v=ore(o,g,d);return l==="equidistantPreserveStart"?sre(g,v,m,a,i):(l==="preserveStart"||l==="preserveStartEnd"?f=fre(g,v,m,a,i,l==="preserveStartEnd"):f=pre(g,v,m,a,i),f.filter(function(y){return y.isShow}))}var dre=["viewBox"],mre=["viewBox"],hre=["ticks"];function Zi(e){"@babel/helpers - typeof";return Zi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zi(e)}function ri(){return ri=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ri.apply(this,arguments)}function O2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function nt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?O2(Object(n),!0).forEach(function(r){Jg(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):O2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Jm(e,t){if(e==null)return{};var n=vre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function yre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function k2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,xS(r.key),r)}}function gre(e,t,n){return t&&k2(e.prototype,t),n&&k2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function xre(e,t,n){return t=hf(t),wre(e,gS()?Reflect.construct(t,n||[],hf(e).constructor):t.apply(e,n))}function wre(e,t){if(t&&(Zi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return bre(e)}function bre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function gS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(gS=function(){return!!e})()}function hf(e){return hf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},hf(e)}function Pre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&bv(e,t)}function bv(e,t){return bv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},bv(e,t)}function Jg(e,t,n){return t=xS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xS(e){var t=Sre(e,"string");return Zi(t)=="symbol"?t:t+""}function Sre(e,t){if(Zi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Zi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Ts=function(e){function t(n){var r;return yre(this,t),r=xre(this,t,[n]),r.state={fontSize:"",letterSpacing:""},r}return Pre(t,e),gre(t,[{key:"shouldComponentUpdate",value:function(r,a){var o=r.viewBox,i=Jm(r,dre),s=this.props,l=s.viewBox,u=Jm(s,mre);return!mi(o,l)||!mi(i,u)||!mi(a,this.state)}},{key:"componentDidMount",value:function(){var r=this.layerReference;if(r){var a=r.getElementsByClassName("recharts-cartesian-axis-tick-value")[0];a&&this.setState({fontSize:window.getComputedStyle(a).fontSize,letterSpacing:window.getComputedStyle(a).letterSpacing})}}},{key:"getTickLineCoord",value:function(r){var a=this.props,o=a.x,i=a.y,s=a.width,l=a.height,u=a.orientation,p=a.tickSize,c=a.mirror,f=a.tickMargin,d,h,m,g,v,y,x=c?-1:1,P=r.tickSize||p,w=V(r.tickCoord)?r.tickCoord:r.coordinate;switch(u){case"top":d=h=r.coordinate,g=i+ +!c*l,m=g-x*P,y=m-x*f,v=w;break;case"left":m=g=r.coordinate,h=o+ +!c*s,d=h-x*P,v=d-x*f,y=w;break;case"right":m=g=r.coordinate,h=o+ +c*s,d=h+x*P,v=d+x*f,y=w;break;default:d=h=r.coordinate,g=i+ +c*l,m=g+x*P,y=m+x*f,v=w;break}return{line:{x1:d,y1:m,x2:h,y2:g},tick:{x:v,y}}}},{key:"getTickTextAnchor",value:function(){var r=this.props,a=r.orientation,o=r.mirror,i;switch(a){case"left":i=o?"start":"end";break;case"right":i=o?"end":"start";break;default:i="middle";break}return i}},{key:"getTickVerticalAnchor",value:function(){var r=this.props,a=r.orientation,o=r.mirror,i="end";switch(a){case"left":case"right":i="middle";break;case"top":i=o?"start":"end";break;default:i=o?"end":"start";break}return i}},{key:"renderAxisLine",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.orientation,u=r.mirror,p=r.axisLine,c=nt(nt(nt({},re(this.props,!1)),re(p,!1)),{},{fill:"none"});if(l==="top"||l==="bottom"){var f=+(l==="top"&&!u||l==="bottom"&&u);c=nt(nt({},c),{},{x1:a,y1:o+f*s,x2:a+i,y2:o+f*s})}else{var d=+(l==="left"&&!u||l==="right"&&u);c=nt(nt({},c),{},{x1:a+d*i,y1:o,x2:a+d*i,y2:o+s})}return A.createElement("line",ri({},c,{className:ue("recharts-cartesian-axis-line",gn(p,"className"))}))}},{key:"renderTicks",value:function(r,a,o){var i=this,s=this.props,l=s.tickLine,u=s.stroke,p=s.tick,c=s.tickFormatter,f=s.unit,d=Zg(nt(nt({},this.props),{},{ticks:r}),a,o),h=this.getTickTextAnchor(),m=this.getTickVerticalAnchor(),g=re(this.props,!1),v=re(p,!1),y=nt(nt({},g),{},{fill:"none"},re(l,!1)),x=d.map(function(P,w){var S=i.getTickLineCoord(P),O=S.line,_=S.tick,C=nt(nt(nt(nt({textAnchor:h,verticalAnchor:m},g),{},{stroke:"none",fill:u},v),_),{},{index:w,payload:P,visibleTicksCount:d.length,tickFormatter:c});return A.createElement(ye,ri({className:"recharts-cartesian-axis-tick",key:"tick-".concat(P.value,"-").concat(P.coordinate,"-").concat(P.tickCoord)},Fl(i.props,P,w)),l&&A.createElement("line",ri({},y,O,{className:ue("recharts-cartesian-axis-tick-line",gn(l,"className"))})),p&&t.renderTickItem(p,C,"".concat(oe(c)?c(P.value,w):P.value).concat(f||"")))});return A.createElement("g",{className:"recharts-cartesian-axis-ticks"},x)}},{key:"render",value:function(){var r=this,a=this.props,o=a.axisLine,i=a.width,s=a.height,l=a.ticksGenerator,u=a.className,p=a.hide;if(p)return null;var c=this.props,f=c.ticks,d=Jm(c,hre),h=f;return oe(l)&&(h=f&&f.length>0?l(this.props):l(d)),i<=0||s<=0||!h||!h.length?null:A.createElement(ye,{className:ue("recharts-cartesian-axis",u),ref:function(g){r.layerReference=g}},o&&this.renderAxisLine(),this.renderTicks(h,this.state.fontSize,this.state.letterSpacing),Ct.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(r,a,o){var i,s=ue(a.className,"recharts-cartesian-axis-tick-value");return A.isValidElement(r)?i=A.cloneElement(r,nt(nt({},a),{},{className:s})):oe(r)?i=r(nt(nt({},a),{},{className:s})):i=A.createElement(Ip,ri({},a,{className:"recharts-cartesian-axis-tick-value"}),o),i}}])}(k.Component);Jg(Ts,"displayName","CartesianAxis");Jg(Ts,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var Ore=["x1","y1","x2","y2","key"],kre=["offset"];function Ao(e){"@babel/helpers - typeof";return Ao=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ao(e)}function _2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function At(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?_2(Object(n),!0).forEach(function(r){_re(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function _re(e,t,n){return t=Cre(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Cre(e){var t=Are(e,"string");return Ao(t)=="symbol"?t:t+""}function Are(e,t){if(Ao(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ao(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function to(){return to=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},to.apply(this,arguments)}function C2(e,t){if(e==null)return{};var n=Ere(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ere(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var Tre=function(t){var n=t.fill;if(!n||n==="none")return null;var r=t.fillOpacity,a=t.x,o=t.y,i=t.width,s=t.height,l=t.ry;return A.createElement("rect",{x:a,y:o,ry:l,width:i,height:s,stroke:"none",fill:n,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function wS(e,t){var n;if(A.isValidElement(e))n=A.cloneElement(e,t);else if(oe(e))n=e(t);else{var r=t.x1,a=t.y1,o=t.x2,i=t.y2,s=t.key,l=C2(t,Ore),u=re(l,!1);u.offset;var p=C2(u,kre);n=A.createElement("line",to({},p,{x1:r,y1:a,x2:o,y2:i,fill:"none",key:s}))}return n}function jre(e){var t=e.x,n=e.width,r=e.horizontal,a=r===void 0?!0:r,o=e.horizontalPoints;if(!a||!o||!o.length)return null;var i=o.map(function(s,l){var u=At(At({},e),{},{x1:t,y1:s,x2:t+n,y2:s,key:"line-".concat(l),index:l});return wS(a,u)});return A.createElement("g",{className:"recharts-cartesian-grid-horizontal"},i)}function $re(e){var t=e.y,n=e.height,r=e.vertical,a=r===void 0?!0:r,o=e.verticalPoints;if(!a||!o||!o.length)return null;var i=o.map(function(s,l){var u=At(At({},e),{},{x1:s,y1:t,x2:s,y2:t+n,key:"line-".concat(l),index:l});return wS(a,u)});return A.createElement("g",{className:"recharts-cartesian-grid-vertical"},i)}function Nre(e){var t=e.horizontalFill,n=e.fillOpacity,r=e.x,a=e.y,o=e.width,i=e.height,s=e.horizontalPoints,l=e.horizontal,u=l===void 0?!0:l;if(!u||!t||!t.length)return null;var p=s.map(function(f){return Math.round(f+a-a)}).sort(function(f,d){return f-d});a!==p[0]&&p.unshift(0);var c=p.map(function(f,d){var h=!p[d+1],m=h?a+i-f:p[d+1]-f;if(m<=0)return null;var g=d%t.length;return A.createElement("rect",{key:"react-".concat(d),y:f,x:r,height:m,width:o,stroke:"none",fill:t[g],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return A.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},c)}function Mre(e){var t=e.vertical,n=t===void 0?!0:t,r=e.verticalFill,a=e.fillOpacity,o=e.x,i=e.y,s=e.width,l=e.height,u=e.verticalPoints;if(!n||!r||!r.length)return null;var p=u.map(function(f){return Math.round(f+o-o)}).sort(function(f,d){return f-d});o!==p[0]&&p.unshift(0);var c=p.map(function(f,d){var h=!p[d+1],m=h?o+s-f:p[d+1]-f;if(m<=0)return null;var g=d%r.length;return A.createElement("rect",{key:"react-".concat(d),x:f,y:i,width:m,height:l,stroke:"none",fill:r[g],fillOpacity:a,className:"recharts-cartesian-grid-bg"})});return A.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},c)}var Rre=function(t,n){var r=t.xAxis,a=t.width,o=t.height,i=t.offset;return TP(Zg(At(At(At({},Ts.defaultProps),r),{},{ticks:Er(r,!0),viewBox:{x:0,y:0,width:a,height:o}})),i.left,i.left+i.width,n)},Ire=function(t,n){var r=t.yAxis,a=t.width,o=t.height,i=t.offset;return TP(Zg(At(At(At({},Ts.defaultProps),r),{},{ticks:Er(r,!0),viewBox:{x:0,y:0,width:a,height:o}})),i.top,i.top+i.height,n)},Ho={horizontal:!0,vertical:!0,stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function Ln(e){var t,n,r,a,o,i,s=Kg(),l=Xg(),u=Sne(),p=At(At({},e),{},{stroke:(t=e.stroke)!==null&&t!==void 0?t:Ho.stroke,fill:(n=e.fill)!==null&&n!==void 0?n:Ho.fill,horizontal:(r=e.horizontal)!==null&&r!==void 0?r:Ho.horizontal,horizontalFill:(a=e.horizontalFill)!==null&&a!==void 0?a:Ho.horizontalFill,vertical:(o=e.vertical)!==null&&o!==void 0?o:Ho.vertical,verticalFill:(i=e.verticalFill)!==null&&i!==void 0?i:Ho.verticalFill,x:V(e.x)?e.x:u.left,y:V(e.y)?e.y:u.top,width:V(e.width)?e.width:u.width,height:V(e.height)?e.height:u.height}),c=p.x,f=p.y,d=p.width,h=p.height,m=p.syncWithTicks,g=p.horizontalValues,v=p.verticalValues,y=wne(),x=bne();if(!V(d)||d<=0||!V(h)||h<=0||!V(c)||c!==+c||!V(f)||f!==+f)return null;var P=p.verticalCoordinatesGenerator||Rre,w=p.horizontalCoordinatesGenerator||Ire,S=p.horizontalPoints,O=p.verticalPoints;if((!S||!S.length)&&oe(w)){var _=g&&g.length,C=w({yAxis:x?At(At({},x),{},{ticks:_?g:x.ticks}):void 0,width:s,height:l,offset:u},_?!0:m);$r(Array.isArray(C),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(Ao(C),"]")),Array.isArray(C)&&(S=C)}if((!O||!O.length)&&oe(P)){var j=v&&v.length,E=P({xAxis:y?At(At({},y),{},{ticks:j?v:y.ticks}):void 0,width:s,height:l,offset:u},j?!0:m);$r(Array.isArray(E),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(Ao(E),"]")),Array.isArray(E)&&(O=E)}return A.createElement("g",{className:"recharts-cartesian-grid"},A.createElement(Tre,{fill:p.fill,fillOpacity:p.fillOpacity,x:p.x,y:p.y,width:p.width,height:p.height,ry:p.ry}),A.createElement(jre,to({},p,{offset:u,horizontalPoints:S,xAxis:y,yAxis:x})),A.createElement($re,to({},p,{offset:u,verticalPoints:O,xAxis:y,yAxis:x})),A.createElement(Nre,to({},p,{horizontalPoints:S})),A.createElement(Mre,to({},p,{verticalPoints:O})))}Ln.displayName="CartesianGrid";var Dre=["type","layout","connectNulls","ref"],Lre=["key"];function Ji(e){"@babel/helpers - typeof";return Ji=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ji(e)}function A2(e,t){if(e==null)return{};var n=Fre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function vl(){return vl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},vl.apply(this,arguments)}function E2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Kt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?E2(Object(n),!0).forEach(function(r){Mn(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):E2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Go(e){return Gre(e)||Hre(e)||Bre(e)||zre()}function zre(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Bre(e,t){if(e){if(typeof e=="string")return Pv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Pv(e,t)}}function Hre(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Gre(e){if(Array.isArray(e))return Pv(e)}function Pv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ure(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function T2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,PS(r.key),r)}}function Wre(e,t,n){return t&&T2(e.prototype,t),n&&T2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function qre(e,t,n){return t=vf(t),Vre(e,bS()?Reflect.construct(t,n||[],vf(e).constructor):t.apply(e,n))}function Vre(e,t){if(t&&(Ji(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Kre(e)}function Kre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function bS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(bS=function(){return!!e})()}function vf(e){return vf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},vf(e)}function Xre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Sv(e,t)}function Sv(e,t){return Sv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Sv(e,t)}function Mn(e,t,n){return t=PS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function PS(e){var t=Yre(e,"string");return Ji(t)=="symbol"?t:t+""}function Yre(e,t){if(Ji(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ji(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Rt=function(e){function t(){var n;Ure(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=qre(this,t,[].concat(a)),Mn(n,"state",{isAnimationFinished:!0,totalLength:0}),Mn(n,"generateSimpleStrokeDasharray",function(i,s){return"".concat(s,"px ").concat(i-s,"px")}),Mn(n,"getStrokeDasharray",function(i,s,l){var u=l.reduce(function(v,y){return v+y});if(!u)return n.generateSimpleStrokeDasharray(s,i);for(var p=Math.floor(i/u),c=i%u,f=s-i,d=[],h=0,m=0;h<l.length;m+=l[h],++h)if(m+l[h]>c){d=[].concat(Go(l.slice(0,h)),[c-m]);break}var g=d.length%2===0?[0,f]:[f];return[].concat(Go(t.repeat(l,p)),Go(d),g).map(function(v){return"".concat(v,"px")}).join(", ")}),Mn(n,"id",$o("recharts-line-")),Mn(n,"pathRef",function(i){n.mainCurve=i}),Mn(n,"handleAnimationEnd",function(){n.setState({isAnimationFinished:!0}),n.props.onAnimationEnd&&n.props.onAnimationEnd()}),Mn(n,"handleAnimationStart",function(){n.setState({isAnimationFinished:!1}),n.props.onAnimationStart&&n.props.onAnimationStart()}),n}return Xre(t,e),Wre(t,[{key:"componentDidMount",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();this.setState({totalLength:r})}}},{key:"componentDidUpdate",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();r!==this.state.totalLength&&this.setState({totalLength:r})}}},{key:"getTotalLength",value:function(){var r=this.mainCurve;try{return r&&r.getTotalLength&&r.getTotalLength()||0}catch{return 0}}},{key:"renderErrorBar",value:function(r,a){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var o=this.props,i=o.points,s=o.xAxis,l=o.yAxis,u=o.layout,p=o.children,c=qt(p,Es);if(!c)return null;var f=function(m,g){return{x:m.x,y:m.y,value:m.value,errorVal:st(m.payload,g)}},d={clipPath:r?"url(#clipPath-".concat(a,")"):null};return A.createElement(ye,d,c.map(function(h){return A.cloneElement(h,{key:"bar-".concat(h.props.dataKey),data:i,xAxis:s,yAxis:l,layout:u,dataPointFormatter:f})}))}},{key:"renderDots",value:function(r,a,o){var i=this.props.isAnimationActive;if(i&&!this.state.isAnimationFinished)return null;var s=this.props,l=s.dot,u=s.points,p=s.dataKey,c=re(this.props,!1),f=re(l,!0),d=u.map(function(m,g){var v=Kt(Kt(Kt({key:"dot-".concat(g),r:3},c),f),{},{index:g,cx:m.x,cy:m.y,value:m.value,dataKey:p,payload:m.payload,points:u});return t.renderDotItem(l,v)}),h={clipPath:r?"url(#clipPath-".concat(a?"":"dots-").concat(o,")"):null};return A.createElement(ye,vl({className:"recharts-line-dots",key:"dots"},h),d)}},{key:"renderCurveStatically",value:function(r,a,o,i){var s=this.props,l=s.type,u=s.layout,p=s.connectNulls;s.ref;var c=A2(s,Dre),f=Kt(Kt(Kt({},re(c,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:a?"url(#clipPath-".concat(o,")"):null,points:r},i),{},{type:l,layout:u,connectNulls:p});return A.createElement(mo,vl({},f,{pathRef:this.pathRef}))}},{key:"renderCurveWithAnimation",value:function(r,a){var o=this,i=this.props,s=i.points,l=i.strokeDasharray,u=i.isAnimationActive,p=i.animationBegin,c=i.animationDuration,f=i.animationEasing,d=i.animationId,h=i.animateNewValues,m=i.width,g=i.height,v=this.state,y=v.prevPoints,x=v.totalLength;return A.createElement(Vn,{begin:p,duration:c,isActive:u,easing:f,from:{t:0},to:{t:1},key:"line-".concat(d),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(P){var w=P.t;if(y){var S=y.length/s.length,O=s.map(function(T,N){var M=Math.floor(N*S);if(y[M]){var I=y[M],R=Xe(I.x,T.x),L=Xe(I.y,T.y);return Kt(Kt({},T),{},{x:R(w),y:L(w)})}if(h){var $=Xe(m*2,T.x),D=Xe(g/2,T.y);return Kt(Kt({},T),{},{x:$(w),y:D(w)})}return Kt(Kt({},T),{},{x:T.x,y:T.y})});return o.renderCurveStatically(O,r,a)}var _=Xe(0,x),C=_(w),j;if(l){var E="".concat(l).split(/[,\s]+/gim).map(function(T){return parseFloat(T)});j=o.getStrokeDasharray(C,x,E)}else j=o.generateSimpleStrokeDasharray(x,C);return o.renderCurveStatically(s,r,a,{strokeDasharray:j})})}},{key:"renderCurve",value:function(r,a){var o=this.props,i=o.points,s=o.isAnimationActive,l=this.state,u=l.prevPoints,p=l.totalLength;return s&&i&&i.length&&(!u&&p>0||!ko(u,i))?this.renderCurveWithAnimation(r,a):this.renderCurveStatically(i,r,a)}},{key:"render",value:function(){var r,a=this.props,o=a.hide,i=a.dot,s=a.points,l=a.className,u=a.xAxis,p=a.yAxis,c=a.top,f=a.left,d=a.width,h=a.height,m=a.isAnimationActive,g=a.id;if(o||!s||!s.length)return null;var v=this.state.isAnimationFinished,y=s.length===1,x=ue("recharts-line",l),P=u&&u.allowDataOverflow,w=p&&p.allowDataOverflow,S=P||w,O=te(g)?this.id:g,_=(r=re(i,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},C=_.r,j=C===void 0?3:C,E=_.strokeWidth,T=E===void 0?2:E,N=S8(i)?i:{},M=N.clipDot,I=M===void 0?!0:M,R=j*2+T;return A.createElement(ye,{className:x},P||w?A.createElement("defs",null,A.createElement("clipPath",{id:"clipPath-".concat(O)},A.createElement("rect",{x:P?f:f-d/2,y:w?c:c-h/2,width:P?d:d*2,height:w?h:h*2})),!I&&A.createElement("clipPath",{id:"clipPath-dots-".concat(O)},A.createElement("rect",{x:f-R/2,y:c-R/2,width:d+R,height:h+R}))):null,!y&&this.renderCurve(S,O),this.renderErrorBar(S,O),(y||i)&&this.renderDots(S,I,O),(!m||v)&&dr.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,prevPoints:a.curPoints}:r.points!==a.curPoints?{curPoints:r.points}:null}},{key:"repeat",value:function(r,a){for(var o=r.length%2!==0?[].concat(Go(r),[0]):r,i=[],s=0;s<a;++s)i=[].concat(Go(i),Go(o));return i}},{key:"renderDotItem",value:function(r,a){var o;if(A.isValidElement(r))o=A.cloneElement(r,a);else if(oe(r))o=r(a);else{var i=a.key,s=A2(a,Lre),l=ue("recharts-line-dot",typeof r!="boolean"?r.className:"");o=A.createElement(Cd,vl({key:i},s,{className:l}))}return o}}])}(k.PureComponent);Mn(Rt,"displayName","Line");Mn(Rt,"defaultProps",{xAxisId:0,yAxisId:0,connectNulls:!1,activeDot:!0,dot:!0,legendType:"line",stroke:"#3182bd",strokeWidth:1,fill:"#fff",points:[],isAnimationActive:!Da.isSsr,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",hide:!1,label:!1});Mn(Rt,"getComposedData",function(e){var t=e.props,n=e.xAxis,r=e.yAxis,a=e.xAxisTicks,o=e.yAxisTicks,i=e.dataKey,s=e.bandSize,l=e.displayedData,u=e.offset,p=t.layout,c=l.map(function(f,d){var h=st(f,i);return p==="horizontal"?{x:Ui({axis:n,ticks:a,bandSize:s,entry:f,index:d}),y:te(h)?null:r.scale(h),value:h,payload:f}:{x:te(h)?null:n.scale(h),y:Ui({axis:r,ticks:o,bandSize:s,entry:f,index:d}),value:h,payload:f}});return Kt({points:c,layout:p},u)});var Qre=["layout","type","stroke","connectNulls","isRange","ref"],Zre=["key"],SS;function es(e){"@babel/helpers - typeof";return es=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},es(e)}function OS(e,t){if(e==null)return{};var n=Jre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function no(){return no=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},no.apply(this,arguments)}function j2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Zr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?j2(Object(n),!0).forEach(function(r){ir(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):j2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function eae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function $2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,_S(r.key),r)}}function tae(e,t,n){return t&&$2(e.prototype,t),n&&$2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function nae(e,t,n){return t=yf(t),rae(e,kS()?Reflect.construct(t,n||[],yf(e).constructor):t.apply(e,n))}function rae(e,t){if(t&&(es(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return aae(e)}function aae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function kS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(kS=function(){return!!e})()}function yf(e){return yf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},yf(e)}function oae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ov(e,t)}function Ov(e,t){return Ov=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Ov(e,t)}function ir(e,t,n){return t=_S(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _S(e){var t=iae(e,"string");return es(t)=="symbol"?t:t+""}function iae(e,t){if(es(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(es(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var pt=function(e){function t(){var n;eae(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=nae(this,t,[].concat(a)),ir(n,"state",{isAnimationFinished:!0}),ir(n,"id",$o("recharts-area-")),ir(n,"handleAnimationEnd",function(){var i=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),oe(i)&&i()}),ir(n,"handleAnimationStart",function(){var i=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),oe(i)&&i()}),n}return oae(t,e),tae(t,[{key:"renderDots",value:function(r,a,o){var i=this.props.isAnimationActive,s=this.state.isAnimationFinished;if(i&&!s)return null;var l=this.props,u=l.dot,p=l.points,c=l.dataKey,f=re(this.props,!1),d=re(u,!0),h=p.map(function(g,v){var y=Zr(Zr(Zr({key:"dot-".concat(v),r:3},f),d),{},{index:v,cx:g.x,cy:g.y,dataKey:c,value:g.value,payload:g.payload,points:p});return t.renderDotItem(u,y)}),m={clipPath:r?"url(#clipPath-".concat(a?"":"dots-").concat(o,")"):null};return A.createElement(ye,no({className:"recharts-area-dots"},m),h)}},{key:"renderHorizontalRect",value:function(r){var a=this.props,o=a.baseLine,i=a.points,s=a.strokeWidth,l=i[0].x,u=i[i.length-1].x,p=r*Math.abs(l-u),c=da(i.map(function(f){return f.y||0}));return V(o)&&typeof o=="number"?c=Math.max(o,c):o&&Array.isArray(o)&&o.length&&(c=Math.max(da(o.map(function(f){return f.y||0})),c)),V(c)?A.createElement("rect",{x:l<u?l:l-p,y:0,width:p,height:Math.floor(c+(s?parseInt("".concat(s),10):1))}):null}},{key:"renderVerticalRect",value:function(r){var a=this.props,o=a.baseLine,i=a.points,s=a.strokeWidth,l=i[0].y,u=i[i.length-1].y,p=r*Math.abs(l-u),c=da(i.map(function(f){return f.x||0}));return V(o)&&typeof o=="number"?c=Math.max(o,c):o&&Array.isArray(o)&&o.length&&(c=Math.max(da(o.map(function(f){return f.x||0})),c)),V(c)?A.createElement("rect",{x:0,y:l<u?l:l-p,width:c+(s?parseInt("".concat(s),10):1),height:Math.floor(p)}):null}},{key:"renderClipRect",value:function(r){var a=this.props.layout;return a==="vertical"?this.renderVerticalRect(r):this.renderHorizontalRect(r)}},{key:"renderAreaStatically",value:function(r,a,o,i){var s=this.props,l=s.layout,u=s.type,p=s.stroke,c=s.connectNulls,f=s.isRange;s.ref;var d=OS(s,Qre);return A.createElement(ye,{clipPath:o?"url(#clipPath-".concat(i,")"):null},A.createElement(mo,no({},re(d,!0),{points:r,connectNulls:c,type:u,baseLine:a,layout:l,stroke:"none",className:"recharts-area-area"})),p!=="none"&&A.createElement(mo,no({},re(this.props,!1),{className:"recharts-area-curve",layout:l,type:u,connectNulls:c,fill:"none",points:r})),p!=="none"&&f&&A.createElement(mo,no({},re(this.props,!1),{className:"recharts-area-curve",layout:l,type:u,connectNulls:c,fill:"none",points:a})))}},{key:"renderAreaWithAnimation",value:function(r,a){var o=this,i=this.props,s=i.points,l=i.baseLine,u=i.isAnimationActive,p=i.animationBegin,c=i.animationDuration,f=i.animationEasing,d=i.animationId,h=this.state,m=h.prevPoints,g=h.prevBaseLine;return A.createElement(Vn,{begin:p,duration:c,isActive:u,easing:f,from:{t:0},to:{t:1},key:"area-".concat(d),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(v){var y=v.t;if(m){var x=m.length/s.length,P=s.map(function(_,C){var j=Math.floor(C*x);if(m[j]){var E=m[j],T=Xe(E.x,_.x),N=Xe(E.y,_.y);return Zr(Zr({},_),{},{x:T(y),y:N(y)})}return _}),w;if(V(l)&&typeof l=="number"){var S=Xe(g,l);w=S(y)}else if(te(l)||Ps(l)){var O=Xe(g,0);w=O(y)}else w=l.map(function(_,C){var j=Math.floor(C*x);if(g[j]){var E=g[j],T=Xe(E.x,_.x),N=Xe(E.y,_.y);return Zr(Zr({},_),{},{x:T(y),y:N(y)})}return _});return o.renderAreaStatically(P,w,r,a)}return A.createElement(ye,null,A.createElement("defs",null,A.createElement("clipPath",{id:"animationClipPath-".concat(a)},o.renderClipRect(y))),A.createElement(ye,{clipPath:"url(#animationClipPath-".concat(a,")")},o.renderAreaStatically(s,l,r,a)))})}},{key:"renderArea",value:function(r,a){var o=this.props,i=o.points,s=o.baseLine,l=o.isAnimationActive,u=this.state,p=u.prevPoints,c=u.prevBaseLine,f=u.totalLength;return l&&i&&i.length&&(!p&&f>0||!ko(p,i)||!ko(c,s))?this.renderAreaWithAnimation(r,a):this.renderAreaStatically(i,s,r,a)}},{key:"render",value:function(){var r,a=this.props,o=a.hide,i=a.dot,s=a.points,l=a.className,u=a.top,p=a.left,c=a.xAxis,f=a.yAxis,d=a.width,h=a.height,m=a.isAnimationActive,g=a.id;if(o||!s||!s.length)return null;var v=this.state.isAnimationFinished,y=s.length===1,x=ue("recharts-area",l),P=c&&c.allowDataOverflow,w=f&&f.allowDataOverflow,S=P||w,O=te(g)?this.id:g,_=(r=re(i,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},C=_.r,j=C===void 0?3:C,E=_.strokeWidth,T=E===void 0?2:E,N=S8(i)?i:{},M=N.clipDot,I=M===void 0?!0:M,R=j*2+T;return A.createElement(ye,{className:x},P||w?A.createElement("defs",null,A.createElement("clipPath",{id:"clipPath-".concat(O)},A.createElement("rect",{x:P?p:p-d/2,y:w?u:u-h/2,width:P?d:d*2,height:w?h:h*2})),!I&&A.createElement("clipPath",{id:"clipPath-dots-".concat(O)},A.createElement("rect",{x:p-R/2,y:u-R/2,width:d+R,height:h+R}))):null,y?null:this.renderArea(S,O),(i||y)&&this.renderDots(S,I,O),(!m||v)&&dr.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,curBaseLine:r.baseLine,prevPoints:a.curPoints,prevBaseLine:a.curBaseLine}:r.points!==a.curPoints||r.baseLine!==a.curBaseLine?{curPoints:r.points,curBaseLine:r.baseLine}:null}}])}(k.PureComponent);SS=pt;ir(pt,"displayName","Area");ir(pt,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!Da.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});ir(pt,"getBaseValue",function(e,t,n,r){var a=e.layout,o=e.baseValue,i=t.props.baseValue,s=i??o;if(V(s)&&typeof s=="number")return s;var l=a==="horizontal"?r:n,u=l.scale.domain();if(l.type==="number"){var p=Math.max(u[0],u[1]),c=Math.min(u[0],u[1]);return s==="dataMin"?c:s==="dataMax"||p<0?p:Math.max(Math.min(u[0],u[1]),0)}return s==="dataMin"?u[0]:s==="dataMax"?u[1]:u[0]});ir(pt,"getComposedData",function(e){var t=e.props,n=e.item,r=e.xAxis,a=e.yAxis,o=e.xAxisTicks,i=e.yAxisTicks,s=e.bandSize,l=e.dataKey,u=e.stackedData,p=e.dataStartIndex,c=e.displayedData,f=e.offset,d=t.layout,h=u&&u.length,m=SS.getBaseValue(t,n,r,a),g=d==="horizontal",v=!1,y=c.map(function(P,w){var S;h?S=u[p+w]:(S=st(P,l),Array.isArray(S)?v=!0:S=[m,S]);var O=S[1]==null||h&&st(P,l)==null;return g?{x:Ui({axis:r,ticks:o,bandSize:s,entry:P,index:w}),y:O?null:a.scale(S[1]),value:S,payload:P}:{x:O?null:r.scale(S[1]),y:Ui({axis:a,ticks:i,bandSize:s,entry:P,index:w}),value:S,payload:P}}),x;return h||v?x=y.map(function(P){var w=Array.isArray(P.value)?P.value[0]:null;return g?{x:P.x,y:w!=null&&P.y!=null?a.scale(w):null}:{x:w!=null?r.scale(w):null,y:P.y}}):x=g?a.scale(m):r.scale(m),Zr({points:y,baseLine:x,layout:d,isRange:v},f)});ir(pt,"renderDotItem",function(e,t){var n;if(A.isValidElement(e))n=A.cloneElement(e,t);else if(oe(e))n=e(t);else{var r=ue("recharts-area-dot",typeof e!="boolean"?e.className:""),a=t.key,o=OS(t,Zre);n=A.createElement(Cd,no({},o,{key:a,className:r}))}return n});function ts(e){"@babel/helpers - typeof";return ts=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ts(e)}function sae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function lae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,ES(r.key),r)}}function uae(e,t,n){return t&&lae(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function cae(e,t,n){return t=gf(t),pae(e,CS()?Reflect.construct(t,n||[],gf(e).constructor):t.apply(e,n))}function pae(e,t){if(t&&(ts(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return fae(e)}function fae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function CS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(CS=function(){return!!e})()}function gf(e){return gf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},gf(e)}function dae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&kv(e,t)}function kv(e,t){return kv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},kv(e,t)}function AS(e,t,n){return t=ES(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ES(e){var t=mae(e,"string");return ts(t)=="symbol"?t:t+""}function mae(e,t){if(ts(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ts(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Id=function(e){function t(){return sae(this,t),cae(this,t,arguments)}return dae(t,e),uae(t,[{key:"render",value:function(){return null}}])}(k.Component);AS(Id,"displayName","ZAxis");AS(Id,"defaultProps",{zAxisId:0,range:[64,64],scale:"auto",type:"number"});var hae=["option","isActive"];function yl(){return yl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},yl.apply(this,arguments)}function vae(e,t){if(e==null)return{};var n=yae(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yae(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function gae(e){var t=e.option,n=e.isActive,r=vae(e,hae);return typeof t=="string"?k.createElement(pv,yl({option:k.createElement(md,yl({type:t},r)),isActive:n,shapeType:"symbols"},r)):k.createElement(pv,yl({option:t,isActive:n,shapeType:"symbols"},r))}function ns(e){"@babel/helpers - typeof";return ns=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ns(e)}function gl(){return gl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},gl.apply(this,arguments)}function N2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function pn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?N2(Object(n),!0).forEach(function(r){ha(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):N2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function xae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function M2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,jS(r.key),r)}}function wae(e,t,n){return t&&M2(e.prototype,t),n&&M2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function bae(e,t,n){return t=xf(t),Pae(e,TS()?Reflect.construct(t,n||[],xf(e).constructor):t.apply(e,n))}function Pae(e,t){if(t&&(ns(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Sae(e)}function Sae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function TS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(TS=function(){return!!e})()}function xf(e){return xf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},xf(e)}function Oae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&_v(e,t)}function _v(e,t){return _v=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},_v(e,t)}function ha(e,t,n){return t=jS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function jS(e){var t=kae(e,"string");return ns(t)=="symbol"?t:t+""}function kae(e,t){if(ns(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ns(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Dd=function(e){function t(){var n;xae(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=bae(this,t,[].concat(a)),ha(n,"state",{isAnimationFinished:!1}),ha(n,"handleAnimationEnd",function(){n.setState({isAnimationFinished:!0})}),ha(n,"handleAnimationStart",function(){n.setState({isAnimationFinished:!1})}),ha(n,"id",$o("recharts-scatter-")),n}return Oae(t,e),wae(t,[{key:"renderSymbolsStatically",value:function(r){var a=this,o=this.props,i=o.shape,s=o.activeShape,l=o.activeIndex,u=re(this.props,!1);return r.map(function(p,c){var f=l===c,d=f?s:i,h=pn(pn({},u),p);return A.createElement(ye,gl({className:"recharts-scatter-symbol",key:"symbol-".concat(p==null?void 0:p.cx,"-").concat(p==null?void 0:p.cy,"-").concat(p==null?void 0:p.size,"-").concat(c)},Fl(a.props,p,c),{role:"img"}),A.createElement(gae,gl({option:d,isActive:f,key:"symbol-".concat(c)},h)))})}},{key:"renderSymbolsWithAnimation",value:function(){var r=this,a=this.props,o=a.points,i=a.isAnimationActive,s=a.animationBegin,l=a.animationDuration,u=a.animationEasing,p=a.animationId,c=this.state.prevPoints;return A.createElement(Vn,{begin:s,duration:l,isActive:i,easing:u,from:{t:0},to:{t:1},key:"pie-".concat(p),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(f){var d=f.t,h=o.map(function(m,g){var v=c&&c[g];if(v){var y=Xe(v.cx,m.cx),x=Xe(v.cy,m.cy),P=Xe(v.size,m.size);return pn(pn({},m),{},{cx:y(d),cy:x(d),size:P(d)})}var w=Xe(0,m.size);return pn(pn({},m),{},{size:w(d)})});return A.createElement(ye,null,r.renderSymbolsStatically(h))})}},{key:"renderSymbols",value:function(){var r=this.props,a=r.points,o=r.isAnimationActive,i=this.state.prevPoints;return o&&a&&a.length&&(!i||!ko(i,a))?this.renderSymbolsWithAnimation():this.renderSymbolsStatically(a)}},{key:"renderErrorBar",value:function(){var r=this.props.isAnimationActive;if(r&&!this.state.isAnimationFinished)return null;var a=this.props,o=a.points,i=a.xAxis,s=a.yAxis,l=a.children,u=qt(l,Es);return u?u.map(function(p,c){var f=p.props,d=f.direction,h=f.dataKey;return A.cloneElement(p,{key:"".concat(d,"-").concat(h,"-").concat(o[c]),data:o,xAxis:i,yAxis:s,layout:d==="x"?"vertical":"horizontal",dataPointFormatter:function(g,v){return{x:g.cx,y:g.cy,value:d==="x"?+g.node.x:+g.node.y,errorVal:st(g,v)}}})}):null}},{key:"renderLine",value:function(){var r=this.props,a=r.points,o=r.line,i=r.lineType,s=r.lineJointType,l=re(this.props,!1),u=re(o,!1),p,c;if(i==="joint")p=a.map(function(x){return{x:x.cx,y:x.cy}});else if(i==="fitting"){var f=nR(a),d=f.xmin,h=f.xmax,m=f.a,g=f.b,v=function(P){return m*P+g};p=[{x:d,y:v(d)},{x:h,y:v(h)}]}var y=pn(pn(pn({},l),{},{fill:"none",stroke:l&&l.fill},u),{},{points:p});return A.isValidElement(o)?c=A.cloneElement(o,y):oe(o)?c=o(y):c=A.createElement(mo,gl({},y,{type:s})),A.createElement(ye,{className:"recharts-scatter-line",key:"recharts-scatter-line"},c)}},{key:"render",value:function(){var r=this.props,a=r.hide,o=r.points,i=r.line,s=r.className,l=r.xAxis,u=r.yAxis,p=r.left,c=r.top,f=r.width,d=r.height,h=r.id,m=r.isAnimationActive;if(a||!o||!o.length)return null;var g=this.state.isAnimationFinished,v=ue("recharts-scatter",s),y=l&&l.allowDataOverflow,x=u&&u.allowDataOverflow,P=y||x,w=te(h)?this.id:h;return A.createElement(ye,{className:v,clipPath:P?"url(#clipPath-".concat(w,")"):null},y||x?A.createElement("defs",null,A.createElement("clipPath",{id:"clipPath-".concat(w)},A.createElement("rect",{x:y?p:p-f/2,y:x?c:c-d/2,width:y?f:f*2,height:x?d:d*2}))):null,i&&this.renderLine(),this.renderErrorBar(),A.createElement(ye,{key:"recharts-scatter-symbols"},this.renderSymbols()),(!m||g)&&dr.renderCallByParent(this.props,o))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,prevPoints:a.curPoints}:r.points!==a.curPoints?{curPoints:r.points}:null}}])}(k.PureComponent);ha(Dd,"displayName","Scatter");ha(Dd,"defaultProps",{xAxisId:0,yAxisId:0,zAxisId:0,legendType:"circle",lineType:"joint",lineJointType:"linear",data:[],shape:"circle",hide:!1,isAnimationActive:!Da.isSsr,animationBegin:0,animationDuration:400,animationEasing:"linear"});ha(Dd,"getComposedData",function(e){var t=e.xAxis,n=e.yAxis,r=e.zAxis,a=e.item,o=e.displayedData,i=e.xAxisTicks,s=e.yAxisTicks,l=e.offset,u=a.props.tooltipType,p=qt(a.props.children,gg),c=te(t.dataKey)?a.props.dataKey:t.dataKey,f=te(n.dataKey)?a.props.dataKey:n.dataKey,d=r&&r.dataKey,h=r?r.range:Id.defaultProps.range,m=h&&h[0],g=t.scale.bandwidth?t.scale.bandwidth():0,v=n.scale.bandwidth?n.scale.bandwidth():0,y=o.map(function(x,P){var w=st(x,c),S=st(x,f),O=!te(d)&&st(x,d)||"-",_=[{name:te(t.dataKey)?a.props.name:t.name||t.dataKey,unit:t.unit||"",value:w,payload:x,dataKey:c,type:u},{name:te(n.dataKey)?a.props.name:n.name||n.dataKey,unit:n.unit||"",value:S,payload:x,dataKey:f,type:u}];O!=="-"&&_.push({name:r.name||r.dataKey,unit:r.unit||"",value:O,payload:x,dataKey:d,type:u});var C=Ui({axis:t,ticks:i,bandSize:g,entry:x,index:P,dataKey:c}),j=Ui({axis:n,ticks:s,bandSize:v,entry:x,index:P,dataKey:f}),E=O!=="-"?r.scale(O):m,T=Math.sqrt(Math.max(E,0)/Math.PI);return pn(pn({},x),{},{cx:C,cy:j,x:C-T,y:j-T,xAxis:t,yAxis:n,zAxis:r,width:2*T,height:2*T,size:E,node:{x:w,y:S,z:O},tooltipPayload:_,tooltipPosition:{x:C,y:j},payload:x},p&&p[P]&&p[P].props)});return pn({points:y},l)});function rs(e){"@babel/helpers - typeof";return rs=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rs(e)}function _ae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Cae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,MS(r.key),r)}}function Aae(e,t,n){return t&&Cae(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Eae(e,t,n){return t=wf(t),Tae(e,$S()?Reflect.construct(t,n||[],wf(e).constructor):t.apply(e,n))}function Tae(e,t){if(t&&(rs(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return jae(e)}function jae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function $S(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return($S=function(){return!!e})()}function wf(e){return wf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},wf(e)}function $ae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Cv(e,t)}function Cv(e,t){return Cv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Cv(e,t)}function NS(e,t,n){return t=MS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function MS(e){var t=Nae(e,"string");return rs(t)=="symbol"?t:t+""}function Nae(e,t){if(rs(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(rs(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function Av(){return Av=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Av.apply(this,arguments)}function Mae(e){var t=e.xAxisId,n=Kg(),r=Xg(),a=uS(t);return a==null?null:k.createElement(Ts,Av({},a,{className:ue("recharts-".concat(a.axisType," ").concat(a.axisType),a.className),viewBox:{x:0,y:0,width:n,height:r},ticksGenerator:function(i){return Er(i,!0)}}))}var Et=function(e){function t(){return _ae(this,t),Eae(this,t,arguments)}return $ae(t,e),Aae(t,[{key:"render",value:function(){return k.createElement(Mae,this.props)}}])}(k.Component);NS(Et,"displayName","XAxis");NS(Et,"defaultProps",{allowDecimals:!0,hide:!1,orientation:"bottom",width:0,height:30,mirror:!1,xAxisId:0,tickCount:5,type:"category",padding:{left:0,right:0},allowDataOverflow:!1,scale:"auto",reversed:!1,allowDuplicatedCategory:!0});function as(e){"@babel/helpers - typeof";return as=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},as(e)}function Rae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Iae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,DS(r.key),r)}}function Dae(e,t,n){return t&&Iae(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Lae(e,t,n){return t=bf(t),Fae(e,RS()?Reflect.construct(t,n||[],bf(e).constructor):t.apply(e,n))}function Fae(e,t){if(t&&(as(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return zae(e)}function zae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function RS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(RS=function(){return!!e})()}function bf(e){return bf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},bf(e)}function Bae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ev(e,t)}function Ev(e,t){return Ev=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Ev(e,t)}function IS(e,t,n){return t=DS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function DS(e){var t=Hae(e,"string");return as(t)=="symbol"?t:t+""}function Hae(e,t){if(as(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(as(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function Tv(){return Tv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Tv.apply(this,arguments)}var Gae=function(t){var n=t.yAxisId,r=Kg(),a=Xg(),o=cS(n);return o==null?null:k.createElement(Ts,Tv({},o,{className:ue("recharts-".concat(o.axisType," ").concat(o.axisType),o.className),viewBox:{x:0,y:0,width:r,height:a},ticksGenerator:function(s){return Er(s,!0)}}))},yt=function(e){function t(){return Rae(this,t),Lae(this,t,arguments)}return Bae(t,e),Dae(t,[{key:"render",value:function(){return k.createElement(Gae,this.props)}}])}(k.Component);IS(yt,"displayName","YAxis");IS(yt,"defaultProps",{allowDuplicatedCategory:!0,allowDecimals:!0,hide:!1,orientation:"left",width:60,height:0,mirror:!1,yAxisId:0,tickCount:5,type:"number",padding:{top:0,bottom:0},allowDataOverflow:!1,scale:"auto",reversed:!1});function R2(e){return Vae(e)||qae(e)||Wae(e)||Uae()}function Uae(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Wae(e,t){if(e){if(typeof e=="string")return jv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return jv(e,t)}}function qae(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Vae(e){if(Array.isArray(e))return jv(e)}function jv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var $v=function(t,n,r,a,o){var i=qt(t,Qg),s=qt(t,Nd),l=[].concat(R2(i),R2(s)),u=qt(t,Rd),p="".concat(a,"Id"),c=a[0],f=n;if(l.length&&(f=l.reduce(function(m,g){if(g.props[p]===r&&mr(g.props,"extendDomain")&&V(g.props[c])){var v=g.props[c];return[Math.min(m[0],v),Math.max(m[1],v)]}return m},f)),u.length){var d="".concat(c,"1"),h="".concat(c,"2");f=u.reduce(function(m,g){if(g.props[p]===r&&mr(g.props,"extendDomain")&&V(g.props[d])&&V(g.props[h])){var v=g.props[d],y=g.props[h];return[Math.min(m[0],v,y),Math.max(m[1],v,y)]}return m},f)}return o&&o.length&&(f=o.reduce(function(m,g){return V(g)?[Math.min(m[0],g),Math.max(m[1],g)]:m},f)),f},LS={exports:{}};(function(e){var t=Object.prototype.hasOwnProperty,n="~";function r(){}Object.create&&(r.prototype=Object.create(null),new r().__proto__||(n=!1));function a(l,u,p){this.fn=l,this.context=u,this.once=p||!1}function o(l,u,p,c,f){if(typeof p!="function")throw new TypeError("The listener must be a function");var d=new a(p,c||l,f),h=n?n+u:u;return l._events[h]?l._events[h].fn?l._events[h]=[l._events[h],d]:l._events[h].push(d):(l._events[h]=d,l._eventsCount++),l}function i(l,u){--l._eventsCount===0?l._events=new r:delete l._events[u]}function s(){this._events=new r,this._eventsCount=0}s.prototype.eventNames=function(){var u=[],p,c;if(this._eventsCount===0)return u;for(c in p=this._events)t.call(p,c)&&u.push(n?c.slice(1):c);return Object.getOwnPropertySymbols?u.concat(Object.getOwnPropertySymbols(p)):u},s.prototype.listeners=function(u){var p=n?n+u:u,c=this._events[p];if(!c)return[];if(c.fn)return[c.fn];for(var f=0,d=c.length,h=new Array(d);f<d;f++)h[f]=c[f].fn;return h},s.prototype.listenerCount=function(u){var p=n?n+u:u,c=this._events[p];return c?c.fn?1:c.length:0},s.prototype.emit=function(u,p,c,f,d,h){var m=n?n+u:u;if(!this._events[m])return!1;var g=this._events[m],v=arguments.length,y,x;if(g.fn){switch(g.once&&this.removeListener(u,g.fn,void 0,!0),v){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,p),!0;case 3:return g.fn.call(g.context,p,c),!0;case 4:return g.fn.call(g.context,p,c,f),!0;case 5:return g.fn.call(g.context,p,c,f,d),!0;case 6:return g.fn.call(g.context,p,c,f,d,h),!0}for(x=1,y=new Array(v-1);x<v;x++)y[x-1]=arguments[x];g.fn.apply(g.context,y)}else{var P=g.length,w;for(x=0;x<P;x++)switch(g[x].once&&this.removeListener(u,g[x].fn,void 0,!0),v){case 1:g[x].fn.call(g[x].context);break;case 2:g[x].fn.call(g[x].context,p);break;case 3:g[x].fn.call(g[x].context,p,c);break;case 4:g[x].fn.call(g[x].context,p,c,f);break;default:if(!y)for(w=1,y=new Array(v-1);w<v;w++)y[w-1]=arguments[w];g[x].fn.apply(g[x].context,y)}}return!0},s.prototype.on=function(u,p,c){return o(this,u,p,c,!1)},s.prototype.once=function(u,p,c){return o(this,u,p,c,!0)},s.prototype.removeListener=function(u,p,c,f){var d=n?n+u:u;if(!this._events[d])return this;if(!p)return i(this,d),this;var h=this._events[d];if(h.fn)h.fn===p&&(!f||h.once)&&(!c||h.context===c)&&i(this,d);else{for(var m=0,g=[],v=h.length;m<v;m++)(h[m].fn!==p||f&&!h[m].once||c&&h[m].context!==c)&&g.push(h[m]);g.length?this._events[d]=g.length===1?g[0]:g:i(this,d)}return this},s.prototype.removeAllListeners=function(u){var p;return u?(p=n?n+u:u,this._events[p]&&i(this,p)):(this._events=new r,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prefixed=n,s.EventEmitter=s,e.exports=s})(LS);var Kae=LS.exports;const Xae=Ae(Kae);var eh=new Xae,th="recharts.syncMouseEvents";function xu(e){"@babel/helpers - typeof";return xu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xu(e)}function Yae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Qae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,FS(r.key),r)}}function Zae(e,t,n){return t&&Qae(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function nh(e,t,n){return t=FS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function FS(e){var t=Jae(e,"string");return xu(t)=="symbol"?t:t+""}function Jae(e,t){if(xu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(xu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var eoe=function(){function e(){Yae(this,e),nh(this,"activeIndex",0),nh(this,"coordinateList",[]),nh(this,"layout","horizontal")}return Zae(e,[{key:"setDetails",value:function(n){var r,a=n.coordinateList,o=a===void 0?null:a,i=n.container,s=i===void 0?null:i,l=n.layout,u=l===void 0?null:l,p=n.offset,c=p===void 0?null:p,f=n.mouseHandlerCallback,d=f===void 0?null:f;this.coordinateList=(r=o??this.coordinateList)!==null&&r!==void 0?r:[],this.container=s??this.container,this.layout=u??this.layout,this.offset=c??this.offset,this.mouseHandlerCallback=d??this.mouseHandlerCallback,this.activeIndex=Math.min(Math.max(this.activeIndex,0),this.coordinateList.length-1)}},{key:"focus",value:function(){this.spoofMouse()}},{key:"keyboardEvent",value:function(n){if(this.coordinateList.length!==0)switch(n.key){case"ArrowRight":{if(this.layout!=="horizontal")return;this.activeIndex=Math.min(this.activeIndex+1,this.coordinateList.length-1),this.spoofMouse();break}case"ArrowLeft":{if(this.layout!=="horizontal")return;this.activeIndex=Math.max(this.activeIndex-1,0),this.spoofMouse();break}}}},{key:"setIndex",value:function(n){this.activeIndex=n}},{key:"spoofMouse",value:function(){var n,r;if(this.layout==="horizontal"&&this.coordinateList.length!==0){var a=this.container.getBoundingClientRect(),o=a.x,i=a.y,s=a.height,l=this.coordinateList[this.activeIndex].coordinate,u=((n=window)===null||n===void 0?void 0:n.scrollX)||0,p=((r=window)===null||r===void 0?void 0:r.scrollY)||0,c=o+l+u,f=i+this.offset.top+s/2+p;this.mouseHandlerCallback({pageX:c,pageY:f})}}}])}();function toe(e,t,n){if(n==="number"&&t===!0&&Array.isArray(e)){var r=e==null?void 0:e[0],a=e==null?void 0:e[1];if(r&&a&&V(r)&&V(a))return!0}return!1}function noe(e,t,n,r){var a=r/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-a:n.left+.5,y:e==="horizontal"?n.top+.5:t.y-a,width:e==="horizontal"?r:n.width-1,height:e==="horizontal"?n.height-1:r}}function zS(e){var t=e.cx,n=e.cy,r=e.radius,a=e.startAngle,o=e.endAngle,i=vt(t,n,r,a),s=vt(t,n,r,o);return{points:[i,s],cx:t,cy:n,radius:r,startAngle:a,endAngle:o}}function roe(e,t,n){var r,a,o,i;if(e==="horizontal")r=t.x,o=r,a=n.top,i=n.top+n.height;else if(e==="vertical")a=t.y,i=a,r=n.left,o=n.left+n.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var s=t.cx,l=t.cy,u=t.innerRadius,p=t.outerRadius,c=t.angle,f=vt(s,l,u,c),d=vt(s,l,p,c);r=f.x,a=f.y,o=d.x,i=d.y}else return zS(t);return[{x:r,y:a},{x:o,y:i}]}function wu(e){"@babel/helpers - typeof";return wu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},wu(e)}function I2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Pc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?I2(Object(n),!0).forEach(function(r){aoe(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):I2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function aoe(e,t,n){return t=ooe(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ooe(e){var t=ioe(e,"string");return wu(t)=="symbol"?t:t+""}function ioe(e,t){if(wu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(wu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function soe(e){var t,n,r=e.element,a=e.tooltipEventType,o=e.isActive,i=e.activeCoordinate,s=e.activePayload,l=e.offset,u=e.activeTooltipIndex,p=e.tooltipAxisBandSize,c=e.layout,f=e.chartName,d=(t=r.props.cursor)!==null&&t!==void 0?t:(n=r.type.defaultProps)===null||n===void 0?void 0:n.cursor;if(!r||!d||!o||!i||f!=="ScatterChart"&&a!=="axis")return null;var h,m=mo;if(f==="ScatterChart")h=i,m=NJ;else if(f==="BarChart")h=noe(c,i,l,p),m=Ug;else if(c==="radial"){var g=zS(i),v=g.cx,y=g.cy,x=g.radius,P=g.startAngle,w=g.endAngle;h={cx:v,cy:y,startAngle:P,endAngle:w,innerRadius:x,outerRadius:x},m=RP}else h={points:roe(c,i,l)},m=mo;var S=Pc(Pc(Pc(Pc({stroke:"#ccc",pointerEvents:"none"},l),h),re(d,!1)),{},{payload:s,payloadIndex:u,className:ue("recharts-tooltip-cursor",d.className)});return k.isValidElement(d)?k.cloneElement(d,S):k.createElement(m,S)}var loe=["item"],uoe=["children","className","width","height","style","compact","title","desc"];function os(e){"@babel/helpers - typeof";return os=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},os(e)}function ai(){return ai=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ai.apply(this,arguments)}function D2(e,t){return foe(e)||poe(e,t)||HS(e,t)||coe()}function coe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function poe(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function foe(e){if(Array.isArray(e))return e}function L2(e,t){if(e==null)return{};var n=doe(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function doe(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function moe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hoe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,GS(r.key),r)}}function voe(e,t,n){return t&&hoe(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function yoe(e,t,n){return t=Pf(t),goe(e,BS()?Reflect.construct(t,n||[],Pf(e).constructor):t.apply(e,n))}function goe(e,t){if(t&&(os(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return xoe(e)}function xoe(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function BS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(BS=function(){return!!e})()}function Pf(e){return Pf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Pf(e)}function woe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Nv(e,t)}function Nv(e,t){return Nv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Nv(e,t)}function is(e){return Soe(e)||Poe(e)||HS(e)||boe()}function boe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function HS(e,t){if(e){if(typeof e=="string")return Mv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Mv(e,t)}}function Poe(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Soe(e){if(Array.isArray(e))return Mv(e)}function Mv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function F2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function z(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?F2(Object(n),!0).forEach(function(r){ee(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):F2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function ee(e,t,n){return t=GS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function GS(e){var t=Ooe(e,"string");return os(t)=="symbol"?t:t+""}function Ooe(e,t){if(os(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(os(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var koe={xAxis:["bottom","top"],yAxis:["left","right"]},_oe={width:"100%",height:"100%"},US={x:0,y:0};function Sc(e){return e}var Coe=function(t,n){return n==="horizontal"?t.x:n==="vertical"?t.y:n==="centric"?t.angle:t.radius},Aoe=function(t,n,r,a){var o=n.find(function(p){return p&&p.index===r});if(o){if(t==="horizontal")return{x:o.coordinate,y:a.y};if(t==="vertical")return{x:a.x,y:o.coordinate};if(t==="centric"){var i=o.coordinate,s=a.radius;return z(z(z({},a),vt(a.cx,a.cy,s,i)),{},{angle:i,radius:s})}var l=o.coordinate,u=a.angle;return z(z(z({},a),vt(a.cx,a.cy,l,u)),{},{angle:u,radius:l})}return US},Ld=function(t,n){var r=n.graphicalItems,a=n.dataStartIndex,o=n.dataEndIndex,i=(r??[]).reduce(function(s,l){var u=l.props.data;return u&&u.length?[].concat(is(s),is(u)):s},[]);return i.length>0?i:t&&t.length&&V(a)&&V(o)?t.slice(a,o+1):[]};function WS(e){return e==="number"?[0,"auto"]:void 0}var Rv=function(t,n,r,a){var o=t.graphicalItems,i=t.tooltipAxis,s=Ld(n,t);return r<0||!o||!o.length||r>=s.length?null:o.reduce(function(l,u){var p,c=(p=u.props.data)!==null&&p!==void 0?p:n;c&&t.dataStartIndex+t.dataEndIndex!==0&&t.dataEndIndex-t.dataStartIndex>=r&&(c=c.slice(t.dataStartIndex,t.dataEndIndex+1));var f;if(i.dataKey&&!i.allowDuplicatedCategory){var d=c===void 0?s:c;f=bp(d,i.dataKey,a)}else f=c&&c[r]||s[r];return f?[].concat(is(l),[$P(u,f)]):l},[])},z2=function(t,n,r,a){var o=a||{x:t.chartX,y:t.chartY},i=Coe(o,r),s=t.orderedTooltipTicks,l=t.tooltipAxis,u=t.tooltipTicks,p=hY(i,s,u,l);if(p>=0&&u){var c=u[p]&&u[p].value,f=Rv(t,n,p,c),d=Aoe(r,s,p,o);return{activeTooltipIndex:p,activeLabel:c,activePayload:f,activeCoordinate:d}}return null},Eoe=function(t,n){var r=n.axes,a=n.graphicalItems,o=n.axisType,i=n.axisIdKey,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,p=t.layout,c=t.children,f=t.stackOffset,d=EP(p,o);return r.reduce(function(h,m){var g,v=m.type.defaultProps!==void 0?z(z({},m.type.defaultProps),m.props):m.props,y=v.type,x=v.dataKey,P=v.allowDataOverflow,w=v.allowDuplicatedCategory,S=v.scale,O=v.ticks,_=v.includeHidden,C=v[i];if(h[C])return h;var j=Ld(t.data,{graphicalItems:a.filter(function(G){var Z,ie=i in G.props?G.props[i]:(Z=G.type.defaultProps)===null||Z===void 0?void 0:Z[i];return ie===C}),dataStartIndex:l,dataEndIndex:u}),E=j.length,T,N,M;toe(v.domain,P,y)&&(T=X0(v.domain,null,P),d&&(y==="number"||S!=="auto")&&(M=ml(j,x,"category")));var I=WS(y);if(!T||T.length===0){var R,L=(R=v.domain)!==null&&R!==void 0?R:I;if(x){if(T=ml(j,x,y),y==="category"&&d){var $=tR(T);w&&$?(N=T,T=of(0,E)):w||(T=mb(L,T,m).reduce(function(G,Z){return G.indexOf(Z)>=0?G:[].concat(is(G),[Z])},[]))}else if(y==="category")w?T=T.filter(function(G){return G!==""&&!te(G)}):T=mb(L,T,m).reduce(function(G,Z){return G.indexOf(Z)>=0||Z===""||te(Z)?G:[].concat(is(G),[Z])},[]);else if(y==="number"){var D=wY(j,a.filter(function(G){var Z,ie,ve=i in G.props?G.props[i]:(Z=G.type.defaultProps)===null||Z===void 0?void 0:Z[i],Pe="hide"in G.props?G.props.hide:(ie=G.type.defaultProps)===null||ie===void 0?void 0:ie.hide;return ve===C&&(_||!Pe)}),x,o,p);D&&(T=D)}d&&(y==="number"||S!=="auto")&&(M=ml(j,x,"category"))}else d?T=of(0,E):s&&s[C]&&s[C].hasStack&&y==="number"?T=f==="expand"?[0,1]:jP(s[C].stackGroups,l,u):T=AP(j,a.filter(function(G){var Z=i in G.props?G.props[i]:G.type.defaultProps[i],ie="hide"in G.props?G.props.hide:G.type.defaultProps.hide;return Z===C&&(_||!ie)}),y,p,!0);if(y==="number")T=$v(c,T,C,o,O),L&&(T=X0(L,T,P));else if(y==="category"&&L){var H=L,W=T.every(function(G){return H.indexOf(G)>=0});W&&(T=H)}}return z(z({},h),{},ee({},C,z(z({},v),{},{axisType:o,domain:T,categoricalDomain:M,duplicateDomain:N,originalDomain:(g=v.domain)!==null&&g!==void 0?g:I,isCategorical:d,layout:p})))},{})},Toe=function(t,n){var r=n.graphicalItems,a=n.Axis,o=n.axisType,i=n.axisIdKey,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,p=t.layout,c=t.children,f=Ld(t.data,{graphicalItems:r,dataStartIndex:l,dataEndIndex:u}),d=f.length,h=EP(p,o),m=-1;return r.reduce(function(g,v){var y=v.type.defaultProps!==void 0?z(z({},v.type.defaultProps),v.props):v.props,x=y[i],P=WS("number");if(!g[x]){m++;var w;return h?w=of(0,d):s&&s[x]&&s[x].hasStack?(w=jP(s[x].stackGroups,l,u),w=$v(c,w,x,o)):(w=X0(P,AP(f,r.filter(function(S){var O,_,C=i in S.props?S.props[i]:(O=S.type.defaultProps)===null||O===void 0?void 0:O[i],j="hide"in S.props?S.props.hide:(_=S.type.defaultProps)===null||_===void 0?void 0:_.hide;return C===x&&!j}),"number",p),a.defaultProps.allowDataOverflow),w=$v(c,w,x,o)),z(z({},g),{},ee({},x,z(z({axisType:o},a.defaultProps),{},{hide:!0,orientation:gn(koe,"".concat(o,".").concat(m%2),null),domain:w,originalDomain:P,isCategorical:h,layout:p})))}return g},{})},joe=function(t,n){var r=n.axisType,a=r===void 0?"xAxis":r,o=n.AxisComp,i=n.graphicalItems,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,p=t.children,c="".concat(a,"Id"),f=qt(p,o),d={};return f&&f.length?d=Eoe(t,{axes:f,graphicalItems:i,axisType:a,axisIdKey:c,stackGroups:s,dataStartIndex:l,dataEndIndex:u}):i&&i.length&&(d=Toe(t,{Axis:o,graphicalItems:i,axisType:a,axisIdKey:c,stackGroups:s,dataStartIndex:l,dataEndIndex:u})),d},$oe=function(t){var n=oa(t),r=Er(n,!1,!0);return{tooltipTicks:r,orderedTooltipTicks:vg(r,function(a){return a.coordinate}),tooltipAxis:n,tooltipAxisBandSize:Yp(n,r)}},B2=function(t){var n=t.children,r=t.defaultShowTooltip,a=Qt(n,Vi),o=0,i=0;return t.data&&t.data.length!==0&&(i=t.data.length-1),a&&a.props&&(a.props.startIndex>=0&&(o=a.props.startIndex),a.props.endIndex>=0&&(i=a.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:o,dataEndIndex:i,activeTooltipIndex:-1,isTooltipActive:!!r}},Noe=function(t){return!t||!t.length?!1:t.some(function(n){var r=jr(n&&n.type);return r&&r.indexOf("Bar")>=0})},H2=function(t){return t==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:t==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:t==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},Moe=function(t,n){var r=t.props,a=t.graphicalItems,o=t.xAxisMap,i=o===void 0?{}:o,s=t.yAxisMap,l=s===void 0?{}:s,u=r.width,p=r.height,c=r.children,f=r.margin||{},d=Qt(c,Vi),h=Qt(c,hi),m=Object.keys(l).reduce(function(w,S){var O=l[S],_=O.orientation;return!O.mirror&&!O.hide?z(z({},w),{},ee({},_,w[_]+O.width)):w},{left:f.left||0,right:f.right||0}),g=Object.keys(i).reduce(function(w,S){var O=i[S],_=O.orientation;return!O.mirror&&!O.hide?z(z({},w),{},ee({},_,gn(w,"".concat(_))+O.height)):w},{top:f.top||0,bottom:f.bottom||0}),v=z(z({},g),m),y=v.bottom;d&&(v.bottom+=d.props.height||Vi.defaultProps.height),h&&n&&(v=gY(v,a,r,n));var x=u-v.left-v.right,P=p-v.top-v.bottom;return z(z({brushBottom:y},v),{},{width:Math.max(x,0),height:Math.max(P,0)})},Roe=function(t,n){if(n==="xAxis")return t[n].width;if(n==="yAxis")return t[n].height},Fd=function(t){var n=t.chartName,r=t.GraphicalChild,a=t.defaultTooltipEventType,o=a===void 0?"axis":a,i=t.validateTooltipEventTypes,s=i===void 0?["axis"]:i,l=t.axisComponents,u=t.legendContent,p=t.formatAxisMap,c=t.defaultProps,f=function(v,y){var x=y.graphicalItems,P=y.stackGroups,w=y.offset,S=y.updateId,O=y.dataStartIndex,_=y.dataEndIndex,C=v.barSize,j=v.layout,E=v.barGap,T=v.barCategoryGap,N=v.maxBarSize,M=H2(j),I=M.numericAxisName,R=M.cateAxisName,L=Noe(x),$=[];return x.forEach(function(D,H){var W=Ld(v.data,{graphicalItems:[D],dataStartIndex:O,dataEndIndex:_}),G=D.type.defaultProps!==void 0?z(z({},D.type.defaultProps),D.props):D.props,Z=G.dataKey,ie=G.maxBarSize,ve=G["".concat(I,"Id")],Pe=G["".concat(R,"Id")],J={},le=l.reduce(function(Ba,Ha){var Wd=y["".concat(Ha.axisType,"Map")],l1=G["".concat(Ha.axisType,"Id")];Wd&&Wd[l1]||Ha.axisType==="zAxis"||Co();var u1=Wd[l1];return z(z({},Ba),{},ee(ee({},Ha.axisType,u1),"".concat(Ha.axisType,"Ticks"),Er(u1)))},J),q=le[R],K=le["".concat(R,"Ticks")],X=P&&P[ve]&&P[ve].hasStack&&$Y(D,P[ve].stackGroups),F=jr(D.type).indexOf("Bar")>=0,pe=Yp(q,K),ne=[],Ne=L&&vY({barSize:C,stackGroups:P,totalSize:Roe(le,R)});if(F){var Me,Ze,Xn=te(ie)?N:ie,On=(Me=(Ze=Yp(q,K,!0))!==null&&Ze!==void 0?Ze:Xn)!==null&&Me!==void 0?Me:0;ne=yY({barGap:E,barCategoryGap:T,bandSize:On!==pe?On:pe,sizeList:Ne[Pe],maxBarSize:Xn}),On!==pe&&(ne=ne.map(function(Ba){return z(z({},Ba),{},{position:z(z({},Ba.position),{},{offset:Ba.position.offset-On/2})})}))}var Fu=D&&D.type&&D.type.getComposedData;Fu&&$.push({props:z(z({},Fu(z(z({},le),{},{displayedData:W,props:v,dataKey:Z,item:D,bandSize:pe,barPosition:ne,offset:w,stackedData:X,layout:j,dataStartIndex:O,dataEndIndex:_}))),{},ee(ee(ee({key:D.key||"item-".concat(H)},I,le[I]),R,le[R]),"animationId",S)),childIndex:mR(D,v.children),item:D})}),$},d=function(v,y){var x=v.props,P=v.dataStartIndex,w=v.dataEndIndex,S=v.updateId;if(!lw({props:x}))return null;var O=x.children,_=x.layout,C=x.stackOffset,j=x.data,E=x.reverseStackOrder,T=H2(_),N=T.numericAxisName,M=T.cateAxisName,I=qt(O,r),R=EY(j,I,"".concat(N,"Id"),"".concat(M,"Id"),C,E),L=l.reduce(function(G,Z){var ie="".concat(Z.axisType,"Map");return z(z({},G),{},ee({},ie,joe(x,z(z({},Z),{},{graphicalItems:I,stackGroups:Z.axisType===N&&R,dataStartIndex:P,dataEndIndex:w}))))},{}),$=Moe(z(z({},L),{},{props:x,graphicalItems:I}),y==null?void 0:y.legendBBox);Object.keys(L).forEach(function(G){L[G]=p(x,L[G],$,G.replace("Map",""),n)});var D=L["".concat(M,"Map")],H=$oe(D),W=f(x,z(z({},L),{},{dataStartIndex:P,dataEndIndex:w,updateId:S,graphicalItems:I,stackGroups:R,offset:$}));return z(z({formattedGraphicalItems:W,graphicalItems:I,offset:$,stackGroups:R},H),L)},h=function(g){function v(y){var x,P,w;return moe(this,v),w=yoe(this,v,[y]),ee(w,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),ee(w,"accessibilityManager",new eoe),ee(w,"handleLegendBBoxUpdate",function(S){if(S){var O=w.state,_=O.dataStartIndex,C=O.dataEndIndex,j=O.updateId;w.setState(z({legendBBox:S},d({props:w.props,dataStartIndex:_,dataEndIndex:C,updateId:j},z(z({},w.state),{},{legendBBox:S}))))}}),ee(w,"handleReceiveSyncEvent",function(S,O,_){if(w.props.syncId===S){if(_===w.eventEmitterSymbol&&typeof w.props.syncMethod!="function")return;w.applySyncEvent(O)}}),ee(w,"handleBrushChange",function(S){var O=S.startIndex,_=S.endIndex;if(O!==w.state.dataStartIndex||_!==w.state.dataEndIndex){var C=w.state.updateId;w.setState(function(){return z({dataStartIndex:O,dataEndIndex:_},d({props:w.props,dataStartIndex:O,dataEndIndex:_,updateId:C},w.state))}),w.triggerSyncEvent({dataStartIndex:O,dataEndIndex:_})}}),ee(w,"handleMouseEnter",function(S){var O=w.getMouseInfo(S);if(O){var _=z(z({},O),{},{isTooltipActive:!0});w.setState(_),w.triggerSyncEvent(_);var C=w.props.onMouseEnter;oe(C)&&C(_,S)}}),ee(w,"triggeredAfterMouseMove",function(S){var O=w.getMouseInfo(S),_=O?z(z({},O),{},{isTooltipActive:!0}):{isTooltipActive:!1};w.setState(_),w.triggerSyncEvent(_);var C=w.props.onMouseMove;oe(C)&&C(_,S)}),ee(w,"handleItemMouseEnter",function(S){w.setState(function(){return{isTooltipActive:!0,activeItem:S,activePayload:S.tooltipPayload,activeCoordinate:S.tooltipPosition||{x:S.cx,y:S.cy}}})}),ee(w,"handleItemMouseLeave",function(){w.setState(function(){return{isTooltipActive:!1}})}),ee(w,"handleMouseMove",function(S){S.persist(),w.throttleTriggeredAfterMouseMove(S)}),ee(w,"handleMouseLeave",function(S){w.throttleTriggeredAfterMouseMove.cancel();var O={isTooltipActive:!1};w.setState(O),w.triggerSyncEvent(O);var _=w.props.onMouseLeave;oe(_)&&_(O,S)}),ee(w,"handleOuterEvent",function(S){var O=dR(S),_=gn(w.props,"".concat(O));if(O&&oe(_)){var C,j;/.*touch.*/i.test(O)?j=w.getMouseInfo(S.changedTouches[0]):j=w.getMouseInfo(S),_((C=j)!==null&&C!==void 0?C:{},S)}}),ee(w,"handleClick",function(S){var O=w.getMouseInfo(S);if(O){var _=z(z({},O),{},{isTooltipActive:!0});w.setState(_),w.triggerSyncEvent(_);var C=w.props.onClick;oe(C)&&C(_,S)}}),ee(w,"handleMouseDown",function(S){var O=w.props.onMouseDown;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"handleMouseUp",function(S){var O=w.props.onMouseUp;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"handleTouchMove",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&w.throttleTriggeredAfterMouseMove(S.changedTouches[0])}),ee(w,"handleTouchStart",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&w.handleMouseDown(S.changedTouches[0])}),ee(w,"handleTouchEnd",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&w.handleMouseUp(S.changedTouches[0])}),ee(w,"handleDoubleClick",function(S){var O=w.props.onDoubleClick;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"handleContextMenu",function(S){var O=w.props.onContextMenu;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"triggerSyncEvent",function(S){w.props.syncId!==void 0&&eh.emit(th,w.props.syncId,S,w.eventEmitterSymbol)}),ee(w,"applySyncEvent",function(S){var O=w.props,_=O.layout,C=O.syncMethod,j=w.state.updateId,E=S.dataStartIndex,T=S.dataEndIndex;if(S.dataStartIndex!==void 0||S.dataEndIndex!==void 0)w.setState(z({dataStartIndex:E,dataEndIndex:T},d({props:w.props,dataStartIndex:E,dataEndIndex:T,updateId:j},w.state)));else if(S.activeTooltipIndex!==void 0){var N=S.chartX,M=S.chartY,I=S.activeTooltipIndex,R=w.state,L=R.offset,$=R.tooltipTicks;if(!L)return;if(typeof C=="function")I=C($,S);else if(C==="value"){I=-1;for(var D=0;D<$.length;D++)if($[D].value===S.activeLabel){I=D;break}}var H=z(z({},L),{},{x:L.left,y:L.top}),W=Math.min(N,H.x+H.width),G=Math.min(M,H.y+H.height),Z=$[I]&&$[I].value,ie=Rv(w.state,w.props.data,I),ve=$[I]?{x:_==="horizontal"?$[I].coordinate:W,y:_==="horizontal"?G:$[I].coordinate}:US;w.setState(z(z({},S),{},{activeLabel:Z,activeCoordinate:ve,activePayload:ie,activeTooltipIndex:I}))}else w.setState(S)}),ee(w,"renderCursor",function(S){var O,_=w.state,C=_.isTooltipActive,j=_.activeCoordinate,E=_.activePayload,T=_.offset,N=_.activeTooltipIndex,M=_.tooltipAxisBandSize,I=w.getTooltipEventType(),R=(O=S.props.active)!==null&&O!==void 0?O:C,L=w.props.layout,$=S.key||"_recharts-cursor";return A.createElement(soe,{key:$,activeCoordinate:j,activePayload:E,activeTooltipIndex:N,chartName:n,element:S,isActive:R,layout:L,offset:T,tooltipAxisBandSize:M,tooltipEventType:I})}),ee(w,"renderPolarAxis",function(S,O,_){var C=gn(S,"type.axisType"),j=gn(w.state,"".concat(C,"Map")),E=S.type.defaultProps,T=E!==void 0?z(z({},E),S.props):S.props,N=j&&j[T["".concat(C,"Id")]];return k.cloneElement(S,z(z({},N),{},{className:ue(C,N.className),key:S.key||"".concat(O,"-").concat(_),ticks:Er(N,!0)}))}),ee(w,"renderPolarGrid",function(S){var O=S.props,_=O.radialLines,C=O.polarAngles,j=O.polarRadius,E=w.state,T=E.radiusAxisMap,N=E.angleAxisMap,M=oa(T),I=oa(N),R=I.cx,L=I.cy,$=I.innerRadius,D=I.outerRadius;return k.cloneElement(S,{polarAngles:Array.isArray(C)?C:Er(I,!0).map(function(H){return H.coordinate}),polarRadius:Array.isArray(j)?j:Er(M,!0).map(function(H){return H.coordinate}),cx:R,cy:L,innerRadius:$,outerRadius:D,key:S.key||"polar-grid",radialLines:_})}),ee(w,"renderLegend",function(){var S=w.state.formattedGraphicalItems,O=w.props,_=O.children,C=O.width,j=O.height,E=w.props.margin||{},T=C-(E.left||0)-(E.right||0),N=_P({children:_,formattedGraphicalItems:S,legendWidth:T,legendContent:u});if(!N)return null;var M=N.item,I=L2(N,loe);return k.cloneElement(M,z(z({},I),{},{chartWidth:C,chartHeight:j,margin:E,onBBoxUpdate:w.handleLegendBBoxUpdate}))}),ee(w,"renderTooltip",function(){var S,O=w.props,_=O.children,C=O.accessibilityLayer,j=Qt(_,Zn);if(!j)return null;var E=w.state,T=E.isTooltipActive,N=E.activeCoordinate,M=E.activePayload,I=E.activeLabel,R=E.offset,L=(S=j.props.active)!==null&&S!==void 0?S:T;return k.cloneElement(j,{viewBox:z(z({},R),{},{x:R.left,y:R.top}),active:L,label:I,payload:L?M:[],coordinate:N,accessibilityLayer:C})}),ee(w,"renderBrush",function(S){var O=w.props,_=O.margin,C=O.data,j=w.state,E=j.offset,T=j.dataStartIndex,N=j.dataEndIndex,M=j.updateId;return k.cloneElement(S,{key:S.key||"_recharts-brush",onChange:gc(w.handleBrushChange,S.props.onChange),data:C,x:V(S.props.x)?S.props.x:E.left,y:V(S.props.y)?S.props.y:E.top+E.height+E.brushBottom-(_.bottom||0),width:V(S.props.width)?S.props.width:E.width,startIndex:T,endIndex:N,updateId:"brush-".concat(M)})}),ee(w,"renderReferenceElement",function(S,O,_){if(!S)return null;var C=w,j=C.clipPathId,E=w.state,T=E.xAxisMap,N=E.yAxisMap,M=E.offset,I=S.type.defaultProps||{},R=S.props,L=R.xAxisId,$=L===void 0?I.xAxisId:L,D=R.yAxisId,H=D===void 0?I.yAxisId:D;return k.cloneElement(S,{key:S.key||"".concat(O,"-").concat(_),xAxis:T[$],yAxis:N[H],viewBox:{x:M.left,y:M.top,width:M.width,height:M.height},clipPathId:j})}),ee(w,"renderActivePoints",function(S){var O=S.item,_=S.activePoint,C=S.basePoint,j=S.childIndex,E=S.isRange,T=[],N=O.props.key,M=O.item.type.defaultProps!==void 0?z(z({},O.item.type.defaultProps),O.item.props):O.item.props,I=M.activeDot,R=M.dataKey,L=z(z({index:j,dataKey:R,cx:_.x,cy:_.y,r:4,fill:Gg(O.item),strokeWidth:2,stroke:"#fff",payload:_.payload,value:_.value},re(I,!1)),Pp(I));return T.push(v.renderActiveDot(I,L,"".concat(N,"-activePoint-").concat(j))),C?T.push(v.renderActiveDot(I,z(z({},L),{},{cx:C.x,cy:C.y}),"".concat(N,"-basePoint-").concat(j))):E&&T.push(null),T}),ee(w,"renderGraphicChild",function(S,O,_){var C=w.filterFormatItem(S,O,_);if(!C)return null;var j=w.getTooltipEventType(),E=w.state,T=E.isTooltipActive,N=E.tooltipAxis,M=E.activeTooltipIndex,I=E.activeLabel,R=w.props.children,L=Qt(R,Zn),$=C.props,D=$.points,H=$.isRange,W=$.baseLine,G=C.item.type.defaultProps!==void 0?z(z({},C.item.type.defaultProps),C.item.props):C.item.props,Z=G.activeDot,ie=G.hide,ve=G.activeBar,Pe=G.activeShape,J=!!(!ie&&T&&L&&(Z||ve||Pe)),le={};j!=="axis"&&L&&L.props.trigger==="click"?le={onClick:gc(w.handleItemMouseEnter,S.props.onClick)}:j!=="axis"&&(le={onMouseLeave:gc(w.handleItemMouseLeave,S.props.onMouseLeave),onMouseEnter:gc(w.handleItemMouseEnter,S.props.onMouseEnter)});var q=k.cloneElement(S,z(z({},C.props),le));function K(Ha){return typeof N.dataKey=="function"?N.dataKey(Ha.payload):null}if(J)if(M>=0){var X,F;if(N.dataKey&&!N.allowDuplicatedCategory){var pe=typeof N.dataKey=="function"?K:"payload.".concat(N.dataKey.toString());X=bp(D,pe,I),F=H&&W&&bp(W,pe,I)}else X=D==null?void 0:D[M],F=H&&W&&W[M];if(Pe||ve){var ne=S.props.activeIndex!==void 0?S.props.activeIndex:M;return[k.cloneElement(S,z(z(z({},C.props),le),{},{activeIndex:ne})),null,null]}if(!te(X))return[q].concat(is(w.renderActivePoints({item:C,activePoint:X,basePoint:F,childIndex:M,isRange:H})))}else{var Ne,Me=(Ne=w.getItemByXY(w.state.activeCoordinate))!==null&&Ne!==void 0?Ne:{graphicalItem:q},Ze=Me.graphicalItem,Xn=Ze.item,On=Xn===void 0?S:Xn,Fu=Ze.childIndex,Ba=z(z(z({},C.props),le),{},{activeIndex:Fu});return[k.cloneElement(On,Ba),null,null]}return H?[q,null,null]:[q,null]}),ee(w,"renderCustomized",function(S,O,_){return k.cloneElement(S,z(z({key:"recharts-customized-".concat(_)},w.props),w.state))}),ee(w,"renderMap",{CartesianGrid:{handler:Sc,once:!0},ReferenceArea:{handler:w.renderReferenceElement},ReferenceLine:{handler:Sc},ReferenceDot:{handler:w.renderReferenceElement},XAxis:{handler:Sc},YAxis:{handler:Sc},Brush:{handler:w.renderBrush,once:!0},Bar:{handler:w.renderGraphicChild},Line:{handler:w.renderGraphicChild},Area:{handler:w.renderGraphicChild},Radar:{handler:w.renderGraphicChild},RadialBar:{handler:w.renderGraphicChild},Scatter:{handler:w.renderGraphicChild},Pie:{handler:w.renderGraphicChild},Funnel:{handler:w.renderGraphicChild},Tooltip:{handler:w.renderCursor,once:!0},PolarGrid:{handler:w.renderPolarGrid,once:!0},PolarAngleAxis:{handler:w.renderPolarAxis},PolarRadiusAxis:{handler:w.renderPolarAxis},Customized:{handler:w.renderCustomized}}),w.clipPathId="".concat((x=y.id)!==null&&x!==void 0?x:$o("recharts"),"-clip"),w.throttleTriggeredAfterMouseMove=_7(w.triggeredAfterMouseMove,(P=y.throttleDelay)!==null&&P!==void 0?P:1e3/60),w.state={},w}return woe(v,g),voe(v,[{key:"componentDidMount",value:function(){var x,P;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(x=this.props.margin.left)!==null&&x!==void 0?x:0,top:(P=this.props.margin.top)!==null&&P!==void 0?P:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var x=this.props,P=x.children,w=x.data,S=x.height,O=x.layout,_=Qt(P,Zn);if(_){var C=_.props.defaultIndex;if(!(typeof C!="number"||C<0||C>this.state.tooltipTicks.length-1)){var j=this.state.tooltipTicks[C]&&this.state.tooltipTicks[C].value,E=Rv(this.state,w,C,j),T=this.state.tooltipTicks[C].coordinate,N=(this.state.offset.top+S)/2,M=O==="horizontal",I=M?{x:T,y:N}:{y:T,x:N},R=this.state.formattedGraphicalItems.find(function($){var D=$.item;return D.type.name==="Scatter"});R&&(I=z(z({},I),R.props.points[C].tooltipPosition),E=R.props.points[C].tooltipPayload);var L={activeTooltipIndex:C,isTooltipActive:!0,activeLabel:j,activePayload:E,activeCoordinate:I};this.setState(L),this.renderCursor(_),this.accessibilityManager.setIndex(C)}}}},{key:"getSnapshotBeforeUpdate",value:function(x,P){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==P.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==x.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==x.margin){var w,S;this.accessibilityManager.setDetails({offset:{left:(w=this.props.margin.left)!==null&&w!==void 0?w:0,top:(S=this.props.margin.top)!==null&&S!==void 0?S:0}})}return null}},{key:"componentDidUpdate",value:function(x){c0([Qt(x.children,Zn)],[Qt(this.props.children,Zn)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var x=Qt(this.props.children,Zn);if(x&&typeof x.props.shared=="boolean"){var P=x.props.shared?"axis":"item";return s.indexOf(P)>=0?P:o}return o}},{key:"getMouseInfo",value:function(x){if(!this.container)return null;var P=this.container,w=P.getBoundingClientRect(),S=BW(w),O={chartX:Math.round(x.pageX-S.left),chartY:Math.round(x.pageY-S.top)},_=w.width/P.offsetWidth||1,C=this.inRange(O.chartX,O.chartY,_);if(!C)return null;var j=this.state,E=j.xAxisMap,T=j.yAxisMap,N=this.getTooltipEventType(),M=z2(this.state,this.props.data,this.props.layout,C);if(N!=="axis"&&E&&T){var I=oa(E).scale,R=oa(T).scale,L=I&&I.invert?I.invert(O.chartX):null,$=R&&R.invert?R.invert(O.chartY):null;return z(z({},O),{},{xValue:L,yValue:$},M)}return M?z(z({},O),M):null}},{key:"inRange",value:function(x,P){var w=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,S=this.props.layout,O=x/w,_=P/w;if(S==="horizontal"||S==="vertical"){var C=this.state.offset,j=O>=C.left&&O<=C.left+C.width&&_>=C.top&&_<=C.top+C.height;return j?{x:O,y:_}:null}var E=this.state,T=E.angleAxisMap,N=E.radiusAxisMap;if(T&&N){var M=oa(T);return yb({x:O,y:_},M)}return null}},{key:"parseEventsOfWrapper",value:function(){var x=this.props.children,P=this.getTooltipEventType(),w=Qt(x,Zn),S={};w&&P==="axis"&&(w.props.trigger==="click"?S={onClick:this.handleClick}:S={onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu});var O=Pp(this.props,this.handleOuterEvent);return z(z({},O),S)}},{key:"addListener",value:function(){eh.on(th,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){eh.removeListener(th,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(x,P,w){for(var S=this.state.formattedGraphicalItems,O=0,_=S.length;O<_;O++){var C=S[O];if(C.item===x||C.props.key===x.key||P===jr(C.item.type)&&w===C.childIndex)return C}return null}},{key:"renderClipPath",value:function(){var x=this.clipPathId,P=this.state.offset,w=P.left,S=P.top,O=P.height,_=P.width;return A.createElement("defs",null,A.createElement("clipPath",{id:x},A.createElement("rect",{x:w,y:S,height:O,width:_})))}},{key:"getXScales",value:function(){var x=this.state.xAxisMap;return x?Object.entries(x).reduce(function(P,w){var S=D2(w,2),O=S[0],_=S[1];return z(z({},P),{},ee({},O,_.scale))},{}):null}},{key:"getYScales",value:function(){var x=this.state.yAxisMap;return x?Object.entries(x).reduce(function(P,w){var S=D2(w,2),O=S[0],_=S[1];return z(z({},P),{},ee({},O,_.scale))},{}):null}},{key:"getXScaleByAxisId",value:function(x){var P;return(P=this.state.xAxisMap)===null||P===void 0||(P=P[x])===null||P===void 0?void 0:P.scale}},{key:"getYScaleByAxisId",value:function(x){var P;return(P=this.state.yAxisMap)===null||P===void 0||(P=P[x])===null||P===void 0?void 0:P.scale}},{key:"getItemByXY",value:function(x){var P=this.state,w=P.formattedGraphicalItems,S=P.activeItem;if(w&&w.length)for(var O=0,_=w.length;O<_;O++){var C=w[O],j=C.props,E=C.item,T=E.type.defaultProps!==void 0?z(z({},E.type.defaultProps),E.props):E.props,N=jr(E.type);if(N==="Bar"){var M=(j.data||[]).find(function($){return SJ(x,$)});if(M)return{graphicalItem:C,payload:M}}else if(N==="RadialBar"){var I=(j.data||[]).find(function($){return yb(x,$)});if(I)return{graphicalItem:C,payload:I}}else if(Ad(C,S)||Ed(C,S)||mu(C,S)){var R=kee({graphicalItem:C,activeTooltipItem:S,itemData:T.data}),L=T.activeIndex===void 0?R:T.activeIndex;return{graphicalItem:z(z({},C),{},{childIndex:L}),payload:mu(C,S)?T.data[R]:C.props.data[R]}}}return null}},{key:"render",value:function(){var x=this;if(!lw(this))return null;var P=this.props,w=P.children,S=P.className,O=P.width,_=P.height,C=P.style,j=P.compact,E=P.title,T=P.desc,N=L2(P,uoe),M=re(N,!1);if(j)return A.createElement(h2,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},A.createElement(f0,ai({},M,{width:O,height:_,title:E,desc:T}),this.renderClipPath(),cw(w,this.renderMap)));if(this.props.accessibilityLayer){var I,R;M.tabIndex=(I=this.props.tabIndex)!==null&&I!==void 0?I:0,M.role=(R=this.props.role)!==null&&R!==void 0?R:"application",M.onKeyDown=function($){x.accessibilityManager.keyboardEvent($)},M.onFocus=function(){x.accessibilityManager.focus()}}var L=this.parseEventsOfWrapper();return A.createElement(h2,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},A.createElement("div",ai({className:ue("recharts-wrapper",S),style:z({position:"relative",cursor:"default",width:O,height:_},C)},L,{ref:function(D){x.container=D}}),A.createElement(f0,ai({},M,{width:O,height:_,title:E,desc:T,style:_oe}),this.renderClipPath(),cw(w,this.renderMap)),this.renderLegend(),this.renderTooltip()))}}])}(k.Component);ee(h,"displayName",n),ee(h,"defaultProps",z({layout:"horizontal",stackOffset:"none",barCategoryGap:"10%",barGap:4,margin:{top:5,right:5,bottom:5,left:5},reverseStackOrder:!1,syncMethod:"index"},c)),ee(h,"getDerivedStateFromProps",function(g,v){var y=g.dataKey,x=g.data,P=g.children,w=g.width,S=g.height,O=g.layout,_=g.stackOffset,C=g.margin,j=v.dataStartIndex,E=v.dataEndIndex;if(v.updateId===void 0){var T=B2(g);return z(z(z({},T),{},{updateId:0},d(z(z({props:g},T),{},{updateId:0}),v)),{},{prevDataKey:y,prevData:x,prevWidth:w,prevHeight:S,prevLayout:O,prevStackOffset:_,prevMargin:C,prevChildren:P})}if(y!==v.prevDataKey||x!==v.prevData||w!==v.prevWidth||S!==v.prevHeight||O!==v.prevLayout||_!==v.prevStackOffset||!mi(C,v.prevMargin)){var N=B2(g),M={chartX:v.chartX,chartY:v.chartY,isTooltipActive:v.isTooltipActive},I=z(z({},z2(v,x,O)),{},{updateId:v.updateId+1}),R=z(z(z({},N),M),I);return z(z(z({},R),d(z({props:g},R),v)),{},{prevDataKey:y,prevData:x,prevWidth:w,prevHeight:S,prevLayout:O,prevStackOffset:_,prevMargin:C,prevChildren:P})}if(!c0(P,v.prevChildren)){var L,$,D,H,W=Qt(P,Vi),G=W&&(L=($=W.props)===null||$===void 0?void 0:$.startIndex)!==null&&L!==void 0?L:j,Z=W&&(D=(H=W.props)===null||H===void 0?void 0:H.endIndex)!==null&&D!==void 0?D:E,ie=G!==j||Z!==E,ve=!te(x),Pe=ve&&!ie?v.updateId:v.updateId+1;return z(z({updateId:Pe},d(z(z({props:g},v),{},{updateId:Pe,dataStartIndex:G,dataEndIndex:Z}),v)),{},{prevChildren:P,dataStartIndex:G,dataEndIndex:Z})}return null}),ee(h,"renderActiveDot",function(g,v,y){var x;return k.isValidElement(g)?x=k.cloneElement(g,v):oe(g)?x=g(v):x=A.createElement(Cd,v),A.createElement(ye,{className:"recharts-active-dot",key:y},x)});var m=k.forwardRef(function(v,y){return A.createElement(h,ai({},v,{ref:y}))});return m.displayName=h.displayName,m},e1=Fd({chartName:"LineChart",GraphicalChild:Rt,axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt}],formatAxisMap:jd}),qS=Fd({chartName:"BarChart",GraphicalChild:Vr,defaultTooltipEventType:"axis",validateTooltipEventTypes:["axis","item"],axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt}],formatAxisMap:jd}),Sf=Fd({chartName:"AreaChart",GraphicalChild:pt,axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt}],formatAxisMap:jd}),Ioe=Fd({chartName:"ComposedChart",GraphicalChild:[Rt,pt,Vr,Dd],axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt},{axisType:"zAxis",AxisComp:Id}],formatAxisMap:jd});const Doe={light:"",dark:".dark"},VS=k.createContext(null);function KS(){const e=k.useContext(VS);if(!e)throw new Error("useChart must be used within a <ChartContainer />");return e}const Fn=k.forwardRef(({id:e,className:t,children:n,config:r,...a},o)=>{const i=k.useId(),s=`chart-${e||i.replace(/:/g,"")}`;return b.jsx(VS.Provider,{value:{config:r},children:b.jsxs("div",{"data-chart":s,ref:o,className:Oe("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",t),...a,children:[b.jsx(Loe,{id:s,config:r}),b.jsx(MW,{children:n})]})})});Fn.displayName="Chart";const Loe=({id:e,config:t})=>{const n=Object.entries(t).filter(([r,a])=>a.theme||a.color);return n.length?b.jsx("style",{dangerouslySetInnerHTML:{__html:Object.entries(Doe).map(([r,a])=>`
 ${a} [data-chart=${e}] {
 ${n.map(([o,i])=>{var l;const s=((l=i.theme)==null?void 0:l[r])||i.color;return s?`  --color-${o}: ${s};`:null}).join(`
 `)}
 }
 `).join(`
-`)}}):null},sr=Zn,zn=k.forwardRef(({active:e,payload:t,className:n,indicator:r="dot",hideLabel:a=!1,hideIndicator:o=!1,label:i,labelFormatter:s,labelClassName:l,formatter:u,color:f,nameKey:c,labelKey:p},d)=>{const{config:h}=WS(),m=k.useMemo(()=>{var w;if(a||!(t!=null&&t.length))return null;const[v]=t,y=`${p||v.dataKey||v.name||"value"}`,x=Iy(h,v,y),P=!p&&typeof i=="string"?((w=h[i])==null?void 0:w.label)||i:x==null?void 0:x.label;return s?b.jsx("div",{className:Oe("font-medium",l),children:s(P,t)}):P?b.jsx("div",{className:Oe("font-medium",l),children:P}):null},[i,s,t,a,l,h,p]);if(!e||!(t!=null&&t.length))return null;const g=t.length===1&&r!=="dot";return b.jsxs("div",{ref:d,className:Oe("grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",n),children:[g?null:m,b.jsx("div",{className:"grid gap-1.5",children:t.map((v,y)=>{const x=`${c||v.name||v.dataKey||"value"}`,P=Iy(h,v,x),w=f||v.payload.fill||v.color;return b.jsx("div",{className:Oe("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",r==="dot"&&"items-center"),children:u&&(v==null?void 0:v.value)!==void 0&&v.name?u(v.value,v.name,v,y,v.payload):b.jsxs(b.Fragment,{children:[P!=null&&P.icon?b.jsx(P.icon,{}):!o&&b.jsx("div",{className:Oe("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",{"h-2.5 w-2.5":r==="dot","w-1":r==="line","w-0 border-[1.5px] border-dashed bg-transparent":r==="dashed","my-0.5":g&&r==="dashed"}),style:{"--color-bg":w,"--color-border":w}}),b.jsxs("div",{className:Oe("flex flex-1 justify-between leading-none",g?"items-end":"items-center"),children:[b.jsxs("div",{className:"grid gap-1.5",children:[g?m:null,b.jsx("span",{className:"text-muted-foreground",children:(P==null?void 0:P.label)||v.name})]}),v.value&&b.jsx("span",{className:"font-mono font-medium tabular-nums text-foreground",children:v.value.toLocaleString()})]})]})},v.dataKey)})})]})});zn.displayName="ChartTooltip";const koe=k.forwardRef(({className:e,hideIcon:t=!1,payload:n,verticalAlign:r="bottom",nameKey:a},o)=>{const{config:i}=WS();return n!=null&&n.length?b.jsx("div",{ref:o,className:Oe("flex items-center justify-center gap-4",r==="top"?"pb-3":"pt-3",e),children:n.map(s=>{const l=`${a||s.dataKey||"value"}`,u=Iy(i,s,l);return b.jsxs("div",{className:Oe("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),children:[u!=null&&u.icon&&!t?b.jsx(u.icon,{}):b.jsx("div",{className:"h-2 w-2 shrink-0 rounded-[2px]",style:{backgroundColor:s.color}}),u==null?void 0:u.label]},s.value)})}):null});koe.displayName="ChartLegend";function Iy(e,t,n){if(typeof t!="object"||t===null)return;const r="payload"in t&&typeof t.payload=="object"&&t.payload!==null?t.payload:void 0;let a=n;return n in t&&typeof t[n]=="string"?a=t[n]:r&&n in r&&typeof r[n]=="string"&&(a=r[n]),a in e?e[a]:e[n]}const _oe={empty:{icon:W4,title:"No Data Available",description:"There is no data to display at the moment."},error:{icon:dT,title:"Failed to Load Data",description:"An error occurred while loading the data. Please try again."},loading:{icon:V4,title:"Loading Data",description:"Please wait while we fetch the latest information."},"no-data":{icon:B4,title:"No Chart Data",description:"No data available to display in the chart."}},Aoe=({type:e="empty",title:t,description:n,action:r,className:a})=>{const o=_oe[e],i=o.icon;return b.jsx(xe,{className:`border-dashed ${a}`,children:b.jsxs(be,{className:"flex flex-col items-center justify-center py-12 px-6 text-center",children:[b.jsx("div",{className:"rounded-full bg-gray-100 p-3 mb-4",children:b.jsx(i,{className:`h-8 w-8 text-gray-400 ${e==="loading"?"animate-spin":""}`})}),b.jsx(we,{className:"text-lg font-medium text-gray-900 mb-2",children:t||o.title}),b.jsx("p",{className:"text-sm text-gray-500 mb-6 max-w-sm",children:n||o.description}),r&&b.jsxs(bf,{onClick:r.onClick,variant:"outline",size:"sm",children:[b.jsx(V4,{className:"h-4 w-4 mr-2"}),r.label]})]})})},Bn=({onRetry:e})=>b.jsx(Aoe,{type:"no-data",title:"No Chart Data",description:"Unable to generate chart with the current data set.",action:e?{label:"Retry",onClick:e}:void 0}),lr=({text:e="Kind Cluster / GitHub CI",position:t="top-center",className:n=""})=>{const r=()=>{switch(t){case"bottom-left":return"bottom-8 left-4";case"bottom-right":return"bottom-8 right-4";case"bottom-center":return"bottom-8 left-1/2 transform -translate-x-1/2";case"top-left":return"top-4 left-4";case"top-right":return"top-4 right-4";case"top-center":return"left-1/2 transform -translate-x-1/2 -translate-y-1/2";default:return"bottom-8 left-1/2 transform -translate-x-1/2"}};return b.jsxs("div",{className:`absolute ${r()} z-10 flex items-center gap-1 px-2 py-1 bg-indigo-600/40 rounded-md border border-gray-200/30 shadow-sm ${n}`,children:[b.jsx(q4,{className:"h-3 w-3 text-white"}),b.jsx("span",{className:"text-xs text-white font-medium",children:e})]})},Coe=({performanceMatrix:e,benchmarkResults:t,testConfiguration:n,performanceSummary:r,latencyPercentileComparison:a})=>{const o=e.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,throughput:Math.round(c.throughput),latency:Number(c.meanLatency.toFixed(1))})),i=t.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,gateway:Math.round(c.resources.envoyGateway.memory.mean),proxy:Math.round(c.resources.envoyProxy.memory.mean),total:Math.round(c.resources.envoyGateway.memory.mean+c.resources.envoyProxy.memory.mean)})),l=(()=>{if(a&&a.length>0){const c=a.filter(p=>p.phase==="scaling-up").sort((p,d)=>d.routes-p.routes)[0];if(c)return[{percentile:"P50",value:Number(c.p50.toFixed(1)),status:"excellent"},{percentile:"P75",value:Number(c.p75.toFixed(1)),status:"excellent"},{percentile:"P90",value:Number(c.p90.toFixed(1)),status:"good"},{percentile:"P95",value:Number(c.p95.toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number(c.p99.toFixed(1)),status:"watch"}]}if(t&&t.length>0){const c=t.filter(p=>p.phase==="scaling-up").sort((p,d)=>d.routes-p.routes)[0];if(c&&c.latency&&c.latency.percentiles){const p=c.latency.percentiles;return[{percentile:"P50",value:Number((p.p50/1e3).toFixed(1)),status:"excellent"},{percentile:"P75",value:Number((p.p75/1e3).toFixed(1)),status:"excellent"},{percentile:"P90",value:Number((p.p90/1e3).toFixed(1)),status:"good"},{percentile:"P95",value:Number((p.p95/1e3).toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number((p.p99/1e3).toFixed(1)),status:"watch"}]}}return null})(),u=i.map(c=>({routes:c.routes,gatewayPerRoute:Number((c.gateway/c.routes).toFixed(2)),proxyPerRoute:Number((c.proxy/c.routes).toFixed(2)),totalPerRoute:Number((c.total/c.routes).toFixed(2))})),f={throughput:{label:"Throughput",color:"#8b5cf6"},latency:{label:"Latency",color:"#6366f1"},gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},totalPerRoute:{label:"Total per Route",color:"#8b5cf6"},gatewayPerRoute:{label:"Gateway per Route",color:"#a855f7"},proxyPerRoute:{label:"Proxy per Route",color:"#4f46e5"}};return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Avg Throughput"}),b.jsx(wT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[Math.round(r.avgThroughput)," RPS"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Mean Response Time"}),b.jsx(U4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[(r.avgLatency/1e3).toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"End-to-end as measured by Nighthawk"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Max Routes in Test"}),b.jsx(X4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:r.maxRoutes}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Routes tested successfully"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Reliability"}),b.jsx(yT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:"100%"}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Perfect system reliability"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Throughput Consistency"}),b.jsx(tn,{children:"Throughput remains stable across different route scales"})]}),b.jsx(be,{children:o&&o.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:f,children:b.jsxs(Sp,{data:o,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{domain:[0,"dataMax"],tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,p)=>[`${c} RPS`,"Throughput"],labelFormatter:c=>`${c} routes`})}),b.jsx(ft,{dataKey:"throughput",type:"monotone",fill:"#8b5cf6",fillOpacity:.4,stroke:"#8b5cf6",strokeWidth:2})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Usage"}),b.jsx(tn,{children:"Memory scaling patterns for Gateway and Proxy components"})]}),b.jsx(be,{children:i&&i.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:f,children:b.jsxs(Sp,{data:i,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}MB`}),b.jsx(sr,{content:b.jsx(zn,{})}),b.jsx(ft,{dataKey:"gateway",stackId:"memory",type:"monotone",fill:"#a855f7",stroke:"#a855f7"}),b.jsx(ft,{dataKey:"proxy",stackId:"memory",type:"monotone",fill:"#4f46e5",stroke:"#4f46e5"})]})})]}):b.jsx(Bn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Distribution"}),b.jsx(tn,{children:"Latency percentiles at 1000 routes (worst case)"})]}),b.jsx(be,{children:l?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:f,children:b.jsxs(GS,{data:l,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,p)=>[`${c}ms`,"Latency"]})}),b.jsx(Vr,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Efficiency"}),b.jsx(tn,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),b.jsx(be,{children:u&&u.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:f,children:b.jsxs(e1,{data:u,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}MB`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,p)=>[`${c}MB per route`,p==="gatewayPerRoute"?"Gateway":p==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:c=>`${c} routes`})}),b.jsx(Rt,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(Rt,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Rt,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):b.jsx(Bn,{})})]})]})]})},Eoe=({latencyPercentileComparison:e,benchmarkResults:t})=>{const n=e.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,p50:Number(c.p50.toFixed(1)),p95:Number(c.p95.toFixed(1)),p99:Number(c.p99.toFixed(1))})),a=(()=>{if(e&&e.length>0){const c=e.filter(p=>p.phase==="scaling-up").sort((p,d)=>d.routes-p.routes)[0];if(c)return[{percentile:"P50",value:Number(c.p50.toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number(c.p75.toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number(c.p90.toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number(c.p95.toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number(c.p99.toFixed(1)),category:"99th",status:"alert"}]}if(t&&t.length>0){const c=t.filter(p=>p.phase==="scaling-up").sort((p,d)=>d.routes-p.routes)[0];if(c&&c.latency&&c.latency.percentiles){const p=c.latency.percentiles;return[{percentile:"P50",value:Number((p.p50/1e3).toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number((p.p75/1e3).toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number((p.p90/1e3).toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number((p.p95/1e3).toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number((p.p99/1e3).toFixed(1)),category:"99th",status:"alert"}]}}return null})(),o=t.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,mean:Number((c.latency.mean/1e3).toFixed(1)),p95:Number((c.latency.percentiles.p95/1e3).toFixed(1)),ratio:Number((c.latency.percentiles.p95/c.latency.mean).toFixed(1))})),s=e&&e.length>0?e.filter(c=>c.phase==="scaling-up").sort((c,p)=>c.routes-p.routes).map(c=>({scale:`${c.routes} Routes`,p50:Number(c.p50.toFixed(1)),p95:Number(c.p95.toFixed(1)),p99:Number(c.p99.toFixed(1))})):null,l={p50:{label:"P50 (Median)",color:"#8b5cf6"},p95:{label:"P95",color:"#6366f1"},p99:{label:"P99",color:"#4f46e5"},mean:{label:"Mean",color:"#a855f7"},ratio:{label:"P95/Mean Ratio",color:"#7c3aed"}},f=(()=>{if(n.length===0)return{medianLatency:0,p95Latency:0,p99Latency:0,consistencyRatio:0};const c=n[n.length-1],p=o.length>0?o.reduce((d,h)=>d+h.ratio,0)/o.length:0;return{medianLatency:(c==null?void 0:c.p50)||0,p95Latency:(c==null?void 0:c.p95)||0,p99Latency:(c==null?void 0:c.p99)||0,consistencyRatio:p}})();return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Median RTT"}),b.jsx(gT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[f.medianLatency.toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"P95 RTT"}),b.jsx(hT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[f.p95Latency.toFixed(1),"ms"]}),b.jsxs("p",{className:"text-xs text-muted-foreground",children:["95% of requests under ",f.p95Latency.toFixed(0),"ms"]})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Tail RTT"}),b.jsx(xT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[f.p99Latency.toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"P99 RTT (1% of requests)"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Consistency"}),b.jsx(G4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[f.consistencyRatio.toFixed(1),":1"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"P95/Mean ratio"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Scaling Behavior"}),b.jsx(tn,{children:"How key percentiles perform as route count increases"})]}),b.jsx(be,{children:n&&n.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:l,children:b.jsxs(Sp,{data:n,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:c=>`${c} routes`})}),b.jsx(ft,{dataKey:"p99",stackId:"latency",type:"monotone",fill:"#4f46e5",fillOpacity:.3,stroke:"#4f46e5",strokeWidth:1}),b.jsx(ft,{dataKey:"p95",stackId:"latency",type:"monotone",fill:"#6366f1",fillOpacity:.4,stroke:"#6366f1",strokeWidth:2}),b.jsx(ft,{dataKey:"p50",stackId:"latency",type:"monotone",fill:"#8b5cf6",fillOpacity:.6,stroke:"#8b5cf6",strokeWidth:3})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Distribution"}),b.jsx(tn,{children:"Percentile breakdown at 1000 routes (worst case scenario)"})]}),b.jsx(be,{children:a?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:l,children:b.jsxs(GS,{data:a,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,p)=>[`${c}ms`,"RTT"],labelFormatter:c=>`${c} Percentile`})}),b.jsx(Vr,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):b.jsx(Bn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Consistency"}),b.jsx(tn,{children:"P95/Mean ratio shows how predictable RTT is"})]}),b.jsx(be,{children:o&&o.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:l,children:b.jsxs(e1,{data:o,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{yAxisId:"ratio",orientation:"left",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}x`}),b.jsx(yt,{yAxisId:"latency",orientation:"right",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:c=>`${c} routes`})}),b.jsx(Rt,{yAxisId:"latency",dataKey:"mean",type:"monotone",stroke:"#a855f7",strokeWidth:2,dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Rt,{yAxisId:"ratio",dataKey:"ratio",type:"monotone",stroke:"#7c3aed",strokeWidth:3,strokeDasharray:"5 5",dot:{fill:"#7c3aed",strokeWidth:2,r:4}})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Performance Summary"}),b.jsx(tn,{children:"RTT performance at different scales"})]}),b.jsx(be,{children:s&&s.length>0?b.jsx("div",{className:"space-y-4",children:s.map((c,p)=>b.jsx("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:b.jsxs("div",{className:"space-y-1",children:[b.jsx("p",{className:"font-medium",children:c.scale}),b.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[b.jsxs("span",{children:["P50: ",c.p50,"ms"]}),b.jsxs("span",{children:["P95: ",c.p95,"ms"]}),b.jsxs("span",{children:["P99: ",c.p99,"ms"]})]})]})},p))}):b.jsx(Bn,{})})]})]})]})},Toe=({resourceTrends:e,benchmarkResults:t})=>{const n=t.filter(p=>p.phase==="scaling-up").map(p=>({routes:p.routes,gateway:Math.round(p.resources.envoyGateway.memory.mean),proxy:Math.round(p.resources.envoyProxy.memory.mean),total:Math.round(p.resources.envoyGateway.memory.mean+p.resources.envoyProxy.memory.mean)})),r=t.filter(p=>p.phase==="scaling-up").map(p=>({routes:p.routes,gatewayMean:Number(p.resources.envoyGateway.cpu.mean.toFixed(1)),gatewayMax:Number(p.resources.envoyGateway.cpu.max.toFixed(1)),proxyMean:Number(p.resources.envoyProxy.cpu.mean.toFixed(1)),proxyMax:Number(p.resources.envoyProxy.cpu.max.toFixed(1))})),a=n.map(p=>({routes:p.routes,gatewayPerRoute:Number((p.gateway/p.routes).toFixed(2)),proxyPerRoute:Number((p.proxy/p.routes).toFixed(2)),totalPerRoute:Number((p.total/p.routes).toFixed(2))})),o=()=>{if(n.length===0)return[{component:"Gateway",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Proxy",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Total",min:0,max:0,scaling:"No Data",efficiency:"Unknown"}];const p=n.map(m=>m.gateway),d=n.map(m=>m.proxy),h=n.map(m=>m.total);return[{component:"Gateway",min:Math.min(...p),max:Math.max(...p),scaling:i(n.map(m=>m.routes),p),efficiency:s(n.map(m=>m.routes),p)},{component:"Proxy",min:Math.min(...d),max:Math.max(...d),scaling:i(n.map(m=>m.routes),d),efficiency:s(n.map(m=>m.routes),d)},{component:"Total",min:Math.min(...h),max:Math.max(...h),scaling:i(n.map(m=>m.routes),h),efficiency:s(n.map(m=>m.routes),h)}]},i=(p,d)=>{if(p.length<3)return"Insufficient Data";const h=p.length,m=p.reduce((N,M)=>N+M,0),g=d.reduce((N,M)=>N+M,0),v=p.reduce((N,M,I)=>N+M*d[I],0),y=p.reduce((N,M)=>N+M*M,0),x=d.reduce((N,M)=>N+M*M,0),P=h*v-m*g,w=Math.sqrt((h*y-m*m)*(h*x-g*g)),S=w===0?0:P/w,O=S*S,_=[];for(let N=1;N<d.length;N++)_.push(d[N]-d[N-1]);const A=_.reduce((N,M)=>N+M,0)/_.length,j=_.reduce((N,M)=>N+Math.pow(M-A,2),0)/_.length,E=Math.sqrt(j),T=A===0?0:Math.abs(E/A);return O>.95?"Highly Linear":O>.85?"Linear":T>1.5?"Step-wise":O>.7?"Moderately Linear":"Variable"},s=(p,d)=>{if(p.length<2)return"Unknown";const h=p.map((w,S)=>d[S]/w),m=h[0],g=h[h.length-1],v=(m-g)/m,y=h.reduce((w,S)=>w+S,0)/h.length,x=h.reduce((w,S)=>w+Math.pow(S-y,2),0)/h.length,P=Math.sqrt(x)/y;return v>.3?"Excellent":v>.1||P<.2?"Good":P<.4?"Moderate":"Variable"},l=o(),u={gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},gatewayMean:{label:"Gateway Mean",color:"#8b5cf6"},gatewayMax:{label:"Gateway Peak",color:"#c084fc"},proxyMean:{label:"Proxy Mean",color:"#6366f1"},proxyMax:{label:"Proxy Peak",color:"#818cf8"}},c=(()=>{if(n.length===0||r.length===0||a.length===0)return{gatewayMemoryRange:"0-0MB",proxyMemoryRange:"0-0MB",peakCPU:0,memoryPerRouteAtScale:0};const p=n.map(S=>S.gateway),d=n.map(S=>S.proxy),h=Math.min(...p),m=Math.max(...p),g=Math.min(...d),v=Math.max(...d),y=r.flatMap(S=>[S.gatewayMax,S.proxyMax]),x=Math.max(...y),P=a[a.length-1],w=(P==null?void 0:P.totalPerRoute)||0;return{gatewayMemoryRange:`${h}-${m}MB`,proxyMemoryRange:`${g}-${v}MB`,peakCPU:Math.round(x),memoryPerRouteAtScale:w}})();return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Gateway Memory"}),b.jsx(W4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:c.gatewayMemoryRange}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Linear scaling pattern"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Proxy Memory"}),b.jsx(K4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:c.proxyMemoryRange}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Efficient step-wise scaling"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Peak CPU"}),b.jsx(z4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[c.peakCPU,"%"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Brief spikes, stable avg"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Efficiency"}),b.jsx(X4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[c.memoryPerRouteAtScale.toFixed(2),"MB"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Memory per route at scale"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Scaling"}),b.jsx(tn,{children:"How Gateway and Proxy memory usage grows with route count"})]}),b.jsx(be,{children:n&&n.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:u,children:b.jsxs(Sp,{data:n,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:p=>`${p}MB`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:p=>`${p} routes`})}),b.jsx(ft,{dataKey:"gateway",stackId:"memory",type:"monotone",fill:"#a855f7",fillOpacity:.6,stroke:"#a855f7",strokeWidth:2}),b.jsx(ft,{dataKey:"proxy",stackId:"memory",type:"monotone",fill:"#4f46e5",fillOpacity:.6,stroke:"#4f46e5",strokeWidth:2})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"CPU Usage Patterns"}),b.jsx(tn,{children:"Mean vs peak CPU usage showing burst characteristics."})]}),b.jsx(be,{children:r&&r.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:u,children:b.jsxs(Poe,{data:r,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:p=>`${p}%`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:p=>`${p} routes`})}),b.jsx(ft,{dataKey:"gatewayMax",type:"monotone",fill:"#c084fc",fillOpacity:.1,stroke:"#c084fc",strokeWidth:1,strokeDasharray:"2 2"}),b.jsx(ft,{dataKey:"proxyMax",type:"monotone",fill:"#818cf8",fillOpacity:.1,stroke:"#818cf8",strokeWidth:1,strokeDasharray:"2 2"}),b.jsx(Rt,{dataKey:"gatewayMean",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(Rt,{dataKey:"proxyMean",type:"monotone",stroke:"#6366f1",strokeWidth:3,dot:{fill:"#6366f1",strokeWidth:2,r:4}})]})})]}):b.jsx(Bn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Efficiency"}),b.jsx(tn,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),b.jsx(be,{children:a&&a.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:u,children:b.jsxs(e1,{data:a,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:p=>`${p}MB`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(p,d)=>[`${p}MB per route`,d==="gatewayPerRoute"?"Gateway":d==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:p=>`${p} routes`})}),b.jsx(Rt,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(Rt,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Rt,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Scaling Summary"}),b.jsx(tn,{children:"Memory usage characteristics and scaling patterns across different components"})]}),b.jsx(be,{children:b.jsx("div",{className:"space-y-4",children:l.map((p,d)=>b.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:[b.jsxs("div",{className:"space-y-1",children:[b.jsx("p",{className:"font-medium",children:p.component}),b.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[b.jsxs("span",{children:["Range: ",p.min,"-",p.max,"MB"]}),b.jsxs("span",{children:["Pattern: ",p.scaling]})]})]}),b.jsxs("div",{className:"flex items-center space-x-2",children:[b.jsx(G4,{className:"h-4 w-4 text-green-600"}),b.jsx("span",{className:"text-sm font-medium text-green-700",children:p.efficiency})]})]},d))})})]})]})]})};var rh="rovingFocusGroup.onEntryFocus",joe={bubbles:!1,cancelable:!0},Lu="RovingFocusGroup",[Dy,qS,$oe]=g6(Lu),[Noe,VS]=ps(Lu,[$oe]),[Moe,Roe]=Noe(Lu),KS=k.forwardRef((e,t)=>b.jsx(Dy.Provider,{scope:e.__scopeRovingFocusGroup,children:b.jsx(Dy.Slot,{scope:e.__scopeRovingFocusGroup,children:b.jsx(Ioe,{...e,ref:t})})}));KS.displayName=Lu;var Ioe=k.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:a=!1,dir:o,currentTabStopId:i,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:l,onEntryFocus:u,preventScrollOnEntryFocus:f=!1,...c}=e,p=k.useRef(null),d=Ye(t,p),h=R0(o),[m,g]=xf({prop:i,defaultProp:s??null,onChange:l,caller:Lu}),[v,y]=k.useState(!1),x=Aa(u),P=qS(n),w=k.useRef(!1),[S,O]=k.useState(0);return k.useEffect(()=>{const _=p.current;if(_)return _.addEventListener(rh,x),()=>_.removeEventListener(rh,x)},[x]),b.jsx(Moe,{scope:n,orientation:r,dir:h,loop:a,currentTabStopId:m,onItemFocus:k.useCallback(_=>g(_),[g]),onItemShiftTab:k.useCallback(()=>y(!0),[]),onFocusableItemAdd:k.useCallback(()=>O(_=>_+1),[]),onFocusableItemRemove:k.useCallback(()=>O(_=>_-1),[]),children:b.jsx(Ee.div,{tabIndex:v||S===0?-1:0,"data-orientation":r,...c,ref:d,style:{outline:"none",...e.style},onMouseDown:pe(e.onMouseDown,()=>{w.current=!0}),onFocus:pe(e.onFocus,_=>{const A=!w.current;if(_.target===_.currentTarget&&A&&!v){const j=new CustomEvent(rh,joe);if(_.currentTarget.dispatchEvent(j),!j.defaultPrevented){const E=P().filter(R=>R.focusable),T=E.find(R=>R.active),N=E.find(R=>R.id===m),I=[T,N,...E].filter(Boolean).map(R=>R.ref.current);QS(I,f)}}w.current=!1}),onBlur:pe(e.onBlur,()=>y(!1))})})}),XS="RovingFocusGroupItem",YS=k.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:a=!1,tabStopId:o,children:i,...s}=e,l=Tu(),u=o||l,f=Roe(XS,n),c=f.currentTabStopId===u,p=qS(n),{onFocusableItemAdd:d,onFocusableItemRemove:h,currentTabStopId:m}=f;return k.useEffect(()=>{if(r)return d(),()=>h()},[r,d,h]),b.jsx(Dy.ItemSlot,{scope:n,id:u,focusable:r,active:a,children:b.jsx(Ee.span,{tabIndex:c?0:-1,"data-orientation":f.orientation,...s,ref:t,onMouseDown:pe(e.onMouseDown,g=>{r?f.onItemFocus(u):g.preventDefault()}),onFocus:pe(e.onFocus,()=>f.onItemFocus(u)),onKeyDown:pe(e.onKeyDown,g=>{if(g.key==="Tab"&&g.shiftKey){f.onItemShiftTab();return}if(g.target!==g.currentTarget)return;const v=Foe(g,f.orientation,f.dir);if(v!==void 0){if(g.metaKey||g.ctrlKey||g.altKey||g.shiftKey)return;g.preventDefault();let x=p().filter(P=>P.focusable).map(P=>P.ref.current);if(v==="last")x.reverse();else if(v==="prev"||v==="next"){v==="prev"&&x.reverse();const P=x.indexOf(g.currentTarget);x=f.loop?zoe(x,P+1):x.slice(P+1)}setTimeout(()=>QS(x))}}),children:typeof i=="function"?i({isCurrentTabStop:c,hasTabStop:m!=null}):i})})});YS.displayName=XS;var Doe={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Loe(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function Foe(e,t,n){const r=Loe(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return Doe[r]}function QS(e,t=!1){const n=document.activeElement;for(const r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function zoe(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var Boe=KS,Hoe=YS;function Goe(e,t){return k.useReducer((n,r)=>t[n][r]??n,e)}var t1=e=>{const{present:t,children:n}=e,r=Uoe(t),a=typeof n=="function"?n({present:r.isPresent}):k.Children.only(n),o=Ye(r.ref,Woe(a));return typeof n=="function"||r.isPresent?k.cloneElement(a,{ref:o}):null};t1.displayName="Presence";function Uoe(e){const[t,n]=k.useState(),r=k.useRef(null),a=k.useRef(e),o=k.useRef("none"),i=e?"mounted":"unmounted",[s,l]=Goe(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return k.useEffect(()=>{const u=Oc(r.current);o.current=s==="mounted"?u:"none"},[s]),jt(()=>{const u=r.current,f=a.current;if(f!==e){const p=o.current,d=Oc(u);e?l("MOUNT"):d==="none"||(u==null?void 0:u.display)==="none"?l("UNMOUNT"):l(f&&p!==d?"ANIMATION_OUT":"UNMOUNT"),a.current=e}},[e,l]),jt(()=>{if(t){let u;const f=t.ownerDocument.defaultView??window,c=d=>{const m=Oc(r.current).includes(d.animationName);if(d.target===t&&m&&(l("ANIMATION_END"),!a.current)){const g=t.style.animationFillMode;t.style.animationFillMode="forwards",u=f.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=g)})}},p=d=>{d.target===t&&(o.current=Oc(r.current))};return t.addEventListener("animationstart",p),t.addEventListener("animationcancel",c),t.addEventListener("animationend",c),()=>{f.clearTimeout(u),t.removeEventListener("animationstart",p),t.removeEventListener("animationcancel",c),t.removeEventListener("animationend",c)}}else l("ANIMATION_END")},[t,l]),{isPresent:["mounted","unmountSuspended"].includes(s),ref:k.useCallback(u=>{r.current=u?getComputedStyle(u):null,n(u)},[])}}function Oc(e){return(e==null?void 0:e.animationName)||"none"}function Woe(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var zd="Tabs",[qoe,dse]=ps(zd,[VS]),ZS=VS(),[Voe,n1]=qoe(zd),JS=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,onValueChange:a,defaultValue:o,orientation:i="horizontal",dir:s,activationMode:l="automatic",...u}=e,f=R0(s),[c,p]=xf({prop:r,onChange:a,defaultProp:o??"",caller:zd});return b.jsx(Voe,{scope:n,baseId:Tu(),value:c,onValueChange:p,orientation:i,dir:f,activationMode:l,children:b.jsx(Ee.div,{dir:f,"data-orientation":i,...u,ref:t})})});JS.displayName=zd;var eO="TabsList",tO=k.forwardRef((e,t)=>{const{__scopeTabs:n,loop:r=!0,...a}=e,o=n1(eO,n),i=ZS(n);return b.jsx(Boe,{asChild:!0,...i,orientation:o.orientation,dir:o.dir,loop:r,children:b.jsx(Ee.div,{role:"tablist","aria-orientation":o.orientation,...a,ref:t})})});tO.displayName=eO;var nO="TabsTrigger",rO=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,disabled:a=!1,...o}=e,i=n1(nO,n),s=ZS(n),l=iO(i.baseId,r),u=sO(i.baseId,r),f=r===i.value;return b.jsx(Hoe,{asChild:!0,...s,focusable:!a,active:f,children:b.jsx(Ee.button,{type:"button",role:"tab","aria-selected":f,"aria-controls":u,"data-state":f?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:l,...o,ref:t,onMouseDown:pe(e.onMouseDown,c=>{!a&&c.button===0&&c.ctrlKey===!1?i.onValueChange(r):c.preventDefault()}),onKeyDown:pe(e.onKeyDown,c=>{[" ","Enter"].includes(c.key)&&i.onValueChange(r)}),onFocus:pe(e.onFocus,()=>{const c=i.activationMode!=="manual";!f&&!a&&c&&i.onValueChange(r)})})})});rO.displayName=nO;var aO="TabsContent",oO=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,forceMount:a,children:o,...i}=e,s=n1(aO,n),l=iO(s.baseId,r),u=sO(s.baseId,r),f=r===s.value,c=k.useRef(f);return k.useEffect(()=>{const p=requestAnimationFrame(()=>c.current=!1);return()=>cancelAnimationFrame(p)},[]),b.jsx(t1,{present:a||f,children:({present:p})=>b.jsx(Ee.div,{"data-state":f?"active":"inactive","data-orientation":s.orientation,role:"tabpanel","aria-labelledby":l,hidden:!p,id:u,tabIndex:0,...i,ref:t,style:{...e.style,animationDuration:c.current?"0s":void 0},children:p&&o})})});oO.displayName=aO;function iO(e,t){return`${e}-trigger-${t}`}function sO(e,t){return`${e}-content-${t}`}var Koe=JS,lO=tO,uO=rO,cO=oO;const Xoe=Koe,fO=k.forwardRef(({className:e,...t},n)=>b.jsx(lO,{ref:n,className:Oe("inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",e),...t}));fO.displayName=lO.displayName;const Bc=k.forwardRef(({className:e,...t},n)=>b.jsx(uO,{ref:n,className:Oe("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",e),...t}));Bc.displayName=uO.displayName;const Hc=k.forwardRef(({className:e,...t},n)=>b.jsx(cO,{ref:n,className:Oe("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));Hc.displayName=cO.displayName;const Yoe={metadata:{version:"1.3.3",runId:"1.3.3-1750189826778",date:"2025-05-09",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5302.05,totalRequests:159067,latency:{min:384,mean:7440,max:68399,pstdev:12191,percentiles:{p50:3692,p75:5903,p80:6670,p90:10777,p95:47519,p99:54405,p999:59346}},resources:{envoyGateway:{memory:{min:126.17,max:126.17,mean:126.17},cpu:{min:.95,max:.95,mean:.95}},envoyProxy:{memory:{min:25.93,max:25.93,mean:25.93},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:358,upstreamConnections:42},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5270.25,totalRequests:158112,latency:{min:392,mean:7067,max:77467,pstdev:12552,percentiles:{p50:3330,p75:5225,p80:5887,p90:8906,p95:49113,p99:55103,p999:60295}},resources:{envoyGateway:{memory:{min:145.89,max:145.89,mean:145.89},cpu:{min:1.66,max:1.66,mean:1.66}},envoyProxy:{memory:{min:32.1,max:32.1,mean:32.1},cpu:{min:60.71,max:60.71,mean:60.71}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5307.61,totalRequests:159230,latency:{min:387,mean:7350,max:76185,pstdev:12732,percentiles:{p50:3508,p75:5524,p80:6220,p90:9652,p95:49100,p99:55363,p999:62654}},resources:{envoyGateway:{memory:{min:153.05,max:153.05,mean:153.05},cpu:{min:3.08,max:3.08,mean:3.08}},envoyProxy:{memory:{min:38.29,max:38.29,mean:38.29},cpu:{min:91.5,max:91.5,mean:91.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5139.63,totalRequests:154189,latency:{min:390,mean:7376,max:78098,pstdev:12993,percentiles:{p50:3429,p75:5431,p80:6116,p90:9633,p95:49809,p99:56043,p999:64651}},resources:{envoyGateway:{memory:{min:152.28,max:152.28,mean:152.28},cpu:{min:15.6,max:15.6,mean:15.6}},envoyProxy:{memory:{min:56.33,max:56.33,mean:56.33},cpu:{min:124.15,max:124.15,mean:124.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5169.8,totalRequests:155094,latency:{min:374,mean:7385,max:105918,pstdev:13085,percentiles:{p50:3382,p75:5336,p80:6024,p90:9658,p95:50104,p99:56487,p999:66418}},resources:{envoyGateway:{memory:{min:166.29,max:166.29,mean:166.29},cpu:{min:28.13,max:28.13,mean:28.13}},envoyProxy:{memory:{min:76.53,max:76.53,mean:76.53},cpu:{min:157.45,max:157.45,mean:157.45}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4963.46,totalRequests:148908,latency:{min:374,mean:7335,max:94580,pstdev:13294,percentiles:{p50:3255,p75:5279,p80:5998,p90:9532,p95:50294,p99:58908,p999:70729}},resources:{envoyGateway:{memory:{min:199.79,max:199.79,mean:199.79},cpu:{min:61.67,max:61.67,mean:61.67}},envoyProxy:{memory:{min:120.77,max:120.77,mean:120.77},cpu:{min:195.1,max:195.1,mean:195.1}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5200.07,totalRequests:156001,latency:{min:395,mean:7530,max:81936,pstdev:13142,percentiles:{p50:3438,p75:5497,p80:6226,p90:10218,p95:50345,p99:56436,p999:61919}},resources:{envoyGateway:{memory:{min:221.87,max:221.87,mean:221.87},cpu:{min:114.77,max:114.77,mean:114.77}},envoyProxy:{memory:{min:121.27,max:121.27,mean:121.27},cpu:{min:356.4,max:356.4,mean:356.4}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5229.66,totalRequests:156893,latency:{min:368,mean:6911,max:72273,pstdev:12396,percentiles:{p50:3227,p75:5075,p80:5695,p90:8751,p95:48676,p99:54822,p999:59865}},resources:{envoyGateway:{memory:{min:221.8,max:221.8,mean:221.8},cpu:{min:114.13,max:114.13,mean:114.13}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:325.9,max:325.9,mean:325.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5099.34,totalRequests:152980,latency:{min:357,mean:6637,max:68100,pstdev:12012,percentiles:{p50:3167,p75:4972,p80:5580,p90:8302,p95:47650,p99:53993,p999:59299}},resources:{envoyGateway:{memory:{min:182.69,max:182.69,mean:182.69},cpu:{min:113.02,max:113.02,mean:113.02}},envoyProxy:{memory:{min:121.2,max:121.2,mean:121.2},cpu:{min:295.3,max:295.3,mean:295.3}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5145.13,totalRequests:154357,latency:{min:379,mean:7234,max:111517,pstdev:12814,percentiles:{p50:3381,p75:5331,p80:5993,p90:9269,p95:49465,p99:55562,p999:64862}},resources:{envoyGateway:{memory:{min:159.09,max:159.09,mean:159.09},cpu:{min:102.57,max:102.57,mean:102.57}},envoyProxy:{memory:{min:121.08,max:121.08,mean:121.08},cpu:{min:263.29,max:263.29,mean:263.29}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5130.95,totalRequests:153929,latency:{min:365,mean:7098,max:95834,pstdev:12843,percentiles:{p50:3267,p75:5110,p80:5752,p90:8975,p95:49702,p99:56408,p999:67330}},resources:{envoyGateway:{memory:{min:163.91,max:163.91,mean:163.91},cpu:{min:91.18,max:91.18,mean:91.18}},envoyProxy:{memory:{min:120.91,max:120.91,mean:120.91},cpu:{min:230.77,max:230.77,mean:230.77}}},poolOverflow:362,upstreamConnections:38}]},Qoe={metadata:{version:"1.4.0",runId:"1.4.0-1750189826781",date:"2025-05-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5433.23,totalRequests:163e3,latency:{min:367,mean:6485,max:65673,pstdev:11042,percentiles:{p50:3222,p75:5166,p80:5879,p90:9253,p95:43970,p99:52201,p999:56854}},resources:{envoyGateway:{memory:{min:128.52,max:156.24,mean:150.28},cpu:{min:.13,max:.67,mean:.44}},envoyProxy:{memory:{min:0,max:27.01,mean:21.73},cpu:{min:0,max:72.36,mean:2.32}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5340.69,totalRequests:160221,latency:{min:355,mean:6582,max:88674,pstdev:11849,percentiles:{p50:3134,p75:4984,p80:5597,p90:8545,p95:46972,p99:53663,p999:59625}},resources:{envoyGateway:{memory:{min:155.3,max:169.25,mean:159.23},cpu:{min:.27,max:4.73,mean:.91}},envoyProxy:{memory:{min:26.64,max:33.18,mean:32.22},cpu:{min:0,max:99.91,mean:11.1}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5205.41,totalRequests:156162,latency:{min:384,mean:4221,max:63500,pstdev:9204,percentiles:{p50:2039,p75:3063,p80:3399,p90:4605,p95:7844,p99:49758,p999:54032}},resources:{envoyGateway:{memory:{min:156.77,max:174.36,mean:168.53},cpu:{min:.4,max:8.8,mean:1.37}},envoyProxy:{memory:{min:32.83,max:37.05,mean:36.58},cpu:{min:0,max:99.97,mean:4.39}}},poolOverflow:377,upstreamConnections:23},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5271.84,totalRequests:158157,latency:{min:393,mean:7209,max:93327,pstdev:12640,percentiles:{p50:3281,p75:5443,p80:6241,p90:10258,p95:48494,p99:55793,p999:65497}},resources:{envoyGateway:{memory:{min:179.66,max:187.8,mean:184.81},cpu:{min:.53,max:27.13,mean:4.87}},envoyProxy:{memory:{min:53.06,max:57.31,mean:56.58},cpu:{min:0,max:99.96,mean:15.82}}},poolOverflow:360,upstreamConnections:40},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5351.64,totalRequests:160555,latency:{min:370,mean:6797,max:91549,pstdev:12276,percentiles:{p50:3145,p75:5052,p80:5728,p90:8916,p95:47915,p99:54947,p999:65368}},resources:{envoyGateway:{memory:{min:186.4,max:200.27,mean:195.8},cpu:{min:.4,max:26.07,mean:1.71}},envoyProxy:{memory:{min:71.16,max:77.36,mean:77},cpu:{min:0,max:94.88,mean:3.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5239.17,totalRequests:157179,latency:{min:367,mean:6908,max:97939,pstdev:12608,percentiles:{p50:3176,p75:5046,p80:5680,p90:8770,p95:48472,p99:56449,p999:68317}},resources:{envoyGateway:{memory:{min:220.03,max:237.27,mean:233.38},cpu:{min:.07,max:1.2,mean:.78}},envoyProxy:{memory:{min:129.13,max:129.59,mean:129.34},cpu:{min:0,max:74.43,mean:2.24}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5409.79,totalRequests:162296,latency:{min:386,mean:6690,max:71688,pstdev:12144,percentiles:{p50:3075,p75:4937,p80:5610,p90:8727,p95:48252,p99:54595,p999:59408}},resources:{envoyGateway:{memory:{min:165.91,max:176.04,mean:168.11},cpu:{min:.67,max:3.73,mean:1.23}},envoyProxy:{memory:{min:123.28,max:123.45,mean:123.35},cpu:{min:0,max:99.72,mean:9.08}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5480.62,totalRequests:164426,latency:{min:378,mean:7119,max:85032,pstdev:12404,percentiles:{p50:3390,p75:5340,p80:6015,p90:9300,p95:48457,p99:55005,p999:60284}},resources:{envoyGateway:{memory:{min:165.36,max:171.88,mean:169.47},cpu:{min:.6,max:6.8,mean:1.44}},envoyProxy:{memory:{min:123.27,max:123.97,mean:123.42},cpu:{min:0,max:100.05,mean:11.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5413.63,totalRequests:162409,latency:{min:357,mean:6664,max:77307,pstdev:12030,percentiles:{p50:3140,p75:4935,p80:5560,p90:8456,p95:47661,p99:54544,p999:61110}},resources:{envoyGateway:{memory:{min:170.86,max:186.68,mean:173.53},cpu:{min:.67,max:67.27,mean:7.29}},envoyProxy:{memory:{min:123.27,max:129.61,mean:124.04},cpu:{min:0,max:100,mean:5.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5356.13,totalRequests:160684,latency:{min:376,mean:6544,max:86540,pstdev:11908,percentiles:{p50:3079,p75:4927,p80:5554,p90:8360,p95:47069,p99:54265,p999:62601}},resources:{envoyGateway:{memory:{min:176.87,max:192.99,mean:189.97},cpu:{min:.6,max:73.6,mean:5.05}},envoyProxy:{memory:{min:129.54,max:129.76,mean:129.65},cpu:{min:0,max:100.08,mean:11.45}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5339.99,totalRequests:160200,latency:{min:395,mean:6772,max:99700,pstdev:12345,percentiles:{p50:3118,p75:4954,p80:5598,p90:8672,p95:48261,p99:55498,p999:65902}},resources:{envoyGateway:{memory:{min:199.81,max:210.76,mean:205.85},cpu:{min:.4,max:31.13,mean:2.01}},envoyProxy:{memory:{min:129.54,max:129.74,mean:129.6},cpu:{min:0,max:99.87,mean:8.99}}},poolOverflow:362,upstreamConnections:38}]},Zoe={metadata:{version:"1.4.1",runId:"1.4.1-1750189826783",date:"2025-06-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5440.31,totalRequests:163209,latency:{min:335,mean:6565,max:66668,pstdev:11480,percentiles:{p50:3258,p75:5079,p80:5722,p90:8679,p95:45924,p99:53512,p999:58220}},resources:{envoyGateway:{memory:{min:128.02,max:151.26,mean:147.41},cpu:{min:.27,max:.67,mean:.45}},envoyProxy:{memory:{min:0,max:26.92,mean:22.58},cpu:{min:0,max:99.73,mean:6.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5429.88,totalRequests:162900,latency:{min:345,mean:6468,max:70791,pstdev:11793,percentiles:{p50:3170,p75:4794,p80:5311,p90:7534,p95:47400,p99:53536,p999:58034}},resources:{envoyGateway:{memory:{min:151.26,max:170.78,mean:161.92},cpu:{min:.4,max:4.33,mean:.97}},envoyProxy:{memory:{min:26.73,max:33.13,mean:31.63},cpu:{min:0,max:99.94,mean:3.35}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5499.86,totalRequests:164996,latency:{min:391,mean:8147,max:99663,pstdev:13319,percentiles:{p50:3957,p75:6308,p80:7120,p90:11799,p95:49942,p99:56190,p999:62709}},resources:{envoyGateway:{memory:{min:161.19,max:165.52,mean:163.96},cpu:{min:.4,max:8.67,mean:1.36}},envoyProxy:{memory:{min:32.98,max:39.18,mean:38.14},cpu:{min:0,max:99.97,mean:8.67}}},poolOverflow:353,upstreamConnections:47},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5335.1,totalRequests:160053,latency:{min:365,mean:6734,max:90963,pstdev:12096,percentiles:{p50:3228,p75:5042,p80:5649,p90:8465,p95:47704,p99:54396,p999:61714}},resources:{envoyGateway:{memory:{min:183.87,max:223.25,mean:206.96},cpu:{min:.47,max:79.87,mean:3.9}},envoyProxy:{memory:{min:57.15,max:57.52,mean:57.34},cpu:{min:0,max:99.97,mean:13.49}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5256.52,totalRequests:157696,latency:{min:389,mean:6320,max:77848,pstdev:11829,percentiles:{p50:2974,p75:4705,p80:5292,p90:7729,p95:47173,p99:54317,p999:64679}},resources:{envoyGateway:{memory:{min:186.16,max:199.19,mean:195.68},cpu:{min:.4,max:1.2,mean:.75}},envoyProxy:{memory:{min:63.26,max:79.43,mean:79.04},cpu:{min:0,max:99.86,mean:17.64}}},poolOverflow:365,upstreamConnections:35},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5280.09,totalRequests:158409,latency:{min:387,mean:6871,max:94064,pstdev:12441,percentiles:{p50:3186,p75:5019,p80:5651,p90:8766,p95:48361,p99:55758,p999:67403}},resources:{envoyGateway:{memory:{min:230.81,max:243.68,mean:238.65},cpu:{min:.13,max:1.13,mean:.8}},envoyProxy:{memory:{min:127.63,max:127.86,mean:127.72},cpu:{min:0,max:85.57,mean:6.19}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5430.18,totalRequests:162909,latency:{min:376,mean:6679,max:79630,pstdev:12142,percentiles:{p50:3147,p75:5015,p80:5630,p90:8374,p95:48377,p99:54654,p999:59858}},resources:{envoyGateway:{memory:{min:164.61,max:169.75,mean:165.39},cpu:{min:.8,max:3.47,mean:1.14}},envoyProxy:{memory:{min:121.22,max:121.61,mean:121.3},cpu:{min:0,max:99.74,mean:8.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5506.49,totalRequests:165195,latency:{min:386,mean:8319,max:85860,pstdev:13567,percentiles:{p50:3951,p75:6305,p80:7155,p90:12741,p95:50714,p99:57303,p999:63928}},resources:{envoyGateway:{memory:{min:165.63,max:175.23,mean:169.06},cpu:{min:.8,max:7.53,mean:1.54}},envoyProxy:{memory:{min:111.91,max:121.36,mean:113.46},cpu:{min:0,max:99.75,mean:7.62}}},poolOverflow:352,upstreamConnections:48},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5452.96,totalRequests:163589,latency:{min:395,mean:7694,max:97460,pstdev:12949,percentiles:{p50:3636,p75:5828,p80:6627,p90:10929,p95:49506,p99:55681,p999:62369}},resources:{envoyGateway:{memory:{min:166.64,max:195.48,mean:174.79},cpu:{min:.8,max:38.2,mean:5.63}},envoyProxy:{memory:{min:111.8,max:112.36,mean:111.95},cpu:{min:0,max:35.17,mean:2.77}}},poolOverflow:356,upstreamConnections:44},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5360.33,totalRequests:160815,latency:{min:354,mean:6538,max:92344,pstdev:12045,percentiles:{p50:3068,p75:4770,p80:5341,p90:7974,p95:47742,p99:54480,p999:62144}},resources:{envoyGateway:{memory:{min:180.27,max:192.65,mean:189.01},cpu:{min:.67,max:46.53,mean:4.41}},envoyProxy:{memory:{min:127.66,max:127.84,mean:127.72},cpu:{min:0,max:100.03,mean:9.14}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5334.03,totalRequests:160024,latency:{min:392,mean:6782,max:132493,pstdev:12373,percentiles:{p50:3182,p75:4977,p80:5586,p90:8359,p95:48365,p99:55252,p999:64712}},resources:{envoyGateway:{memory:{min:203.37,max:217.03,mean:209.04},cpu:{min:.67,max:5.67,mean:1.33}},envoyProxy:{memory:{min:127.65,max:127.84,mean:127.72},cpu:{min:0,max:99.86,mean:9.91}}},poolOverflow:362,upstreamConnections:38}]},Joe={metadata:{version:"1.3.2",runId:"1.3.2-1750189826777",date:"2025-03-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5203.06,totalRequests:156092,latency:{min:371,mean:6970,max:73949,pstdev:12106,percentiles:{p50:3331,p75:5396,p80:6080,p90:9715,p95:47564,p99:55666,p999:60872}},resources:{envoyGateway:{memory:{min:126.68,max:126.68,mean:126.68},cpu:{min:.99,max:.99,mean:.99}},envoyProxy:{memory:{min:28.17,max:28.17,mean:28.17},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5157.35,totalRequests:154724,latency:{min:380,mean:6752,max:83992,pstdev:12526,percentiles:{p50:3089,p75:4875,p80:5484,p90:8253,p95:49682,p99:55398,p999:61507}},resources:{envoyGateway:{memory:{min:129.05,max:129.05,mean:129.05},cpu:{min:1.79,max:1.79,mean:1.79}},envoyProxy:{memory:{min:32.33,max:32.33,mean:32.33},cpu:{min:61.02,max:61.02,mean:61.02}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5052.19,totalRequests:151566,latency:{min:363,mean:7564,max:72122,pstdev:13492,percentiles:{p50:3384,p75:5472,p80:6191,p90:9941,p95:51320,p99:57128,p999:63107}},resources:{envoyGateway:{memory:{min:146.92,max:146.92,mean:146.92},cpu:{min:3.17,max:3.17,mean:3.17}},envoyProxy:{memory:{min:40.52,max:40.52,mean:40.52},cpu:{min:91.79,max:91.79,mean:91.79}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5101.42,totalRequests:153051,latency:{min:397,mean:6832,max:82624,pstdev:12894,percentiles:{p50:2990,p75:4798,p80:5418,p90:8366,p95:50391,p99:56737,p999:65114}},resources:{envoyGateway:{memory:{min:154.98,max:154.98,mean:154.98},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.7,max:58.7,mean:58.7},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:4948.44,totalRequests:148459,latency:{min:398,mean:7200,max:94949,pstdev:13256,percentiles:{p50:3208,p75:5057,p80:5652,p90:8780,p95:50821,p99:57442,p999:66746}},resources:{envoyGateway:{memory:{min:163.01,max:163.01,mean:163.01},cpu:{min:27.68,max:27.68,mean:27.68}},envoyProxy:{memory:{min:78.9,max:78.9,mean:78.9},cpu:{min:158.2,max:158.2,mean:158.2}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4933.76,totalRequests:148015,latency:{min:361,mean:7088,max:127959,pstdev:13349,percentiles:{p50:3052,p75:4885,p80:5529,p90:8785,p95:50700,p99:59123,p999:70660}},resources:{envoyGateway:{memory:{min:196.05,max:196.05,mean:196.05},cpu:{min:62.32,max:62.32,mean:62.32}},envoyProxy:{memory:{min:127.19,max:127.19,mean:127.19},cpu:{min:196.79,max:196.79,mean:196.79}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.93,totalRequests:153515,latency:{min:387,mean:9017,max:78245,pstdev:15046,percentiles:{p50:3922,p75:6583,p80:7609,p90:16301,p95:54007,p99:59990,p999:67956}},resources:{envoyGateway:{memory:{min:210.06,max:210.06,mean:210.06},cpu:{min:115.56,max:115.56,mean:115.56}},envoyProxy:{memory:{min:110.31,max:110.31,mean:110.31},cpu:{min:358.89,max:358.89,mean:358.89}}},poolOverflow:351,upstreamConnections:49},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:4991.13,totalRequests:149734,latency:{min:391,mean:7071,max:80433,pstdev:12841,percentiles:{p50:3199,p75:5005,p80:5635,p90:8730,p95:49813,p99:55756,p999:61407}},resources:{envoyGateway:{memory:{min:199.41,max:199.41,mean:199.41},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:127.44,max:127.44,mean:127.44},cpu:{min:328.33,max:328.33,mean:328.33}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5138.59,totalRequests:154161,latency:{min:377,mean:6954,max:86982,pstdev:13049,percentiles:{p50:3045,p75:4886,p80:5525,p90:8466,p95:51048,p99:56733,p999:62337}},resources:{envoyGateway:{memory:{min:219.76,max:219.76,mean:219.76},cpu:{min:113.71,max:113.71,mean:113.71}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:297.73,max:297.73,mean:297.73}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5051.68,totalRequests:151551,latency:{min:389,mean:7977,max:86577,pstdev:14090,percentiles:{p50:3498,p75:5731,p80:6471,p90:10947,p95:52355,p99:58748,p999:67379}},resources:{envoyGateway:{memory:{min:259.14,max:259.14,mean:259.14},cpu:{min:103.22,max:103.22,mean:103.22}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:265.59,max:265.59,mean:265.59}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:4962.4,totalRequests:148872,latency:{min:384,mean:7209,max:110186,pstdev:13357,percentiles:{p50:3112,p75:5018,p80:5694,p90:9338,p95:51267,p99:57384,p999:67244}},resources:{envoyGateway:{memory:{min:177.76,max:177.76,mean:177.76},cpu:{min:91.86,max:91.86,mean:91.86}},envoyProxy:{memory:{min:127.24,max:127.24,mean:127.24},cpu:{min:233.07,max:233.07,mean:233.07}}},poolOverflow:362,upstreamConnections:38}]},eie={metadata:{version:"1.3.1",runId:"1.3.1-1750189826775",date:"2025-03-05",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5115.35,totalRequests:153465,latency:{min:389,mean:6604,max:74543,pstdev:11843,percentiles:{p50:3094,p75:5007,p80:5671,p90:8723,p95:46997,p99:55033,p999:60336}},resources:{envoyGateway:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:1.04,max:1.04,mean:1.04}},envoyProxy:{memory:{min:25.28,max:25.28,mean:25.28},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5150.43,totalRequests:154513,latency:{min:386,mean:6919,max:87556,pstdev:12645,percentiles:{p50:3126,p75:5009,p80:5646,p90:8620,p95:49580,p99:55326,p999:60073}},resources:{envoyGateway:{memory:{min:151.59,max:151.59,mean:151.59},cpu:{min:1.83,max:1.83,mean:1.83}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5211.7,totalRequests:156354,latency:{min:376,mean:6687,max:88604,pstdev:12657,percentiles:{p50:2913,p75:4676,p80:5309,p90:8259,p95:49930,p99:55853,p999:63514}},resources:{envoyGateway:{memory:{min:145.61,max:145.61,mean:145.61},cpu:{min:3.19,max:3.19,mean:3.19}},envoyProxy:{memory:{min:35.5,max:35.5,mean:35.5},cpu:{min:91.72,max:91.72,mean:91.72}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5066.99,totalRequests:152016,latency:{min:386,mean:7628,max:93048,pstdev:13700,percentiles:{p50:3310,p75:5414,p80:6156,p90:10289,p95:51750,p99:58007,p999:66938}},resources:{envoyGateway:{memory:{min:156.12,max:156.12,mean:156.12},cpu:{min:15.73,max:15.73,mean:15.73}},envoyProxy:{memory:{min:55.56,max:55.56,mean:55.56},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5098.53,totalRequests:152960,latency:{min:373,mean:7203,max:108142,pstdev:13209,percentiles:{p50:3161,p75:5083,p80:5791,p90:9292,p95:50372,p99:56864,p999:67850}},resources:{envoyGateway:{memory:{min:181.23,max:181.23,mean:181.23},cpu:{min:28.35,max:28.35,mean:28.35}},envoyProxy:{memory:{min:73.6,max:73.6,mean:73.6},cpu:{min:158.01,max:158.01,mean:158.01}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5048.96,totalRequests:151469,latency:{min:366,mean:7462,max:99799,pstdev:13676,percentiles:{p50:3122,p75:5245,p80:6050,p90:10398,p95:50685,p99:59639,p999:74547}},resources:{envoyGateway:{memory:{min:196.57,max:196.57,mean:196.57},cpu:{min:61.62,max:61.62,mean:61.62}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:196.43,max:196.43,mean:196.43}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.49,totalRequests:153495,latency:{min:373,mean:7373,max:79749,pstdev:13231,percentiles:{p50:3334,p75:5268,p80:5935,p90:9436,p95:50972,p99:56680,p999:62969}},resources:{envoyGateway:{memory:{min:213.36,max:213.36,mean:213.36},cpu:{min:114.56,max:114.56,mean:114.56}},envoyProxy:{memory:{min:109.79,max:109.79,mean:109.79},cpu:{min:357.84,max:357.84,mean:357.84}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5128.63,totalRequests:153859,latency:{min:380,mean:6787,max:76259,pstdev:12813,percentiles:{p50:2982,p75:4725,p80:5330,p90:8194,p95:50354,p99:56367,p999:61741}},resources:{envoyGateway:{memory:{min:217.34,max:217.34,mean:217.34},cpu:{min:113.9,max:113.9,mean:113.9}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:327.37,max:327.37,mean:327.37}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5217.06,totalRequests:156516,latency:{min:386,mean:7182,max:93491,pstdev:12999,percentiles:{p50:3211,p75:5188,p80:5872,p90:9449,p95:50083,p99:56135,p999:63309}},resources:{envoyGateway:{memory:{min:220.2,max:220.2,mean:220.2},cpu:{min:112.64,max:112.64,mean:112.64}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:296.73,max:296.73,mean:296.73}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5033.4,totalRequests:151002,latency:{min:380,mean:6522,max:92626,pstdev:12472,percentiles:{p50:2849,p75:4643,p80:5272,p90:8064,p95:49350,p99:55799,p999:64323}},resources:{envoyGateway:{memory:{min:201.77,max:201.77,mean:201.77},cpu:{min:102.25,max:102.25,mean:102.25}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:264.74,max:264.74,mean:264.74}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5061.34,totalRequests:151843,latency:{min:393,mean:7429,max:99934,pstdev:13552,percentiles:{p50:3227,p75:5180,p80:5867,p90:9747,p95:51320,p99:58009,p999:68829}},resources:{envoyGateway:{memory:{min:173.04,max:173.04,mean:173.04},cpu:{min:91.12,max:91.12,mean:91.12}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:360,upstreamConnections:40}]},tie={metadata:{version:"1.3.0",runId:"1.3.0-1750189826772",date:"2025-01-31",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5297.23,totalRequests:158917,latency:{min:371,mean:6861,max:69562,pstdev:12096,percentiles:{p50:3223,p75:5219,p80:5926,p90:9360,p95:48029,p99:54945,p999:60096}},resources:{envoyGateway:{memory:{min:116.36,max:116.36,mean:116.36},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:25.3,max:25.3,mean:25.3},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5276.06,totalRequests:158285,latency:{min:372,mean:6781,max:81436,pstdev:12685,percentiles:{p50:3035,p75:4783,p80:5410,p90:8210,p95:50042,p99:55861,p999:61739}},resources:{envoyGateway:{memory:{min:135.97,max:135.97,mean:135.97},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:60.97,max:60.97,mean:60.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5248.15,totalRequests:157445,latency:{min:386,mean:6832,max:83939,pstdev:12879,percentiles:{p50:2957,p75:4826,p80:5504,p90:8587,p95:50454,p99:56524,p999:63150}},resources:{envoyGateway:{memory:{min:128.67,max:128.67,mean:128.67},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:35.62,max:35.62,mean:35.62},cpu:{min:91.69,max:91.69,mean:91.69}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5190.05,totalRequests:155708,latency:{min:374,mean:6735,max:105820,pstdev:12667,percentiles:{p50:2997,p75:4715,p80:5323,p90:8205,p95:49692,p99:56199,p999:64403}},resources:{envoyGateway:{memory:{min:147.27,max:147.27,mean:147.27},cpu:{min:15.8,max:15.8,mean:15.8}},envoyProxy:{memory:{min:61.52,max:61.52,mean:61.52},cpu:{min:124.52,max:124.52,mean:124.52}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5171.63,totalRequests:155149,latency:{min:345,mean:7139,max:89923,pstdev:13210,percentiles:{p50:3191,p75:5039,p80:5680,p90:8824,p95:50767,p99:57397,p999:67665}},resources:{envoyGateway:{memory:{min:158.88,max:158.88,mean:158.88},cpu:{min:28.37,max:28.37,mean:28.37}},envoyProxy:{memory:{min:76,max:76,mean:76},cpu:{min:157.59,max:157.59,mean:157.59}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4998.06,totalRequests:149944,latency:{min:371,mean:6950,max:98525,pstdev:13111,percentiles:{p50:3057,p75:4816,p80:5416,p90:8383,p95:50270,p99:57946,p999:69038}},resources:{envoyGateway:{memory:{min:182.71,max:182.71,mean:182.71},cpu:{min:61.79,max:61.79,mean:61.79}},envoyProxy:{memory:{min:122.12,max:122.12,mean:122.12},cpu:{min:194.7,max:194.7,mean:194.7}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5224.35,totalRequests:156731,latency:{min:376,mean:6870,max:73203,pstdev:12827,percentiles:{p50:3060,p75:4817,p80:5428,p90:8280,p95:50618,p99:56178,p999:61280}},resources:{envoyGateway:{memory:{min:209.85,max:209.85,mean:209.85},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:110.5,max:110.5,mean:110.5},cpu:{min:356.13,max:356.13,mean:356.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5247.75,totalRequests:157436,latency:{min:383,mean:6991,max:88027,pstdev:12998,percentiles:{p50:3091,p75:4901,p80:5532,p90:8568,p95:50655,p99:56272,p999:62160}},resources:{envoyGateway:{memory:{min:208.95,max:208.95,mean:208.95},cpu:{min:114.35,max:114.35,mean:114.35}},envoyProxy:{memory:{min:122.19,max:122.19,mean:122.19},cpu:{min:325.78,max:325.78,mean:325.78}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5201.69,totalRequests:156051,latency:{min:380,mean:7027,max:78663,pstdev:12995,percentiles:{p50:3129,p75:4963,p80:5600,p90:8642,p95:50726,p99:56254,p999:61509}},resources:{envoyGateway:{memory:{min:211.34,max:211.34,mean:211.34},cpu:{min:113.23,max:113.23,mean:113.23}},envoyProxy:{memory:{min:122.17,max:122.17,mean:122.17},cpu:{min:295.15,max:295.15,mean:295.15}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5206.95,totalRequests:156214,latency:{min:386,mean:6893,max:92049,pstdev:12874,percentiles:{p50:3088,p75:4898,p80:5548,p90:8444,p95:50268,p99:56334,p999:65038}},resources:{envoyGateway:{memory:{min:158.73,max:158.73,mean:158.73},cpu:{min:102.79,max:102.79,mean:102.79}},envoyProxy:{memory:{min:122.15,max:122.15,mean:122.15},cpu:{min:263,max:263,mean:263}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5150.23,totalRequests:154507,latency:{min:375,mean:6786,max:84877,pstdev:12812,percentiles:{p50:3009,p75:4734,p80:5340,p90:8236,p95:50247,p99:56647,p999:65042}},resources:{envoyGateway:{memory:{min:168.04,max:168.04,mean:168.04},cpu:{min:91.51,max:91.51,mean:91.51}},envoyProxy:{memory:{min:122.14,max:122.14,mean:122.14},cpu:{min:230.49,max:230.49,mean:230.49}}},poolOverflow:363,upstreamConnections:37}]},nie={metadata:{version:"1.2.8",runId:"1.2.8-1750189826771",date:"2025-03-25",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.8",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.8/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5878.23,totalRequests:176347,latency:{min:376,mean:9154,max:75661,pstdev:14181,percentiles:{p50:4294,p75:7182,p80:8292,p90:22716,p95:52056,p99:58071,p999:64841}},resources:{envoyGateway:{memory:{min:108.89,max:108.89,mean:108.89},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:28.23,max:28.23,mean:28.23},cpu:{min:30.48,max:30.48,mean:30.48}}},poolOverflow:342,upstreamConnections:58},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5582.21,totalRequests:167469,latency:{min:359,mean:6378,max:69967,pstdev:12106,percentiles:{p50:2864,p75:4529,p80:5113,p90:7717,p95:48431,p99:54521,p999:59967}},resources:{envoyGateway:{memory:{min:132.62,max:132.62,mean:132.62},cpu:{min:1.54,max:1.54,mean:1.54}},envoyProxy:{memory:{min:32.39,max:32.39,mean:32.39},cpu:{min:60.99,max:60.99,mean:60.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5454.1,totalRequests:163623,latency:{min:368,mean:6738,max:72437,pstdev:12216,percentiles:{p50:3318,p75:5037,p80:5581,p90:8092,p95:47886,p99:53829,p999:60200}},resources:{envoyGateway:{memory:{min:135.66,max:135.66,mean:135.66},cpu:{min:2.91,max:2.91,mean:2.91}},envoyProxy:{memory:{min:38.6,max:38.6,mean:38.6},cpu:{min:91.91,max:91.91,mean:91.91}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5496.5,totalRequests:164898,latency:{min:375,mean:6453,max:103043,pstdev:12191,percentiles:{p50:2887,p75:4603,p80:5209,p90:7967,p95:48150,p99:54630,p999:63743}},resources:{envoyGateway:{memory:{min:147.15,max:147.15,mean:147.15},cpu:{min:15.47,max:15.47,mean:15.47}},envoyProxy:{memory:{min:60.75,max:60.75,mean:60.75},cpu:{min:125.31,max:125.31,mean:125.31}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5351.8,totalRequests:160554,latency:{min:377,mean:6516,max:93298,pstdev:12549,percentiles:{p50:2857,p75:4496,p80:5076,p90:7615,p95:49512,p99:55822,p999:65318}},resources:{envoyGateway:{memory:{min:155.79,max:155.79,mean:155.79},cpu:{min:28.01,max:28.01,mean:28.01}},envoyProxy:{memory:{min:82.96,max:82.96,mean:82.96},cpu:{min:159.29,max:159.29,mean:159.29}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5102.69,totalRequests:153086,latency:{min:358,mean:6968,max:108298,pstdev:13304,percentiles:{p50:2979,p75:4802,p80:5441,p90:8343,p95:50370,p99:60203,p999:71446}},resources:{envoyGateway:{memory:{min:190.03,max:190.03,mean:190.03},cpu:{min:61.69,max:61.69,mean:61.69}},envoyProxy:{memory:{min:133.22,max:133.22,mean:133.22},cpu:{min:199.84,max:199.84,mean:199.84}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5424.03,totalRequests:162721,latency:{min:362,mean:6570,max:73609,pstdev:12562,percentiles:{p50:2923,p75:4626,p80:5209,p90:7751,p95:49960,p99:55525,p999:60127}},resources:{envoyGateway:{memory:{min:127.89,max:127.89,mean:127.89},cpu:{min:114.69,max:114.69,mean:114.69}},envoyProxy:{memory:{min:112.11,max:112.11,mean:112.11},cpu:{min:363.01,max:363.01,mean:363.01}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5454.96,totalRequests:163653,latency:{min:363,mean:6397,max:73404,pstdev:12347,percentiles:{p50:2884,p75:4452,p80:4989,p90:7300,p95:49477,p99:55369,p999:61495}},resources:{envoyGateway:{memory:{min:136.28,max:136.28,mean:136.28},cpu:{min:114.05,max:114.05,mean:114.05}},envoyProxy:{memory:{min:114.79,max:114.79,mean:114.79},cpu:{min:332.54,max:332.54,mean:332.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5402.5,totalRequests:162075,latency:{min:366,mean:6575,max:127266,pstdev:12484,percentiles:{p50:2940,p75:4600,p80:5162,p90:7727,p95:49549,p99:55334,p999:61478}},resources:{envoyGateway:{memory:{min:140.91,max:140.91,mean:140.91},cpu:{min:112.87,max:112.87,mean:112.87}},envoyProxy:{memory:{min:114.76,max:114.76,mean:114.76},cpu:{min:301.85,max:301.85,mean:301.85}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5498.81,totalRequests:164969,latency:{min:349,mean:6325,max:84213,pstdev:12296,percentiles:{p50:2789,p75:4396,p80:4944,p90:7293,p95:48961,p99:55212,p999:65019}},resources:{envoyGateway:{memory:{min:148.36,max:148.36,mean:148.36},cpu:{min:102.53,max:102.53,mean:102.53}},envoyProxy:{memory:{min:133.35,max:133.35,mean:133.35},cpu:{min:269.43,max:269.43,mean:269.43}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5308.76,totalRequests:159263,latency:{min:361,mean:6727,max:98807,pstdev:12828,percentiles:{p50:2916,p75:4650,p80:5273,p90:8161,p95:49971,p99:56840,p999:67182}},resources:{envoyGateway:{memory:{min:157.93,max:157.93,mean:157.93},cpu:{min:91.26,max:91.26,mean:91.26}},envoyProxy:{memory:{min:133.2,max:133.2,mean:133.2},cpu:{min:236.02,max:236.02,mean:236.02}}},poolOverflow:362,upstreamConnections:38}]},rie={metadata:{version:"1.2.7",runId:"1.2.7-1750189826769",date:"2025-03-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.7",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.7/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5984.83,totalRequests:179545,latency:{min:402,mean:12033,max:92835,pstdev:16725,percentiles:{p50:5655,p75:9809,p80:11804,p90:49971,p95:55760,p99:64241,p999:73961}},resources:{envoyGateway:{memory:{min:112.35,max:112.35,mean:112.35},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:28.29,max:28.29,mean:28.29},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:323,upstreamConnections:77},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5564.85,totalRequests:166949,latency:{min:362,mean:6416,max:73261,pstdev:12268,percentiles:{p50:2855,p75:4514,p80:5094,p90:7660,p95:49031,p99:54939,p999:60436}},resources:{envoyGateway:{memory:{min:125.94,max:125.94,mean:125.94},cpu:{min:1.52,max:1.52,mean:1.52}},envoyProxy:{memory:{min:34.46,max:34.46,mean:34.46},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5618.23,totalRequests:168547,latency:{min:372,mean:6834,max:85766,pstdev:12643,percentiles:{p50:3107,p75:4954,p80:5560,p90:8454,p95:49485,p99:55513,p999:61272}},resources:{envoyGateway:{memory:{min:132.05,max:132.05,mean:132.05},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:40.63,max:40.63,mean:40.63},cpu:{min:92.02,max:92.02,mean:92.02}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5506.26,totalRequests:165193,latency:{min:383,mean:6670,max:85905,pstdev:12677,percentiles:{p50:2946,p75:4659,p80:5243,p90:7891,p95:49846,p99:56096,p999:65185}},resources:{envoyGateway:{memory:{min:146.09,max:146.09,mean:146.09},cpu:{min:15.43,max:15.43,mean:15.43}},envoyProxy:{memory:{min:62.86,max:62.86,mean:62.86},cpu:{min:125.21,max:125.21,mean:125.21}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5580.92,totalRequests:167428,latency:{min:310,mean:6716,max:89178,pstdev:12233,percentiles:{p50:3157,p75:4861,p80:5446,p90:8231,p95:47419,p99:54634,p999:65587}},resources:{envoyGateway:{memory:{min:163.49,max:163.49,mean:163.49},cpu:{min:28.15,max:28.15,mean:28.15}},envoyProxy:{memory:{min:83.07,max:83.07,mean:83.07},cpu:{min:159.15,max:159.15,mean:159.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5298.3,totalRequests:158951,latency:{min:369,mean:6537,max:122015,pstdev:12654,percentiles:{p50:2914,p75:4472,p80:5012,p90:7402,p95:48639,p99:58097,p999:69103}},resources:{envoyGateway:{memory:{min:187.81,max:187.81,mean:187.81},cpu:{min:62.41,max:62.41,mean:62.41}},envoyProxy:{memory:{min:133.27,max:133.27,mean:133.27},cpu:{min:199.13,max:199.13,mean:199.13}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5623.57,totalRequests:168711,latency:{min:380,mean:7190,max:75063,pstdev:13103,percentiles:{p50:3211,p75:5102,p80:5772,p90:9144,p95:50722,p99:56260,p999:61515}},resources:{envoyGateway:{memory:{min:132.38,max:132.38,mean:132.38},cpu:{min:116.08,max:116.08,mean:116.08}},envoyProxy:{memory:{min:128.69,max:128.69,mean:128.69},cpu:{min:362.3,max:362.3,mean:362.3}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5516.59,totalRequests:165498,latency:{min:329,mean:6044,max:69902,pstdev:11632,percentiles:{p50:2893,p75:4337,p80:4790,p90:6742,p95:47155,p99:53372,p999:58073}},resources:{envoyGateway:{memory:{min:144.02,max:144.02,mean:144.02},cpu:{min:115.5,max:115.5,mean:115.5}},envoyProxy:{memory:{min:129.14,max:129.14,mean:129.14},cpu:{min:331.76,max:331.76,mean:331.76}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5515.82,totalRequests:165475,latency:{min:380,mean:6483,max:79159,pstdev:12363,percentiles:{p50:2872,p75:4545,p80:5131,p90:7760,p95:49190,p99:55408,p999:61890}},resources:{envoyGateway:{memory:{min:135.79,max:135.79,mean:135.79},cpu:{min:114.36,max:114.36,mean:114.36}},envoyProxy:{memory:{min:109,max:109,mean:109},cpu:{min:301.13,max:301.13,mean:301.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5403.53,totalRequests:162106,latency:{min:354,mean:6429,max:83423,pstdev:12305,percentiles:{p50:2864,p75:4496,p80:5072,p90:7504,p95:48885,p99:55414,p999:63565}},resources:{envoyGateway:{memory:{min:155.42,max:155.42,mean:155.42},cpu:{min:103.9,max:103.9,mean:103.9}},envoyProxy:{memory:{min:133.59,max:133.59,mean:133.59},cpu:{min:268.85,max:268.85,mean:268.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5405.24,totalRequests:162162,latency:{min:387,mean:6615,max:90812,pstdev:12660,percentiles:{p50:2913,p75:4593,p80:5174,p90:7866,p95:49461,p99:56510,p999:67248}},resources:{envoyGateway:{memory:{min:165.58,max:165.58,mean:165.58},cpu:{min:92.35,max:92.35,mean:92.35}},envoyProxy:{memory:{min:133.42,max:133.42,mean:133.42},cpu:{min:235.87,max:235.87,mean:235.87}}},poolOverflow:362,upstreamConnections:38}]},aie={metadata:{version:"1.2.6",runId:"1.2.6-1750189826767",date:"2025-01-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.6",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.6/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5668.03,totalRequests:170041,latency:{min:354,mean:6713,max:73658,pstdev:11906,percentiles:{p50:3142,p75:5170,p80:5865,p90:9278,p95:47425,p99:54870,p999:59602}},resources:{envoyGateway:{memory:{min:108.82,max:108.82,mean:108.82},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:25.38,max:25.38,mean:25.38},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5542.06,totalRequests:166262,latency:{min:380,mean:6117,max:73658,pstdev:11949,percentiles:{p50:2749,p75:4310,p80:4842,p90:7067,p95:48484,p99:54499,p999:59725}},resources:{envoyGateway:{memory:{min:135.08,max:135.08,mean:135.08},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.53,max:31.53,mean:31.53},cpu:{min:61.17,max:61.17,mean:61.17}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5556.06,totalRequests:166682,latency:{min:363,mean:6439,max:100163,pstdev:12297,percentiles:{p50:2891,p75:4506,p80:5050,p90:7595,p95:49078,p99:54935,p999:60456}},resources:{envoyGateway:{memory:{min:140.09,max:140.09,mean:140.09},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:37.7,max:37.7,mean:37.7},cpu:{min:91.98,max:91.98,mean:91.98}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5462.58,totalRequests:163882,latency:{min:372,mean:6376,max:78544,pstdev:12289,percentiles:{p50:2853,p75:4454,p80:5002,p90:7458,p95:49076,p99:55132,p999:63879}},resources:{envoyGateway:{memory:{min:146.71,max:146.71,mean:146.71},cpu:{min:15.64,max:15.64,mean:15.64}},envoyProxy:{memory:{min:59.89,max:59.89,mean:59.89},cpu:{min:125.41,max:125.41,mean:125.41}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5427.5,totalRequests:162825,latency:{min:359,mean:6562,max:97148,pstdev:12598,percentiles:{p50:2881,p75:4518,p80:5091,p90:7774,p95:49301,p99:56102,p999:67338}},resources:{envoyGateway:{memory:{min:155.26,max:155.26,mean:155.26},cpu:{min:28.52,max:28.52,mean:28.52}},envoyProxy:{memory:{min:82.08,max:82.08,mean:82.08},cpu:{min:159.72,max:159.72,mean:159.72}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5261.62,totalRequests:157849,latency:{min:373,mean:6972,max:115060,pstdev:13251,percentiles:{p50:3015,p75:4770,p80:5385,p90:8293,p95:50296,p99:59930,p999:70590}},resources:{envoyGateway:{memory:{min:188.13,max:188.13,mean:188.13},cpu:{min:61.78,max:61.78,mean:61.78}},envoyProxy:{memory:{min:130.35,max:130.35,mean:130.35},cpu:{min:199.1,max:199.1,mean:199.1}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5543.17,totalRequests:166299,latency:{min:360,mean:6447,max:75276,pstdev:12396,percentiles:{p50:2866,p75:4486,p80:5040,p90:7527,p95:49663,p99:55240,p999:60647}},resources:{envoyGateway:{memory:{min:129.36,max:129.36,mean:129.36},cpu:{min:115.21,max:115.21,mean:115.21}},envoyProxy:{memory:{min:122.58,max:122.58,mean:122.58},cpu:{min:362.6,max:362.6,mean:362.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5522.73,totalRequests:165682,latency:{min:384,mean:6098,max:68321,pstdev:11922,percentiles:{p50:2776,p75:4326,p80:4838,p90:6958,p95:48431,p99:54296,p999:58857}},resources:{envoyGateway:{memory:{min:140.97,max:140.97,mean:140.97},cpu:{min:114.57,max:114.57,mean:114.57}},envoyProxy:{memory:{min:122.83,max:122.83,mean:122.83},cpu:{min:332.12,max:332.12,mean:332.12}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5500.66,totalRequests:165023,latency:{min:360,mean:6301,max:80400,pstdev:12064,percentiles:{p50:2833,p75:4483,p80:5035,p90:7574,p95:48777,p99:54876,p999:60850}},resources:{envoyGateway:{memory:{min:132.45,max:132.45,mean:132.45},cpu:{min:113.5,max:113.5,mean:113.5}},envoyProxy:{memory:{min:122.84,max:122.84,mean:122.84},cpu:{min:301.26,max:301.26,mean:301.26}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5453.33,totalRequests:163603,latency:{min:357,mean:6324,max:86024,pstdev:12138,percentiles:{p50:2842,p75:4429,p80:4967,p90:7393,p95:48201,p99:54683,p999:65251}},resources:{envoyGateway:{memory:{min:150.62,max:150.62,mean:150.62},cpu:{min:103.11,max:103.11,mean:103.11}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:269.03,max:269.03,mean:269.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5402.96,totalRequests:162089,latency:{min:371,mean:6575,max:90804,pstdev:12621,percentiles:{p50:2877,p75:4543,p80:5114,p90:7832,p95:49375,p99:56092,p999:69132}},resources:{envoyGateway:{memory:{min:159.25,max:159.25,mean:159.25},cpu:{min:91.66,max:91.66,mean:91.66}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:235.83,max:235.83,mean:235.83}}},poolOverflow:362,upstreamConnections:38}]},oie={metadata:{version:"1.2.5",runId:"1.2.5-1750189826766",date:"2025-01-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.5",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.5/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5704.46,totalRequests:171136,latency:{min:370,mean:6520,max:74477,pstdev:11781,percentiles:{p50:3051,p75:4913,p80:5565,p90:8700,p95:47091,p99:54638,p999:59404}},resources:{envoyGateway:{memory:{min:112.07,max:112.07,mean:112.07},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:24.38,max:24.38,mean:24.38},cpu:{min:30.47,max:30.47,mean:30.47}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5647.86,totalRequests:169439,latency:{min:379,mean:6313,max:80498,pstdev:11935,percentiles:{p50:2854,p75:4550,p80:5158,p90:7820,p95:48025,p99:54390,p999:60321}},resources:{envoyGateway:{memory:{min:123.4,max:123.4,mean:123.4},cpu:{min:1.48,max:1.48,mean:1.48}},envoyProxy:{memory:{min:30.55,max:30.55,mean:30.55},cpu:{min:61.09,max:61.09,mean:61.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5529.29,totalRequests:165879,latency:{min:379,mean:6240,max:73539,pstdev:12017,percentiles:{p50:2818,p75:4510,p80:5068,p90:7413,p95:48300,p99:54171,p999:59308}},resources:{envoyGateway:{memory:{min:139.7,max:139.7,mean:139.7},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:36.73,max:36.73,mean:36.73},cpu:{min:91.9,max:91.9,mean:91.9}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5542.3,totalRequests:166274,latency:{min:365,mean:6463,max:81305,pstdev:12357,percentiles:{p50:2890,p75:4545,p80:5116,p90:7585,p95:49043,p99:55365,p999:64399}},resources:{envoyGateway:{memory:{min:146.11,max:146.11,mean:146.11},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.91,max:58.91,mean:58.91},cpu:{min:124.96,max:124.96,mean:124.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5407.59,totalRequests:162228,latency:{min:363,mean:6396,max:88236,pstdev:12419,percentiles:{p50:2816,p75:4450,p80:5012,p90:7485,p95:48762,p99:55666,p999:67457}},resources:{envoyGateway:{memory:{min:154.01,max:154.01,mean:154.01},cpu:{min:27.98,max:27.98,mean:27.98}},envoyProxy:{memory:{min:81.11,max:81.11,mean:81.11},cpu:{min:158.85,max:158.85,mean:158.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5247.32,totalRequests:157425,latency:{min:374,mean:6604,max:106491,pstdev:12903,percentiles:{p50:2880,p75:4514,p80:5089,p90:7639,p95:49453,p99:58750,p999:71970}},resources:{envoyGateway:{memory:{min:183.52,max:183.52,mean:183.52},cpu:{min:61.85,max:61.85,mean:61.85}},envoyProxy:{memory:{min:129.33,max:129.33,mean:129.33},cpu:{min:198.98,max:198.98,mean:198.98}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5668.05,totalRequests:170048,latency:{min:366,mean:6143,max:73551,pstdev:12054,percentiles:{p50:2726,p75:4279,p80:4799,p90:7123,p95:48988,p99:54704,p999:58812}},resources:{envoyGateway:{memory:{min:138.57,max:138.57,mean:138.57},cpu:{min:115.2,max:115.2,mean:115.2}},envoyProxy:{memory:{min:121.88,max:121.88,mean:121.88},cpu:{min:361.89,max:361.89,mean:361.89}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5579.16,totalRequests:167375,latency:{min:353,mean:6190,max:87244,pstdev:12028,percentiles:{p50:2803,p75:4357,p80:4889,p90:7110,p95:48482,p99:54329,p999:59113}},resources:{envoyGateway:{memory:{min:132.83,max:132.83,mean:132.83},cpu:{min:114.63,max:114.63,mean:114.63}},envoyProxy:{memory:{min:122.16,max:122.16,mean:122.16},cpu:{min:331.47,max:331.47,mean:331.47}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5581.7,totalRequests:167453,latency:{min:377,mean:6525,max:72724,pstdev:12286,percentiles:{p50:2929,p75:4641,p80:5219,p90:7915,p95:48732,p99:54810,p999:61450}},resources:{envoyGateway:{memory:{min:133.91,max:133.91,mean:133.91},cpu:{min:113.44,max:113.44,mean:113.44}},envoyProxy:{memory:{min:122.02,max:122.02,mean:122.02},cpu:{min:300.79,max:300.79,mean:300.79}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5447.53,totalRequests:163426,latency:{min:368,mean:6540,max:88612,pstdev:12451,percentiles:{p50:2904,p75:4546,p80:5128,p90:7692,p95:49305,p99:55422,p999:64116}},resources:{envoyGateway:{memory:{min:145.28,max:145.28,mean:145.28},cpu:{min:102.98,max:102.98,mean:102.98}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:268.5,max:268.5,mean:268.5}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5437.61,totalRequests:163132,latency:{min:383,mean:6527,max:102998,pstdev:12600,percentiles:{p50:2827,p75:4470,p80:5070,p90:7714,p95:49029,p99:56436,p999:66684}},resources:{envoyGateway:{memory:{min:164.07,max:164.07,mean:164.07},cpu:{min:91.64,max:91.64,mean:91.64}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:235.61,max:235.61,mean:235.61}}},poolOverflow:362,upstreamConnections:38}]},iie={metadata:{version:"1.2.4",runId:"1.2.4-1750189826764",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5982.38,totalRequests:179472,latency:{min:349,mean:6011,max:83349,pstdev:11061,percentiles:{p50:2829,p75:4477,p80:5098,p90:7842,p95:43255,p99:53350,p999:59346}},resources:{envoyGateway:{memory:{min:110.54,max:110.54,mean:110.54},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.44,max:30.44,mean:30.44}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5917.46,totalRequests:177524,latency:{min:361,mean:6164,max:70909,pstdev:11809,percentiles:{p50:2843,p75:4366,p80:4876,p90:7109,p95:47788,p99:54372,p999:59932}},resources:{envoyGateway:{memory:{min:119.89,max:119.89,mean:119.89},cpu:{min:1.61,max:1.61,mean:1.61}},envoyProxy:{memory:{min:30.43,max:30.43,mean:30.43},cpu:{min:61.13,max:61.13,mean:61.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.25,totalRequests:177910,latency:{min:398,mean:6027,max:92041,pstdev:11760,percentiles:{p50:2652,p75:4198,p80:4747,p90:7135,p95:47513,p99:55083,p999:61542}},resources:{envoyGateway:{memory:{min:129.08,max:129.08,mean:129.08},cpu:{min:3.05,max:3.05,mean:3.05}},envoyProxy:{memory:{min:36.57,max:36.57,mean:36.57},cpu:{min:92.01,max:92.01,mean:92.01}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5612.73,totalRequests:168382,latency:{min:368,mean:6361,max:108085,pstdev:12378,percentiles:{p50:2817,p75:4383,p80:4929,p90:7356,p95:48795,p99:56586,p999:68399}},resources:{envoyGateway:{memory:{min:140.63,max:140.63,mean:140.63},cpu:{min:15.35,max:15.35,mean:15.35}},envoyProxy:{memory:{min:58.77,max:58.77,mean:58.77},cpu:{min:125.44,max:125.44,mean:125.44}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5799.01,totalRequests:173974,latency:{min:378,mean:6166,max:97771,pstdev:11964,percentiles:{p50:2818,p75:4251,p80:4742,p90:6922,p95:47560,p99:55281,p999:68112}},resources:{envoyGateway:{memory:{min:152.5,max:152.5,mean:152.5},cpu:{min:28.38,max:28.38,mean:28.38}},envoyProxy:{memory:{min:78.94,max:78.94,mean:78.94},cpu:{min:159.67,max:159.67,mean:159.67}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5474.43,totalRequests:164233,latency:{min:386,mean:6534,max:109809,pstdev:12936,percentiles:{p50:2656,p75:4361,p80:5013,p90:8074,p95:49516,p99:60213,p999:73678}},resources:{envoyGateway:{memory:{min:183.98,max:183.98,mean:183.98},cpu:{min:62.29,max:62.29,mean:62.29}},envoyProxy:{memory:{min:131.16,max:131.16,mean:131.16},cpu:{min:200.46,max:200.46,mean:200.46}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5816.39,totalRequests:174492,latency:{min:340,mean:6131,max:85209,pstdev:11868,percentiles:{p50:2730,p75:4264,p80:4816,p90:7369,p95:47933,p99:54984,p999:61820}},resources:{envoyGateway:{memory:{min:195,max:195,mean:195},cpu:{min:116.53,max:116.53,mean:116.53}},envoyProxy:{memory:{min:120.37,max:120.37,mean:120.37},cpu:{min:363.61,max:363.61,mean:363.61}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5848.8,totalRequests:175470,latency:{min:372,mean:6285,max:77979,pstdev:12136,percentiles:{p50:2760,p75:4334,p80:4906,p90:7492,p95:48553,p99:55732,p999:63037}},resources:{envoyGateway:{memory:{min:205.2,max:205.2,mean:205.2},cpu:{min:115.88,max:115.88,mean:115.88}},envoyProxy:{memory:{min:120.26,max:120.26,mean:120.26},cpu:{min:333.06,max:333.06,mean:333.06}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5897.55,totalRequests:176927,latency:{min:365,mean:6054,max:78041,pstdev:11770,percentiles:{p50:2761,p75:4253,p80:4770,p90:6934,p95:47628,p99:54935,p999:62232}},resources:{envoyGateway:{memory:{min:201.78,max:201.78,mean:201.78},cpu:{min:114.84,max:114.84,mean:114.84}},envoyProxy:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:302.66,max:302.66,mean:302.66}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5764.69,totalRequests:172941,latency:{min:376,mean:6540,max:87822,pstdev:12528,percentiles:{p50:2847,p75:4511,p80:5118,p90:7907,p95:49336,p99:56737,p999:66895}},resources:{envoyGateway:{memory:{min:237.36,max:237.36,mean:237.36},cpu:{min:104.3,max:104.3,mean:104.3}},envoyProxy:{memory:{min:131.2,max:131.2,mean:131.2},cpu:{min:270.32,max:270.32,mean:270.32}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5709.58,totalRequests:171290,latency:{min:350,mean:6172,max:93663,pstdev:11978,percentiles:{p50:2864,p75:4285,p80:4782,p90:6980,p95:47689,p99:55115,p999:67440}},resources:{envoyGateway:{memory:{min:158.41,max:158.41,mean:158.41},cpu:{min:92.69,max:92.69,mean:92.69}},envoyProxy:{memory:{min:131.32,max:131.32,mean:131.32},cpu:{min:236.85,max:236.85,mean:236.85}}},poolOverflow:363,upstreamConnections:37}]},sie={metadata:{version:"1.2.3",runId:"1.2.3-1750189826763",date:"2024-12-02",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6222.52,totalRequests:186680,latency:{min:349,mean:6177,max:70643,pstdev:11464,percentiles:{p50:2879,p75:4520,p80:5082,p90:7684,p95:46213,p99:54147,p999:60250}},resources:{envoyGateway:{memory:{min:110.2,max:110.2,mean:110.2},cpu:{min:.68,max:.68,mean:.68}},envoyProxy:{memory:{min:25.89,max:25.89,mean:25.89},cpu:{min:30.33,max:30.33,mean:30.33}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6170.38,totalRequests:185112,latency:{min:370,mean:5770,max:72798,pstdev:11358,percentiles:{p50:2657,p75:4054,p80:4535,p90:6537,p95:46632,p99:53751,p999:59174}},resources:{envoyGateway:{memory:{min:122.48,max:122.48,mean:122.48},cpu:{min:1.42,max:1.42,mean:1.42}},envoyProxy:{memory:{min:32.05,max:32.05,mean:32.05},cpu:{min:60.88,max:60.88,mean:60.88}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6085.51,totalRequests:182567,latency:{min:365,mean:5863,max:84721,pstdev:11540,percentiles:{p50:2605,p75:4127,p80:4662,p90:7048,p95:46759,p99:54556,p999:61736}},resources:{envoyGateway:{memory:{min:131.06,max:131.06,mean:131.06},cpu:{min:2.8,max:2.8,mean:2.8}},envoyProxy:{memory:{min:38.19,max:38.19,mean:38.19},cpu:{min:91.64,max:91.64,mean:91.64}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6032.83,totalRequests:180985,latency:{min:362,mean:6079,max:79421,pstdev:11806,percentiles:{p50:2707,p75:4272,p80:4832,p90:7327,p95:47441,p99:54743,p999:65808}},resources:{envoyGateway:{memory:{min:142.98,max:142.98,mean:142.98},cpu:{min:15.04,max:15.04,mean:15.04}},envoyProxy:{memory:{min:60.39,max:60.39,mean:60.39},cpu:{min:124.47,max:124.47,mean:124.47}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5773.98,totalRequests:173223,latency:{min:344,mean:6360,max:79355,pstdev:12473,percentiles:{p50:2707,p75:4299,p80:4888,p90:7643,p95:49309,p99:57382,p999:68141}},resources:{envoyGateway:{memory:{min:160.84,max:160.84,mean:160.84},cpu:{min:27.66,max:27.66,mean:27.66}},envoyProxy:{memory:{min:80.58,max:80.58,mean:80.58},cpu:{min:156.97,max:156.97,mean:156.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5776.08,totalRequests:173283,latency:{min:361,mean:6194,max:89714,pstdev:12241,percentiles:{p50:2703,p75:4241,p80:4791,p90:7296,p95:47755,p99:58537,p999:70676}},resources:{envoyGateway:{memory:{min:186.49,max:186.49,mean:186.49},cpu:{min:61.39,max:61.39,mean:61.39}},envoyProxy:{memory:{min:130.82,max:130.82,mean:130.82},cpu:{min:196.17,max:196.17,mean:196.17}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6128.86,totalRequests:183866,latency:{min:351,mean:5824,max:73633,pstdev:11470,percentiles:{p50:2578,p75:4038,p80:4570,p90:6823,p95:46927,p99:54392,p999:60213}},resources:{envoyGateway:{memory:{min:218.36,max:218.36,mean:218.36},cpu:{min:114.4,max:114.4,mean:114.4}},envoyProxy:{memory:{min:118.8,max:118.8,mean:118.8},cpu:{min:358.03,max:358.03,mean:358.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6065.62,totalRequests:181969,latency:{min:378,mean:5877,max:82526,pstdev:11643,percentiles:{p50:2588,p75:4048,p80:4587,p90:6876,p95:47429,p99:54710,p999:62111}},resources:{envoyGateway:{memory:{min:222.42,max:222.42,mean:222.42},cpu:{min:113.86,max:113.86,mean:113.86}},envoyProxy:{memory:{min:119.23,max:119.23,mean:119.23},cpu:{min:327.6,max:327.6,mean:327.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6045.71,totalRequests:181360,latency:{min:388,mean:6024,max:80216,pstdev:11596,percentiles:{p50:2802,p75:4253,p80:4761,p90:6951,p95:47183,p99:54065,p999:59455}},resources:{envoyGateway:{memory:{min:142.37,max:142.37,mean:142.37},cpu:{min:112.77,max:112.77,mean:112.77}},envoyProxy:{memory:{min:119.54,max:119.54,mean:119.54},cpu:{min:296.95,max:296.95,mean:296.95}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5956.66,totalRequests:178700,latency:{min:379,mean:6153,max:85528,pstdev:12032,percentiles:{p50:2640,p75:4362,p80:4961,p90:7625,p95:47886,p99:55965,p999:65695}},resources:{envoyGateway:{memory:{min:148.72,max:148.72,mean:148.72},cpu:{min:102.49,max:102.49,mean:102.49}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:264.96,max:264.96,mean:264.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5958.61,totalRequests:178765,latency:{min:362,mean:5967,max:83480,pstdev:11671,percentiles:{p50:2714,p75:4156,p80:4658,p90:6839,p95:46901,p99:54601,p999:65464}},resources:{envoyGateway:{memory:{min:164.87,max:164.87,mean:164.87},cpu:{min:91.25,max:91.25,mean:91.25}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:363,upstreamConnections:37}]},lie={metadata:{version:"1.2.2",runId:"1.2.2-1750189826761",date:"2024-11-28",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6249.74,totalRequests:187495,latency:{min:333,mean:5937,max:75075,pstdev:10895,percentiles:{p50:2840,p75:4501,p80:5077,p90:7640,p95:41435,p99:53243,p999:58066}},resources:{envoyGateway:{memory:{min:106.26,max:106.26,mean:106.26},cpu:{min:.73,max:.73,mean:.73}},envoyProxy:{memory:{min:26.09,max:26.09,mean:26.09},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6140.58,totalRequests:184222,latency:{min:373,mean:5812,max:79740,pstdev:11513,percentiles:{p50:2590,p75:4071,p80:4583,p90:6812,p95:46811,p99:54179,p999:61151}},resources:{envoyGateway:{memory:{min:131.24,max:131.24,mean:131.24},cpu:{min:1.34,max:1.34,mean:1.34}},envoyProxy:{memory:{min:32.26,max:32.26,mean:32.26},cpu:{min:60.74,max:60.74,mean:60.74}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6149.72,totalRequests:184494,latency:{min:366,mean:5813,max:89935,pstdev:11434,percentiles:{p50:2637,p75:4073,p80:4561,p90:6680,p95:46505,p99:53872,p999:60348}},resources:{envoyGateway:{memory:{min:133.05,max:133.05,mean:133.05},cpu:{min:2.75,max:2.75,mean:2.75}},envoyProxy:{memory:{min:38.38,max:38.38,mean:38.38},cpu:{min:91.57,max:91.57,mean:91.57}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6076.78,totalRequests:182305,latency:{min:361,mean:6031,max:87502,pstdev:11819,percentiles:{p50:2675,p75:4203,p80:4751,p90:7118,p95:47147,p99:55078,p999:67106}},resources:{envoyGateway:{memory:{min:153.62,max:153.62,mean:153.62},cpu:{min:14.77,max:14.77,mean:14.77}},envoyProxy:{memory:{min:60.45,max:60.45,mean:60.45},cpu:{min:124.04,max:124.04,mean:124.04}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5928.89,totalRequests:177873,latency:{min:336,mean:6196,max:85643,pstdev:12032,percentiles:{p50:2803,p75:4338,p80:4852,p90:7143,p95:47726,p99:55619,p999:67780}},resources:{envoyGateway:{memory:{min:145.79,max:145.79,mean:145.79},cpu:{min:27.17,max:27.17,mean:27.17}},envoyProxy:{memory:{min:80.64,max:80.64,mean:80.64},cpu:{min:157.65,max:157.65,mean:157.65}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5843.64,totalRequests:175314,latency:{min:339,mean:6452,max:101912,pstdev:12482,percentiles:{p50:2790,p75:4509,p80:5136,p90:8012,p95:47702,p99:58542,p999:74014}},resources:{envoyGateway:{memory:{min:173.7,max:173.7,mean:173.7},cpu:{min:61.12,max:61.12,mean:61.12}},envoyProxy:{memory:{min:130.89,max:130.89,mean:130.89},cpu:{min:195.74,max:195.74,mean:195.74}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6096.9,totalRequests:182907,latency:{min:365,mean:5840,max:99377,pstdev:11326,percentiles:{p50:2735,p75:4188,p80:4674,p90:6654,p95:46344,p99:53444,p999:58591}},resources:{envoyGateway:{memory:{min:230.99,max:230.99,mean:230.99},cpu:{min:114.22,max:114.22,mean:114.22}},envoyProxy:{memory:{min:121.56,max:121.56,mean:121.56},cpu:{min:358.71,max:358.71,mean:358.71}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6151.76,totalRequests:184556,latency:{min:376,mean:5805,max:84885,pstdev:11572,percentiles:{p50:2520,p75:3969,p80:4498,p90:6842,p95:46837,p99:54761,p999:62570}},resources:{envoyGateway:{memory:{min:233.63,max:233.63,mean:233.63},cpu:{min:113.65,max:113.65,mean:113.65}},envoyProxy:{memory:{min:121.86,max:121.86,mean:121.86},cpu:{min:328.3,max:328.3,mean:328.3}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6157.53,totalRequests:184729,latency:{min:379,mean:5964,max:75988,pstdev:11502,percentiles:{p50:2743,p75:4204,p80:4695,p90:6941,p95:46497,p99:54179,p999:62005}},resources:{envoyGateway:{memory:{min:141.36,max:141.36,mean:141.36},cpu:{min:112.67,max:112.67,mean:112.67}},envoyProxy:{memory:{min:122.04,max:122.04,mean:122.04},cpu:{min:297.59,max:297.59,mean:297.59}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:6060.5,totalRequests:181818,latency:{min:360,mean:6022,max:92483,pstdev:11657,percentiles:{p50:2685,p75:4265,p80:4811,p90:7313,p95:46495,p99:54495,p999:64219}},resources:{envoyGateway:{memory:{min:150.71,max:150.71,mean:150.71},cpu:{min:102.4,max:102.4,mean:102.4}},envoyProxy:{memory:{min:130.9,max:130.9,mean:130.9},cpu:{min:265.29,max:265.29,mean:265.29}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5966.83,totalRequests:179008,latency:{min:343,mean:5962,max:102715,pstdev:11763,percentiles:{p50:2668,p75:4125,p80:4633,p90:6863,p95:46741,p99:54929,p999:67018}},resources:{envoyGateway:{memory:{min:162.62,max:162.62,mean:162.62},cpu:{min:91.03,max:91.03,mean:91.03}},envoyProxy:{memory:{min:131.05,max:131.05,mean:131.05},cpu:{min:232.55,max:232.55,mean:232.55}}},poolOverflow:363,upstreamConnections:37}]},uie={metadata:{version:"1.2.1",runId:"1.2.1-1750189826759",date:"2024-11-07",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6110.53,totalRequests:183316,latency:{min:337,mean:6415,max:92647,pstdev:11350,percentiles:{p50:3107,p75:5037,p80:5711,p90:8782,p95:45103,p99:53942,p999:60790}},resources:{envoyGateway:{memory:{min:111.18,max:111.18,mean:111.18},cpu:{min:.79,max:.79,mean:.79}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.62,max:30.62,mean:30.62}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6011.43,totalRequests:180343,latency:{min:377,mean:6244,max:72724,pstdev:11870,percentiles:{p50:2835,p75:4408,p80:4939,p90:7412,p95:47611,p99:54769,p999:61716}},resources:{envoyGateway:{memory:{min:116.45,max:116.45,mean:116.45},cpu:{min:1.59,max:1.59,mean:1.59}},envoyProxy:{memory:{min:30.41,max:30.41,mean:30.41},cpu:{min:61.42,max:61.42,mean:61.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5961.65,totalRequests:178854,latency:{min:370,mean:5979,max:81096,pstdev:11586,percentiles:{p50:2705,p75:4189,p80:4699,p90:7030,p95:46987,p99:54095,p999:61222}},resources:{envoyGateway:{memory:{min:128.02,max:128.02,mean:128.02},cpu:{min:3.04,max:3.04,mean:3.04}},envoyProxy:{memory:{min:36.55,max:36.55,mean:36.55},cpu:{min:92.49,max:92.49,mean:92.49}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5921.3,totalRequests:177639,latency:{min:376,mean:6208,max:100098,pstdev:11901,percentiles:{p50:2770,p75:4413,p80:5009,p90:7647,p95:46934,p99:55273,p999:68509}},resources:{envoyGateway:{memory:{min:144.93,max:144.93,mean:144.93},cpu:{min:15.11,max:15.11,mean:15.11}},envoyProxy:{memory:{min:58.75,max:58.75,mean:58.75},cpu:{min:125.9,max:125.9,mean:125.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5876.24,totalRequests:176290,latency:{min:365,mean:6248,max:80101,pstdev:12134,percentiles:{p50:2759,p75:4348,p80:4922,p90:7422,p95:47855,p99:56041,p999:67145}},resources:{envoyGateway:{memory:{min:155.94,max:155.94,mean:155.94},cpu:{min:27.72,max:27.72,mean:27.72}},envoyProxy:{memory:{min:80.95,max:80.95,mean:80.95},cpu:{min:159.58,max:159.58,mean:159.58}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5744.1,totalRequests:172323,latency:{min:380,mean:6374,max:100245,pstdev:12424,percentiles:{p50:2775,p75:4337,p80:4899,p90:7542,p95:47699,p99:59248,p999:71761}},resources:{envoyGateway:{memory:{min:184.41,max:184.41,mean:184.41},cpu:{min:61.5,max:61.5,mean:61.5}},envoyProxy:{memory:{min:129.19,max:129.19,mean:129.19},cpu:{min:199.75,max:199.75,mean:199.75}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6028.67,totalRequests:180864,latency:{min:361,mean:5919,max:75882,pstdev:11427,percentiles:{p50:2729,p75:4244,p80:4783,p90:6934,p95:46608,p99:53897,p999:59893}},resources:{envoyGateway:{memory:{min:229.41,max:229.41,mean:229.41},cpu:{min:114.16,max:114.16,mean:114.16}},envoyProxy:{memory:{min:121.69,max:121.69,mean:121.69},cpu:{min:363.78,max:363.78,mean:363.78}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6093.21,totalRequests:182799,latency:{min:364,mean:5859,max:73809,pstdev:11454,percentiles:{p50:2634,p75:4171,p80:4702,p90:7002,p95:46548,p99:53979,p999:62793}},resources:{envoyGateway:{memory:{min:236.91,max:236.91,mean:236.91},cpu:{min:113.6,max:113.6,mean:113.6}},envoyProxy:{memory:{min:122.3,max:122.3,mean:122.3},cpu:{min:333.22,max:333.22,mean:333.22}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6057.56,totalRequests:181727,latency:{min:366,mean:5898,max:83623,pstdev:11560,percentiles:{p50:2628,p75:4159,p80:4695,p90:6996,p95:46897,p99:54495,p999:61849}},resources:{envoyGateway:{memory:{min:143.71,max:143.71,mean:143.71},cpu:{min:112.58,max:112.58,mean:112.58}},envoyProxy:{memory:{min:121.84,max:121.84,mean:121.84},cpu:{min:302.58,max:302.58,mean:302.58}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5899.93,totalRequests:176998,latency:{min:329,mean:6218,max:88965,pstdev:12007,percentiles:{p50:2818,p75:4388,p80:4920,p90:7204,p95:47871,p99:55517,p999:65886}},resources:{envoyGateway:{memory:{min:154.24,max:154.24,mean:154.24},cpu:{min:102.3,max:102.3,mean:102.3}},envoyProxy:{memory:{min:129.34,max:129.34,mean:129.34},cpu:{min:270.21,max:270.21,mean:270.21}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5862.2,totalRequests:175868,latency:{min:359,mean:6106,max:107622,pstdev:11962,percentiles:{p50:2648,p75:4343,p80:4933,p90:7617,p95:47341,p99:55508,p999:69103}},resources:{envoyGateway:{memory:{min:153.72,max:153.72,mean:153.72},cpu:{min:91.07,max:91.07,mean:91.07}},envoyProxy:{memory:{min:129.18,max:129.18,mean:129.18},cpu:{min:237.04,max:237.04,mean:237.04}}},poolOverflow:363,upstreamConnections:37}]},cie={metadata:{version:"1.2.0",runId:"1.2.0-1750189826754",date:"2024-11-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6006.27,totalRequests:180191,latency:{min:359,mean:6202,max:74358,pstdev:11262,percentiles:{p50:2976,p75:4719,p80:5330,p90:8159,p95:44003,p99:54190,p999:59357}},resources:{envoyGateway:{memory:{min:113.66,max:113.66,mean:113.66},cpu:{min:.75,max:.75,mean:.75}},envoyProxy:{memory:{min:25.55,max:25.55,mean:25.55},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5988.15,totalRequests:179650,latency:{min:366,mean:6093,max:82386,pstdev:11670,percentiles:{p50:2838,p75:4283,p80:4798,p90:6972,p95:47523,p99:54038,p999:59813}},resources:{envoyGateway:{memory:{min:119.16,max:119.16,mean:119.16},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.71,max:31.71,mean:31.71},cpu:{min:61.03,max:61.03,mean:61.03}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.13,totalRequests:177905,latency:{min:374,mean:6182,max:93884,pstdev:11844,percentiles:{p50:2812,p75:4420,p80:4967,p90:7339,p95:47618,p99:54661,p999:61865}},resources:{envoyGateway:{memory:{min:123.35,max:123.35,mean:123.35},cpu:{min:2.89,max:2.89,mean:2.89}},envoyProxy:{memory:{min:37.86,max:37.86,mean:37.86},cpu:{min:91.87,max:91.87,mean:91.87}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5713.27,totalRequests:171401,latency:{min:384,mean:6405,max:105545,pstdev:12313,percentiles:{p50:2832,p75:4450,p80:5057,p90:7773,p95:48732,p99:56084,p999:66220}},resources:{envoyGateway:{memory:{min:150.92,max:150.92,mean:150.92},cpu:{min:15.08,max:15.08,mean:15.08}},envoyProxy:{memory:{min:60.05,max:60.05,mean:60.05},cpu:{min:125.09,max:125.09,mean:125.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5689.03,totalRequests:170675,latency:{min:365,mean:5939,max:98639,pstdev:11585,percentiles:{p50:2715,p75:4258,p80:4772,p90:7055,p95:45996,p99:54368,p999:68464}},resources:{envoyGateway:{memory:{min:156.97,max:156.97,mean:156.97},cpu:{min:27.62,max:27.62,mean:27.62}},envoyProxy:{memory:{min:82.26,max:82.26,mean:82.26},cpu:{min:158.86,max:158.86,mean:158.86}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5407.08,totalRequests:162220,latency:{min:371,mean:6424,max:131579,pstdev:12473,percentiles:{p50:2692,p75:4503,p80:5177,p90:8264,p95:47540,p99:58488,p999:72720}},resources:{envoyGateway:{memory:{min:215.93,max:215.93,mean:215.93},cpu:{min:61.56,max:61.56,mean:61.56}},envoyProxy:{memory:{min:130.5,max:130.5,mean:130.5},cpu:{min:197.45,max:197.45,mean:197.45}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5905.23,totalRequests:177157,latency:{min:396,mean:6205,max:92979,pstdev:12065,percentiles:{p50:2713,p75:4262,p80:4832,p90:7415,p95:48306,p99:55736,p999:63318}},resources:{envoyGateway:{memory:{min:233.71,max:233.71,mean:233.71},cpu:{min:114.53,max:114.53,mean:114.53}},envoyProxy:{memory:{min:118.94,max:118.94,mean:118.94},cpu:{min:360.39,max:360.39,mean:360.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5793.19,totalRequests:173800,latency:{min:385,mean:6501,max:86843,pstdev:12452,percentiles:{p50:2744,p75:4568,p80:5227,p90:8494,p95:48965,p99:56467,p999:65382}},resources:{envoyGateway:{memory:{min:202.08,max:202.08,mean:202.08},cpu:{min:113.96,max:113.96,mean:113.96}},envoyProxy:{memory:{min:121.24,max:121.24,mean:121.24},cpu:{min:329.91,max:329.91,mean:329.91}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5783.8,totalRequests:173514,latency:{min:385,mean:6179,max:85405,pstdev:11889,percentiles:{p50:2707,p75:4462,p80:5071,p90:7760,p95:47423,p99:54994,p999:64567}},resources:{envoyGateway:{memory:{min:144.59,max:144.59,mean:144.59},cpu:{min:112.93,max:112.93,mean:112.93}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:299.28,max:299.28,mean:299.28}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5804.51,totalRequests:174139,latency:{min:384,mean:6147,max:82661,pstdev:11892,percentiles:{p50:2807,p75:4284,p80:4791,p90:7039,p95:47558,p99:55162,p999:66723}},resources:{envoyGateway:{memory:{min:160.23,max:160.23,mean:160.23},cpu:{min:102.85,max:102.85,mean:102.85}},envoyProxy:{memory:{min:130.62,max:130.62,mean:130.62},cpu:{min:267.09,max:267.09,mean:267.09}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5804.87,totalRequests:174149,latency:{min:368,mean:5828,max:106119,pstdev:11561,percentiles:{p50:2647,p75:4078,p80:4553,p90:6656,p95:46047,p99:55025,p999:66633}},resources:{envoyGateway:{memory:{min:155.88,max:155.88,mean:155.88},cpu:{min:91.5,max:91.5,mean:91.5}},envoyProxy:{memory:{min:130.61,max:130.61,mean:130.61},cpu:{min:234.47,max:234.47,mean:234.47}}},poolOverflow:365,upstreamConnections:35}]},fie={metadata:{version:"1.1.4",runId:"1.1.4-1750190329987",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5971.73,totalRequests:179152,latency:{min:354,mean:6247,max:97591,pstdev:11371,percentiles:{p50:2948,p75:4694,p80:5352,p90:8420,p95:44519,p99:54398,p999:62244}},resources:{envoyGateway:{memory:{min:82.79,max:82.79,mean:82.79},cpu:{min:1.5000000000000002,max:1.5000000000000002,mean:1.5000000000000002}},envoyProxy:{memory:{min:24.11,max:24.11,mean:24.11},cpu:{min:101.53333333333335,max:101.53333333333335,mean:101.53333333333335}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5957.22,totalRequests:178717,latency:{min:385,mean:6145,max:93360,pstdev:11838,percentiles:{p50:2751,p75:4352,p80:4922,p90:7436,p95:47679,p99:54878,p999:62414}},resources:{envoyGateway:{memory:{min:103.29,max:103.29,mean:103.29},cpu:{min:6.800000000000001,max:6.800000000000001,mean:6.800000000000001}},envoyProxy:{memory:{min:32.29,max:32.29,mean:32.29},cpu:{min:204,max:204,mean:204}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5896.53,totalRequests:176899,latency:{min:360,mean:6376,max:93995,pstdev:12077,percentiles:{p50:2905,p75:4542,p80:5112,p90:7699,p95:48019,p99:55472,p999:63707}},resources:{envoyGateway:{memory:{min:151.7,max:151.7,mean:151.7},cpu:{min:32.599999999999994,max:32.599999999999994,mean:32.599999999999994}},envoyProxy:{memory:{min:46.46,max:46.46,mean:46.46},cpu:{min:309.8,max:309.8,mean:309.8}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5885.1,totalRequests:176553,latency:{min:370,mean:6378,max:102457,pstdev:12096,percentiles:{p50:2834,p75:4508,p80:5093,p90:7817,p95:48099,p99:55572,p999:64329}},resources:{envoyGateway:{memory:{min:763.38,max:763.38,mean:763.38},cpu:{min:605.6333333333333,max:605.6333333333333,mean:605.6333333333333}},envoyProxy:{memory:{min:150.81,max:150.81,mean:150.81},cpu:{min:494.66666666666674,max:494.66666666666674,mean:494.66666666666674}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5642.37,totalRequests:169274,latency:{min:314,mean:6430,max:135987,pstdev:12216,percentiles:{p50:2801,p75:4489,p80:5175,p90:8673,p95:46690,p99:56358,p999:73814}},resources:{envoyGateway:{memory:{min:1603.28,max:1603.28,mean:1603.28},cpu:{min:41.63333333333333,max:41.63333333333333,mean:41.63333333333333}},envoyProxy:{memory:{min:289.75,max:289.75,mean:289.75},cpu:{min:727.1666666666666,max:727.1666666666666,mean:727.1666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5993.8,totalRequests:179822,latency:{min:381,mean:5965,max:84086,pstdev:11660,percentiles:{p50:2666,p75:4169,p80:4715,p90:6995,p95:47218,p99:54775,p999:61200}},resources:{envoyGateway:{memory:{min:117.16,max:117.16,mean:117.16},cpu:{min:518.0333333333333,max:518.0333333333333,mean:518.0333333333333}},envoyProxy:{memory:{min:278.72,max:278.72,mean:278.72},cpu:{min:1205.8,max:1205.8,mean:1205.8}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5947.1,totalRequests:178412,latency:{min:346,mean:5809,max:76681,pstdev:11155,percentiles:{p50:2707,p75:4164,p80:4684,p90:6938,p95:45451,p99:53227,p999:59303}},resources:{envoyGateway:{memory:{min:123.23,max:123.23,mean:123.23},cpu:{min:512.5333333333333,max:512.5333333333333,mean:512.5333333333333}},envoyProxy:{memory:{min:291.25,max:291.25,mean:291.25},cpu:{min:1103.6333333333334,max:1103.6333333333334,mean:1103.6333333333334}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4884.46,totalRequests:146534,latency:{min:362,mean:7148,max:137863,pstdev:11237,percentiles:{p50:3375,p75:6266,p80:7621,p90:17699,p95:31992,p99:59576,p999:83935}},resources:{envoyGateway:{memory:{min:338.12,max:338.12,mean:338.12},cpu:{min:488.1333333333333,max:488.1333333333333,mean:488.1333333333333}},envoyProxy:{memory:{min:294.41,max:294.41,mean:294.41},cpu:{min:993,max:993,mean:993}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5737.62,totalRequests:172120,latency:{min:345,mean:6192,max:117288,pstdev:11530,percentiles:{p50:2822,p75:4535,p80:5155,p90:8463,p95:42631,p99:55584,p999:70291}},resources:{envoyGateway:{memory:{min:679.73,max:679.73,mean:679.73},cpu:{min:18.76666666666667,max:18.76666666666667,mean:18.76666666666667}},envoyProxy:{memory:{min:285.93,max:285.93,mean:285.93},cpu:{min:833.4333333333334,max:833.4333333333334,mean:833.4333333333334}}},poolOverflow:363,upstreamConnections:37}]},pie={metadata:{version:"1.1.3",runId:"1.1.3-1750190329984",date:"2024-11-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6070.53,totalRequests:182116,latency:{min:353,mean:6263,max:87117,pstdev:11274,percentiles:{p50:2994,p75:4783,p80:5441,p90:8506,p95:44029,p99:54130,p999:59291}},resources:{envoyGateway:{memory:{min:85.16,max:85.16,mean:85.16},cpu:{min:1.3666666666666665,max:1.3666666666666665,mean:1.3666666666666665}},envoyProxy:{memory:{min:26,max:26,mean:26},cpu:{min:101.43333333333334,max:101.43333333333334,mean:101.43333333333334}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5999.45,totalRequests:179985,latency:{min:368,mean:6117,max:76840,pstdev:11675,percentiles:{p50:2803,p75:4339,p80:4903,p90:7204,p95:47128,p99:54317,p999:60557}},resources:{envoyGateway:{memory:{min:102.18,max:102.18,mean:102.18},cpu:{min:7.033333333333333,max:7.033333333333333,mean:7.033333333333333}},envoyProxy:{memory:{min:34.18,max:34.18,mean:34.18},cpu:{min:203.56666666666666,max:203.56666666666666,mean:203.56666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6053.06,totalRequests:181592,latency:{min:390,mean:5889,max:94826,pstdev:11642,percentiles:{p50:2599,p75:4075,p80:4583,p90:6945,p95:47128,p99:54872,p999:62212}},resources:{envoyGateway:{memory:{min:151.34,max:151.34,mean:151.34},cpu:{min:31.633333333333336,max:31.633333333333336,mean:31.633333333333336}},envoyProxy:{memory:{min:48.34,max:48.34,mean:48.34},cpu:{min:309.06666666666666,max:309.06666666666666,mean:309.06666666666666}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5895.77,totalRequests:176873,latency:{min:378,mean:6220,max:100757,pstdev:12033,percentiles:{p50:2723,p75:4341,p80:4931,p90:7644,p95:47828,p99:55521,p999:67383}},resources:{envoyGateway:{memory:{min:687.16,max:687.16,mean:687.16},cpu:{min:578.2333333333332,max:578.2333333333332,mean:578.2333333333332}},envoyProxy:{memory:{min:150.69,max:150.69,mean:150.69},cpu:{min:488.20000000000005,max:488.20000000000005,mean:488.20000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5818.09,totalRequests:174543,latency:{min:356,mean:6109,max:107913,pstdev:11285,percentiles:{p50:2832,p75:4538,p80:5163,p90:8134,p95:42639,p99:54546,p999:67543}},resources:{envoyGateway:{memory:{min:1329.35,max:1329.35,mean:1329.35},cpu:{min:61.33333333333333,max:61.33333333333333,mean:61.33333333333333}},envoyProxy:{memory:{min:303.55,max:303.55,mean:303.55},cpu:{min:731.4333333333334,max:731.4333333333334,mean:731.4333333333334}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5996.79,totalRequests:179907,latency:{min:367,mean:6127,max:77688,pstdev:11777,percentiles:{p50:2745,p75:4292,p80:4835,p90:7317,p95:47597,p99:54706,p999:61323}},resources:{envoyGateway:{memory:{min:125.62,max:125.62,mean:125.62},cpu:{min:525.5,max:525.5,mean:525.5}},envoyProxy:{memory:{min:289.68,max:289.68,mean:289.68},cpu:{min:1239.6,max:1239.6,mean:1239.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5732.14,totalRequests:171956,latency:{min:336,mean:4876,max:76279,pstdev:10072,percentiles:{p50:2290,p75:3444,p80:3846,p90:5476,p95:24546,p99:51763,p999:57040}},resources:{envoyGateway:{memory:{min:132.64,max:132.64,mean:132.64},cpu:{min:520.8333333333333,max:520.8333333333333,mean:520.8333333333333}},envoyProxy:{memory:{min:291.68,max:291.68,mean:291.68},cpu:{min:1138.0333333333335,max:1138.0333333333335,mean:1138.0333333333335}}},poolOverflow:371,upstreamConnections:29},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5311.34,totalRequests:159332,latency:{min:362,mean:6219,max:144302,pstdev:11133,percentiles:{p50:2808,p75:4741,p80:5579,p90:10689,p95:37480,p99:53626,p999:73998}},resources:{envoyGateway:{memory:{min:179.01,max:179.01,mean:179.01},cpu:{min:497.9666666666666,max:497.9666666666666,mean:497.9666666666666}},envoyProxy:{memory:{min:298.77,max:298.77,mean:298.77},cpu:{min:1034.033333333333,max:1034.033333333333,mean:1034.033333333333}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5633.85,totalRequests:169021,latency:{min:369,mean:6266,max:106577,pstdev:11127,percentiles:{p50:2908,p75:4793,p80:5511,p90:9568,p95:36169,p99:54472,p999:68628}},resources:{envoyGateway:{memory:{min:487.12,max:487.12,mean:487.12},cpu:{min:27.133333333333336,max:27.133333333333336,mean:27.133333333333336}},envoyProxy:{memory:{min:299.84,max:299.84,mean:299.84},cpu:{min:837.8666666666668,max:837.8666666666668,mean:837.8666666666668}}},poolOverflow:363,upstreamConnections:37}]},die={metadata:{version:"1.1.2",runId:"1.1.2-1750190329982",date:"2024-09-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5649.72,totalRequests:169493,latency:{min:356,mean:6560,max:72347,pstdev:11796,percentiles:{p50:3044,p75:5011,p80:5690,p90:8937,p95:46880,p99:54560,p999:59316}},resources:{envoyGateway:{memory:{min:86.72,max:86.72,mean:86.72},cpu:{min:1.5666666666666667,max:1.5666666666666667,mean:1.5666666666666667}},envoyProxy:{memory:{min:24.26,max:24.26,mean:24.26},cpu:{min:101.63333333333333,max:101.63333333333333,mean:101.63333333333333}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5594.14,totalRequests:167826,latency:{min:377,mean:6225,max:71024,pstdev:11980,percentiles:{p50:2812,p75:4378,p80:4905,p90:7214,p95:48160,p99:54513,p999:59850}},resources:{envoyGateway:{memory:{min:106.76,max:106.76,mean:106.76},cpu:{min:7.7,max:7.7,mean:7.7}},envoyProxy:{memory:{min:32.43,max:32.43,mean:32.43},cpu:{min:204.53333333333333,max:204.53333333333333,mean:204.53333333333333}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5523.65,totalRequests:165711,latency:{min:379,mean:6455,max:77815,pstdev:12317,percentiles:{p50:2868,p75:4510,p80:5086,p90:7645,p95:49127,p99:55048,p999:61448}},resources:{envoyGateway:{memory:{min:149.03,max:149.03,mean:149.03},cpu:{min:29.333333333333332,max:29.333333333333332,mean:29.333333333333332}},envoyProxy:{memory:{min:46.61,max:46.61,mean:46.61},cpu:{min:309.7666666666667,max:309.7666666666667,mean:309.7666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5554.01,totalRequests:166624,latency:{min:357,mean:6246,max:99753,pstdev:12051,percentiles:{p50:2841,p75:4416,p80:4960,p90:7177,p95:48371,p99:54800,p999:63275}},resources:{envoyGateway:{memory:{min:375.51,max:375.51,mean:375.51},cpu:{min:615.1,max:615.1,mean:615.1}},envoyProxy:{memory:{min:152.97,max:152.97,mean:152.97},cpu:{min:492.4666666666667,max:492.4666666666667,mean:492.4666666666667}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5475.04,totalRequests:164256,latency:{min:365,mean:6546,max:95539,pstdev:12646,percentiles:{p50:2834,p75:4484,p80:5075,p90:7891,p95:49397,p99:56231,p999:67629}},resources:{envoyGateway:{memory:{min:1340.6,max:1340.6,mean:1340.6},cpu:{min:38.333333333333336,max:38.333333333333336,mean:38.333333333333336}},envoyProxy:{memory:{min:281.71,max:281.71,mean:281.71},cpu:{min:718.0666666666666,max:718.0666666666666,mean:718.0666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5657.68,totalRequests:169734,latency:{min:355,mean:7320,max:87252,pstdev:13162,percentiles:{p50:3307,p75:5218,p80:5885,p90:9252,p95:50671,p99:56332,p999:62406}},resources:{envoyGateway:{memory:{min:371.29,max:371.29,mean:371.29},cpu:{min:578.7666666666667,max:578.7666666666667,mean:578.7666666666667}},envoyProxy:{memory:{min:273.57,max:273.57,mean:273.57},cpu:{min:1224,max:1224,mean:1224}}},poolOverflow:356,upstreamConnections:44},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5587.8,totalRequests:167636,latency:{min:356,mean:6346,max:68095,pstdev:12097,percentiles:{p50:2890,p75:4509,p80:5041,p90:7495,p95:48560,p99:54345,p999:60436}},resources:{envoyGateway:{memory:{min:342.8,max:342.8,mean:342.8},cpu:{min:573.3000000000001,max:573.3000000000001,mean:573.3000000000001}},envoyProxy:{memory:{min:274.84,max:274.84,mean:274.84},cpu:{min:1122.2333333333333,max:1122.2333333333333,mean:1122.2333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4098.74,totalRequests:122966,latency:{min:347,mean:3660,max:99745,pstdev:7371,percentiles:{p50:1658,p75:2735,p80:3147,p90:5306,p95:18030,p99:42778,p999:60440}},resources:{envoyGateway:{memory:{min:433.01,max:433.01,mean:433.01},cpu:{min:486.96666666666664,max:486.96666666666664,mean:486.96666666666664}},envoyProxy:{memory:{min:281.27,max:281.27,mean:281.27},cpu:{min:996.0333333333333,max:996.0333333333333,mean:996.0333333333333}}},poolOverflow:384,upstreamConnections:16},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5306.46,totalRequests:159194,latency:{min:360,mean:6884,max:106807,pstdev:12850,percentiles:{p50:2983,p75:4873,p80:5573,p90:9215,p95:49102,p99:58521,p999:70213}},resources:{envoyGateway:{memory:{min:232.76,max:232.76,mean:232.76},cpu:{min:16.299999999999997,max:16.299999999999997,mean:16.299999999999997}},envoyProxy:{memory:{min:282.68,max:282.68,mean:282.68},cpu:{min:825.4333333333333,max:825.4333333333333,mean:825.4333333333333}}},poolOverflow:361,upstreamConnections:39}]},mie={metadata:{version:"1.1.1",runId:"1.1.1-1750190329981",date:"2024-09-12",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6258.99,totalRequests:187774,latency:{min:333,mean:5933,max:71266,pstdev:10816,percentiles:{p50:2898,p75:4513,p80:5099,p90:7661,p95:40607,p99:53149,p999:58789}},resources:{envoyGateway:{memory:{min:84.04,max:84.04,mean:84.04},cpu:{min:1.5333333333333334,max:1.5333333333333334,mean:1.5333333333333334}},envoyProxy:{memory:{min:25.57,max:25.57,mean:25.57},cpu:{min:101.33333333333331,max:101.33333333333331,mean:101.33333333333331}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6118.28,totalRequests:183552,latency:{min:359,mean:5828,max:81178,pstdev:11437,percentiles:{p50:2646,p75:4049,p80:4561,p90:6666,p95:46723,p99:53913,p999:60094}},resources:{envoyGateway:{memory:{min:101.33,max:101.33,mean:101.33},cpu:{min:6.8999999999999995,max:6.8999999999999995,mean:6.8999999999999995}},envoyProxy:{memory:{min:33.75,max:33.75,mean:33.75},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6045.36,totalRequests:181361,latency:{min:377,mean:5908,max:88063,pstdev:11539,percentiles:{p50:2659,p75:4143,p80:4675,p90:6863,p95:46733,p99:54091,p999:63211}},resources:{envoyGateway:{memory:{min:115.34,max:115.34,mean:115.34},cpu:{min:32.800000000000004,max:32.800000000000004,mean:32.800000000000004}},envoyProxy:{memory:{min:47.79,max:47.79,mean:47.79},cpu:{min:308.96666666666664,max:308.96666666666664,mean:308.96666666666664}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5881.18,totalRequests:176436,latency:{min:327,mean:6376,max:130330,pstdev:12048,percentiles:{p50:2843,p75:4548,p80:5181,p90:8168,p95:47517,p99:55470,p999:66041}},resources:{envoyGateway:{memory:{min:608.65,max:608.65,mean:608.65},cpu:{min:625.6666666666666,max:625.6666666666666,mean:625.6666666666666}},envoyProxy:{memory:{min:152.29,max:152.29,mean:152.29},cpu:{min:492.5666666666667,max:492.5666666666667,mean:492.5666666666667}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5875.93,totalRequests:176280,latency:{min:381,mean:6086,max:86654,pstdev:11932,percentiles:{p50:2704,p75:4181,p80:4727,p90:7177,p95:47091,p99:55814,p999:68415}},resources:{envoyGateway:{memory:{min:1308.52,max:1308.52,mean:1308.52},cpu:{min:39.49999999999999,max:39.49999999999999,mean:39.49999999999999}},envoyProxy:{memory:{min:283.24,max:283.24,mean:283.24},cpu:{min:707.1333333333332,max:707.1333333333332,mean:707.1333333333332}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6077.56,totalRequests:182327,latency:{min:362,mean:6197,max:92372,pstdev:11720,percentiles:{p50:2824,p75:4438,p80:5e3,p90:7503,p95:47110,p99:54169,p999:60426}},resources:{envoyGateway:{memory:{min:121.13,max:121.13,mean:121.13},cpu:{min:544.5333333333334,max:544.5333333333334,mean:544.5333333333334}},envoyProxy:{memory:{min:277.29,max:277.29,mean:277.29},cpu:{min:1206.4666666666665,max:1206.4666666666665,mean:1206.4666666666665}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6047.67,totalRequests:181438,latency:{min:370,mean:6062,max:92168,pstdev:11743,percentiles:{p50:2733,p75:4268,p80:4801,p90:7226,p95:47095,p99:54886,p999:61917}},resources:{envoyGateway:{memory:{min:126.22,max:126.22,mean:126.22},cpu:{min:538.8333333333334,max:538.8333333333334,mean:538.8333333333334}},envoyProxy:{memory:{min:285.62,max:285.62,mean:285.62},cpu:{min:1104.3000000000002,max:1104.3000000000002,mean:1104.3000000000002}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4654.8,totalRequests:139655,latency:{min:336,mean:4675,max:107409,pstdev:9843,percentiles:{p50:2048,p75:3459,p80:4015,p90:6531,p95:19138,p99:57518,p999:73269}},resources:{envoyGateway:{memory:{min:480.36,max:480.36,mean:480.36},cpu:{min:377,max:377,mean:377}},envoyProxy:{memory:{min:289.51,max:289.51,mean:289.51},cpu:{min:969.2333333333332,max:969.2333333333332,mean:969.2333333333332}}},poolOverflow:377,upstreamConnections:23},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5676.68,totalRequests:170301,latency:{min:376,mean:6244,max:153264,pstdev:11618,percentiles:{p50:2797,p75:4618,p80:5324,p90:8807,p95:40232,p99:56496,p999:73506}},resources:{envoyGateway:{memory:{min:436.58,max:436.58,mean:436.58},cpu:{min:28.066666666666666,max:28.066666666666666,mean:28.066666666666666}},envoyProxy:{memory:{min:283.47,max:283.47,mean:283.47},cpu:{min:813.3666666666667,max:813.3666666666667,mean:813.3666666666667}}},poolOverflow:363,upstreamConnections:37}]},hie={metadata:{version:"1.1.0",runId:"1.1.0-1750190329977",date:"2024-07-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6181.97,totalRequests:185463,latency:{min:362,mean:5902,max:73084,pstdev:11039,percentiles:{p50:2765,p75:4364,p80:4935,p90:7504,p95:41244,p99:53929,p999:61147}},resources:{envoyGateway:{memory:{min:86.2,max:86.2,mean:86.2},cpu:{min:1.4333333333333333,max:1.4333333333333333,mean:1.4333333333333333}},envoyProxy:{memory:{min:24.09,max:24.09,mean:24.09},cpu:{min:101.36666666666667,max:101.36666666666667,mean:101.36666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6103.97,totalRequests:183121,latency:{min:354,mean:5852,max:75943,pstdev:11382,percentiles:{p50:2681,p75:4083,p80:4601,p90:6825,p95:46262,p99:53862,p999:60651}},resources:{envoyGateway:{memory:{min:100.14,max:100.14,mean:100.14},cpu:{min:7.233333333333333,max:7.233333333333333,mean:7.233333333333333}},envoyProxy:{memory:{min:32.25,max:32.25,mean:32.25},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6074.87,totalRequests:182247,latency:{min:371,mean:5877,max:94171,pstdev:11399,percentiles:{p50:2732,p75:4191,p80:4677,p90:6801,p95:46481,p99:53866,p999:61036}},resources:{envoyGateway:{memory:{min:114.69,max:114.69,mean:114.69},cpu:{min:30,max:30,mean:30}},envoyProxy:{memory:{min:46.42,max:46.42,mean:46.42},cpu:{min:308.70000000000005,max:308.70000000000005,mean:308.70000000000005}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5993.57,totalRequests:179811,latency:{min:368,mean:6123,max:96571,pstdev:11831,percentiles:{p50:2753,p75:4261,p80:4799,p90:7247,p95:47368,p99:55248,p999:66586}},resources:{envoyGateway:{memory:{min:762.8,max:762.8,mean:762.8},cpu:{min:600.8666666666667,max:600.8666666666667,mean:600.8666666666667}},envoyProxy:{memory:{min:152.78,max:152.78,mean:152.78},cpu:{min:488.70000000000005,max:488.70000000000005,mean:488.70000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5812.8,totalRequests:174396,latency:{min:388,mean:6310,max:95719,pstdev:12246,percentiles:{p50:2729,p75:4334,p80:4905,p90:7607,p95:47970,p99:56811,p999:68165}},resources:{envoyGateway:{memory:{min:1593.56,max:1593.56,mean:1593.56},cpu:{min:36.56666666666667,max:36.56666666666667,mean:36.56666666666667}},envoyProxy:{memory:{min:289.79,max:289.79,mean:289.79},cpu:{min:715.6333333333333,max:715.6333333333333,mean:715.6333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5916.93,totalRequests:177517,latency:{min:385,mean:6352,max:82747,pstdev:12011,percentiles:{p50:2822,p75:4461,p80:5061,p90:7769,p95:47847,p99:55068,p999:62578}},resources:{envoyGateway:{memory:{min:124.07,max:124.07,mean:124.07},cpu:{min:519.6333333333332,max:519.6333333333332,mean:519.6333333333332}},envoyProxy:{memory:{min:284.03,max:284.03,mean:284.03},cpu:{min:1194.8666666666666,max:1194.8666666666666,mean:1194.8666666666666}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5876.35,totalRequests:176294,latency:{min:371,mean:6226,max:83869,pstdev:11816,percentiles:{p50:2770,p75:4396,p80:5e3,p90:7848,p95:47163,p99:55156,p999:64434}},resources:{envoyGateway:{memory:{min:131.62,max:131.62,mean:131.62},cpu:{min:513.6,max:513.6,mean:513.6}},envoyProxy:{memory:{min:291.73,max:291.73,mean:291.73},cpu:{min:1092.9333333333334,max:1092.9333333333334,mean:1092.9333333333334}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4820.43,totalRequests:144617,latency:{min:342,mean:7088,max:172031,pstdev:12642,percentiles:{p50:3156,p75:5480,p80:6443,p90:12007,p95:39675,p99:63842,p999:86532}},resources:{envoyGateway:{memory:{min:374.36,max:374.36,mean:374.36},cpu:{min:462.8,max:462.8,mean:462.8}},envoyProxy:{memory:{min:289.98,max:289.98,mean:289.98},cpu:{min:980.4,max:980.4,mean:980.4}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5746.71,totalRequests:172402,latency:{min:386,mean:6313,max:101535,pstdev:11578,percentiles:{p50:2875,p75:4579,p80:5222,p90:8617,p95:44341,p99:54996,p999:67178}},resources:{envoyGateway:{memory:{min:670.44,max:670.44,mean:670.44},cpu:{min:24.333333333333332,max:24.333333333333332,mean:24.333333333333332}},envoyProxy:{memory:{min:285.86,max:285.86,mean:285.86},cpu:{min:824.5666666666667,max:824.5666666666667,mean:824.5666666666667}}},poolOverflow:362,upstreamConnections:38}]},r1=[Zoe,Qoe,Yoe,Joe,eie,tie,nie,rie,aie,oie,iie,sie,lie,uie,cie,fie,pie,die,mie,hie],vie=()=>r1.map(e=>e.metadata.version),gi=r1.find(e=>e.metadata.version==="1.4.1"),St=(gi==null?void 0:gi.results)||[];gi!=null&&gi.metadata.testConfiguration;St.length,St.filter(e=>e.phase==="scaling-up").length,St.filter(e=>e.phase==="scaling-down").length,St.length>0&&Math.max(...St.map(e=>e.routes)),St.length>0&&Math.min(...St.map(e=>e.routes)),St.length>0&&St.reduce((e,t)=>e+t.throughput,0)/St.length,St.length>0&&St.reduce((e,t)=>e+t.latency.mean,0)/St.length;St.map(e=>({routes:e.routes,phase:e.phase,p50:e.latency.percentiles.p50/1e3,p75:e.latency.percentiles.p75/1e3,p90:e.latency.percentiles.p90/1e3,p95:e.latency.percentiles.p95/1e3,p99:e.latency.percentiles.p99/1e3,p999:e.latency.percentiles.p999/1e3}));St.map(e=>({routes:e.routes,phase:e.phase,envoyGatewayMemory:e.resources.envoyGateway.memory.mean,envoyGatewayCpu:e.resources.envoyGateway.cpu.mean,envoyProxyMemory:e.resources.envoyProxy.memory.mean,envoyProxyCpu:e.resources.envoyProxy.cpu.mean}));St.map(e=>({testName:e.testName,routes:e.routes,phase:e.phase,throughput:e.throughput,meanLatency:e.latency.mean/1e3,p95Latency:e.latency.percentiles.p95/1e3,totalMemory:e.resources.envoyGateway.memory.mean+e.resources.envoyProxy.memory.mean,totalCpu:e.resources.envoyGateway.cpu.mean+e.resources.envoyProxy.cpu.mean}));const yie=()=>{const e=vie(),[t,n]=k.useState(e[0]||""),r=k.useMemo(()=>r1.find(o=>o.metadata.version===t),[t]),a=k.useMemo(()=>{if(!r)return{benchmarkResults:[],testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"},performanceSummary:{totalTests:0,scaleUpTests:0,scaleDownTests:0,maxRoutes:0,minRoutes:0,avgThroughput:0,avgLatency:0},latencyPercentileComparison:[],resourceTrends:[],performanceMatrix:[],metadata:null};const o=r.results;return{benchmarkResults:o,testConfiguration:r.metadata.testConfiguration,performanceSummary:{totalTests:o.length,scaleUpTests:o.filter(i=>i.phase==="scaling-up").length,scaleDownTests:o.filter(i=>i.phase==="scaling-down").length,maxRoutes:o.length>0?Math.max(...o.map(i=>i.routes)):0,minRoutes:o.length>0?Math.min(...o.map(i=>i.routes)):0,avgThroughput:o.length>0?o.reduce((i,s)=>i+s.throughput,0)/o.length:0,avgLatency:o.length>0?o.reduce((i,s)=>i+s.latency.mean,0)/o.length:0},latencyPercentileComparison:o.map(i=>({routes:i.routes,phase:i.phase,p50:i.latency.percentiles.p50/1e3,p75:i.latency.percentiles.p75/1e3,p90:i.latency.percentiles.p90/1e3,p95:i.latency.percentiles.p95/1e3,p99:i.latency.percentiles.p99/1e3,p999:i.latency.percentiles.p999/1e3})),resourceTrends:o.map(i=>({routes:i.routes,phase:i.phase,envoyGatewayMemory:i.resources.envoyGateway.memory.mean,envoyGatewayCpu:i.resources.envoyGateway.cpu.mean,envoyProxyMemory:i.resources.envoyProxy.memory.mean,envoyProxyCpu:i.resources.envoyProxy.cpu.mean})),performanceMatrix:o.map(i=>({testName:i.testName,routes:i.routes,phase:i.phase,throughput:i.throughput,meanLatency:i.latency.mean/1e3,p95Latency:i.latency.percentiles.p95/1e3,totalMemory:i.resources.envoyGateway.memory.mean+i.resources.envoyProxy.memory.mean,totalCpu:i.resources.envoyGateway.cpu.mean+i.resources.envoyProxy.cpu.mean})),metadata:r.metadata}},[r]);return{selectedVersion:t,setSelectedVersion:n,availableVersions:e,...a}},gie=({apiBase:e="https://envoy-gateway-benchmark-report.netlify.app/api",initialVersion:t,theme:n="light",containerClassName:r="",features:a={header:!1,versionSelector:!0,summaryCards:!0,tabs:["overview","latency","resources"]}})=>{var i,s,l,u,f,c;const o=yie();return k.useEffect(()=>{n==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},[n]),k.useEffect(()=>{const p=document.createElement("style");return p.textContent=`
+`)}}):null},sr=Zn,zn=k.forwardRef(({active:e,payload:t,className:n,indicator:r="dot",hideLabel:a=!1,hideIndicator:o=!1,label:i,labelFormatter:s,labelClassName:l,formatter:u,color:p,nameKey:c,labelKey:f},d)=>{const{config:h}=KS(),m=k.useMemo(()=>{var w;if(a||!(t!=null&&t.length))return null;const[v]=t,y=`${f||v.dataKey||v.name||"value"}`,x=Iv(h,v,y),P=!f&&typeof i=="string"?((w=h[i])==null?void 0:w.label)||i:x==null?void 0:x.label;return s?b.jsx("div",{className:Oe("font-medium",l),children:s(P,t)}):P?b.jsx("div",{className:Oe("font-medium",l),children:P}):null},[i,s,t,a,l,h,f]);if(!e||!(t!=null&&t.length))return null;const g=t.length===1&&r!=="dot";return b.jsxs("div",{ref:d,className:Oe("grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",n),children:[g?null:m,b.jsx("div",{className:"grid gap-1.5",children:t.map((v,y)=>{const x=`${c||v.name||v.dataKey||"value"}`,P=Iv(h,v,x),w=p||v.payload.fill||v.color;return b.jsx("div",{className:Oe("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",r==="dot"&&"items-center"),children:u&&(v==null?void 0:v.value)!==void 0&&v.name?u(v.value,v.name,v,y,v.payload):b.jsxs(b.Fragment,{children:[P!=null&&P.icon?b.jsx(P.icon,{}):!o&&b.jsx("div",{className:Oe("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",{"h-2.5 w-2.5":r==="dot","w-1":r==="line","w-0 border-[1.5px] border-dashed bg-transparent":r==="dashed","my-0.5":g&&r==="dashed"}),style:{"--color-bg":w,"--color-border":w}}),b.jsxs("div",{className:Oe("flex flex-1 justify-between leading-none",g?"items-end":"items-center"),children:[b.jsxs("div",{className:"grid gap-1.5",children:[g?m:null,b.jsx("span",{className:"text-muted-foreground",children:(P==null?void 0:P.label)||v.name})]}),v.value&&b.jsx("span",{className:"font-mono font-medium tabular-nums text-foreground",children:v.value.toLocaleString()})]})]})},v.dataKey)})})]})});zn.displayName="ChartTooltip";const Foe=k.forwardRef(({className:e,hideIcon:t=!1,payload:n,verticalAlign:r="bottom",nameKey:a},o)=>{const{config:i}=KS();return n!=null&&n.length?b.jsx("div",{ref:o,className:Oe("flex items-center justify-center gap-4",r==="top"?"pb-3":"pt-3",e),children:n.map(s=>{const l=`${a||s.dataKey||"value"}`,u=Iv(i,s,l);return b.jsxs("div",{className:Oe("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),children:[u!=null&&u.icon&&!t?b.jsx(u.icon,{}):b.jsx("div",{className:"h-2 w-2 shrink-0 rounded-[2px]",style:{backgroundColor:s.color}}),u==null?void 0:u.label]},s.value)})}):null});Foe.displayName="ChartLegend";function Iv(e,t,n){if(typeof t!="object"||t===null)return;const r="payload"in t&&typeof t.payload=="object"&&t.payload!==null?t.payload:void 0;let a=n;return n in t&&typeof t[n]=="string"?a=t[n]:r&&n in r&&typeof r[n]=="string"&&(a=r[n]),a in e?e[a]:e[n]}const zoe={empty:{icon:K4,title:"No Data Available",description:"There is no data to display at the moment."},error:{icon:CT,title:"Failed to Load Data",description:"An error occurred while loading the data. Please try again."},loading:{icon:Y4,title:"Loading Data",description:"Please wait while we fetch the latest information."},"no-data":{icon:U4,title:"No Chart Data",description:"No data available to display in the chart."}},Boe=({type:e="empty",title:t,description:n,action:r,className:a})=>{const o=zoe[e],i=o.icon;return b.jsx(xe,{className:`border-dashed ${a}`,children:b.jsxs(be,{className:"flex flex-col items-center justify-center py-12 px-6 text-center",children:[b.jsx("div",{className:"rounded-full bg-gray-100 p-3 mb-4",children:b.jsx(i,{className:`h-8 w-8 text-gray-400 ${e==="loading"?"animate-spin":""}`})}),b.jsx(we,{className:"text-lg font-medium text-gray-900 mb-2",children:t||o.title}),b.jsx("p",{className:"text-sm text-gray-500 mb-6 max-w-sm",children:n||o.description}),r&&b.jsxs(wp,{onClick:r.onClick,variant:"outline",size:"sm",children:[b.jsx(Y4,{className:"h-4 w-4 mr-2"}),r.label]})]})})},Bn=({onRetry:e})=>b.jsx(Boe,{type:"no-data",title:"No Chart Data",description:"Unable to generate chart with the current data set.",action:e?{label:"Retry",onClick:e}:void 0}),lr=({text:e="Kind Cluster / GitHub CI",position:t="top-center",className:n=""})=>{const r=()=>{switch(t){case"bottom-left":return"bottom-8 left-4";case"bottom-right":return"bottom-8 right-4";case"bottom-center":return"bottom-8 left-1/2 transform -translate-x-1/2";case"top-left":return"top-4 left-4";case"top-right":return"top-4 right-4";case"top-center":return"left-1/2 transform -translate-x-1/2 -translate-y-1/2";default:return"bottom-8 left-1/2 transform -translate-x-1/2"}};return b.jsxs("div",{className:`absolute ${r()} z-10 flex items-center gap-1 px-2 py-1 bg-indigo-600/40 rounded-md border border-gray-200/30 shadow-sm ${n}`,children:[b.jsx(X4,{className:"h-3 w-3 text-white"}),b.jsx("span",{className:"text-xs text-white font-medium",children:e})]})},Hoe=({performanceMatrix:e,benchmarkResults:t,testConfiguration:n,performanceSummary:r,latencyPercentileComparison:a})=>{const o=e.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,throughput:Math.round(c.throughput),latency:Number(c.meanLatency.toFixed(1))})),i=t.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,gateway:Math.round(c.resources.envoyGateway.memory.mean),proxy:Math.round(c.resources.envoyProxy.memory.mean),total:Math.round(c.resources.envoyGateway.memory.mean+c.resources.envoyProxy.memory.mean)})),l=(()=>{if(a&&a.length>0){const c=a.filter(f=>f.phase==="scaling-up").sort((f,d)=>d.routes-f.routes)[0];if(c)return[{percentile:"P50",value:Number(c.p50.toFixed(1)),status:"excellent"},{percentile:"P75",value:Number(c.p75.toFixed(1)),status:"excellent"},{percentile:"P90",value:Number(c.p90.toFixed(1)),status:"good"},{percentile:"P95",value:Number(c.p95.toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number(c.p99.toFixed(1)),status:"watch"}]}if(t&&t.length>0){const c=t.filter(f=>f.phase==="scaling-up").sort((f,d)=>d.routes-f.routes)[0];if(c&&c.latency&&c.latency.percentiles){const f=c.latency.percentiles;return[{percentile:"P50",value:Number((f.p50/1e3).toFixed(1)),status:"excellent"},{percentile:"P75",value:Number((f.p75/1e3).toFixed(1)),status:"excellent"},{percentile:"P90",value:Number((f.p90/1e3).toFixed(1)),status:"good"},{percentile:"P95",value:Number((f.p95/1e3).toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number((f.p99/1e3).toFixed(1)),status:"watch"}]}}return null})(),u=i.map(c=>({routes:c.routes,gatewayPerRoute:Number((c.gateway/c.routes).toFixed(2)),proxyPerRoute:Number((c.proxy/c.routes).toFixed(2)),totalPerRoute:Number((c.total/c.routes).toFixed(2))})),p={throughput:{label:"Throughput",color:"#8b5cf6"},latency:{label:"Latency",color:"#6366f1"},gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},totalPerRoute:{label:"Total per Route",color:"#8b5cf6"},gatewayPerRoute:{label:"Gateway per Route",color:"#a855f7"},proxyPerRoute:{label:"Proxy per Route",color:"#4f46e5"}};return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Avg Throughput"}),b.jsx(MT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[Math.round(r.avgThroughput)," RPS"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Mean Response Time"}),b.jsx(V4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[(r.avgLatency/1e3).toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"End-to-end as measured by Nighthawk"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Max Routes in Test"}),b.jsx(Z4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:r.maxRoutes}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Routes tested successfully"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Reliability"}),b.jsx(jT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:"100%"}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Perfect system reliability"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Throughput Consistency"}),b.jsx(tn,{children:"Throughput remains stable across different route scales"})]}),b.jsx(be,{children:o&&o.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:p,children:b.jsxs(Sf,{data:o,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{domain:[0,"dataMax"],tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,f)=>[`${c} RPS`,"Throughput"],labelFormatter:c=>`${c} routes`})}),b.jsx(pt,{dataKey:"throughput",type:"monotone",fill:"#8b5cf6",fillOpacity:.4,stroke:"#8b5cf6",strokeWidth:2})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Usage"}),b.jsx(tn,{children:"Memory scaling patterns for Gateway and Proxy components"})]}),b.jsx(be,{children:i&&i.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:p,children:b.jsxs(Sf,{data:i,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}MB`}),b.jsx(sr,{content:b.jsx(zn,{})}),b.jsx(pt,{dataKey:"gateway",type:"monotone",fill:"#a855f7",fillOpacity:.4,stroke:"#a855f7",strokeWidth:2}),b.jsx(pt,{dataKey:"proxy",type:"monotone",fill:"#4f46e5",fillOpacity:.4,stroke:"#4f46e5",strokeWidth:2})]})})]}):b.jsx(Bn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Distribution"}),b.jsx(tn,{children:"Latency percentiles at 1000 routes (worst case)"})]}),b.jsx(be,{children:l?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:p,children:b.jsxs(qS,{data:l,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,f)=>[`${c}ms`,"Latency"]})}),b.jsx(Vr,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Efficiency"}),b.jsx(tn,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),b.jsx(be,{children:u&&u.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:p,children:b.jsxs(e1,{data:u,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}MB`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,f)=>[`${c}MB per route`,f==="gatewayPerRoute"?"Gateway":f==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:c=>`${c} routes`})}),b.jsx(Rt,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(Rt,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Rt,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):b.jsx(Bn,{})})]})]})]})},Goe=({latencyPercentileComparison:e,benchmarkResults:t})=>{const n=e.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,p50:Number(c.p50.toFixed(1)),p95:Number(c.p95.toFixed(1)),p99:Number(c.p99.toFixed(1))})),a=(()=>{if(e&&e.length>0){const c=e.filter(f=>f.phase==="scaling-up").sort((f,d)=>d.routes-f.routes)[0];if(c)return[{percentile:"P50",value:Number(c.p50.toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number(c.p75.toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number(c.p90.toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number(c.p95.toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number(c.p99.toFixed(1)),category:"99th",status:"alert"}]}if(t&&t.length>0){const c=t.filter(f=>f.phase==="scaling-up").sort((f,d)=>d.routes-f.routes)[0];if(c&&c.latency&&c.latency.percentiles){const f=c.latency.percentiles;return[{percentile:"P50",value:Number((f.p50/1e3).toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number((f.p75/1e3).toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number((f.p90/1e3).toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number((f.p95/1e3).toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number((f.p99/1e3).toFixed(1)),category:"99th",status:"alert"}]}}return null})(),o=t.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,mean:Number((c.latency.mean/1e3).toFixed(1)),p95:Number((c.latency.percentiles.p95/1e3).toFixed(1)),ratio:Number((c.latency.percentiles.p95/c.latency.mean).toFixed(1))})),s=e&&e.length>0?e.filter(c=>c.phase==="scaling-up").sort((c,f)=>c.routes-f.routes).map(c=>({scale:`${c.routes} Routes`,p50:Number(c.p50.toFixed(1)),p95:Number(c.p95.toFixed(1)),p99:Number(c.p99.toFixed(1))})):null,l={p50:{label:"P50 (Median)",color:"#8b5cf6"},p95:{label:"P95",color:"#6366f1"},p99:{label:"P99",color:"#4f46e5"},mean:{label:"Mean",color:"#a855f7"},ratio:{label:"P95/Mean Ratio",color:"#7c3aed"}},p=(()=>{if(n.length===0)return{medianLatency:0,p95Latency:0,p99Latency:0,consistencyRatio:0};const c=n[n.length-1],f=o.length>0?o.reduce((d,h)=>d+h.ratio,0)/o.length:0;return{medianLatency:(c==null?void 0:c.p50)||0,p95Latency:(c==null?void 0:c.p95)||0,p99Latency:(c==null?void 0:c.p99)||0,consistencyRatio:f}})();return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Median RTT"}),b.jsx($T,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.medianLatency.toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"P95 RTT"}),b.jsx(ET,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.p95Latency.toFixed(1),"ms"]}),b.jsxs("p",{className:"text-xs text-muted-foreground",children:["95% of requests under ",p.p95Latency.toFixed(0),"ms"]})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Tail RTT"}),b.jsx(NT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.p99Latency.toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"P99 RTT (1% of requests)"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Consistency"}),b.jsx(q4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.consistencyRatio.toFixed(1),":1"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"P95/Mean ratio"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Scaling Behavior"}),b.jsx(tn,{children:"How key percentiles perform as route count increases"})]}),b.jsx(be,{children:n&&n.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:l,children:b.jsxs(Sf,{data:n,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:c=>`${c} routes`})}),b.jsx(pt,{dataKey:"p99",type:"monotone",fill:"#4f46e5",fillOpacity:.2,stroke:"#4f46e5",strokeWidth:2}),b.jsx(pt,{dataKey:"p95",type:"monotone",fill:"#6366f1",fillOpacity:.3,stroke:"#6366f1",strokeWidth:2}),b.jsx(pt,{dataKey:"p50",type:"monotone",fill:"#8b5cf6",fillOpacity:.4,stroke:"#8b5cf6",strokeWidth:2})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Distribution"}),b.jsx(tn,{children:"Percentile breakdown at 1000 routes (worst case scenario)"})]}),b.jsx(be,{children:a?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:l,children:b.jsxs(qS,{data:a,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,f)=>[`${c}ms`,"RTT"],labelFormatter:c=>`${c} Percentile`})}),b.jsx(Vr,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):b.jsx(Bn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Consistency"}),b.jsx(tn,{children:"P95/Mean ratio shows how predictable RTT is"})]}),b.jsx(be,{children:o&&o.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:l,children:b.jsxs(e1,{data:o,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{yAxisId:"ratio",orientation:"left",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}x`}),b.jsx(yt,{yAxisId:"latency",orientation:"right",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:c=>`${c} routes`})}),b.jsx(Rt,{yAxisId:"latency",dataKey:"mean",type:"monotone",stroke:"#a855f7",strokeWidth:2,dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Rt,{yAxisId:"ratio",dataKey:"ratio",type:"monotone",stroke:"#7c3aed",strokeWidth:3,strokeDasharray:"5 5",dot:{fill:"#7c3aed",strokeWidth:2,r:4}})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Performance Summary"}),b.jsx(tn,{children:"RTT performance at different scales"})]}),b.jsx(be,{children:s&&s.length>0?b.jsx("div",{className:"space-y-4",children:s.map((c,f)=>b.jsx("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:b.jsxs("div",{className:"space-y-1",children:[b.jsx("p",{className:"font-medium",children:c.scale}),b.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[b.jsxs("span",{children:["P50: ",c.p50,"ms"]}),b.jsxs("span",{children:["P95: ",c.p95,"ms"]}),b.jsxs("span",{children:["P99: ",c.p99,"ms"]})]})]})},f))}):b.jsx(Bn,{})})]})]})]})},Uoe=({resourceTrends:e,benchmarkResults:t})=>{const n=t.filter(f=>f.phase==="scaling-up").map(f=>({routes:f.routes,gateway:Math.round(f.resources.envoyGateway.memory.mean),proxy:Math.round(f.resources.envoyProxy.memory.mean),total:Math.round(f.resources.envoyGateway.memory.mean+f.resources.envoyProxy.memory.mean)})),r=t.filter(f=>f.phase==="scaling-up").map(f=>({routes:f.routes,gatewayMean:Number(f.resources.envoyGateway.cpu.mean.toFixed(1)),gatewayMax:Number(f.resources.envoyGateway.cpu.max.toFixed(1)),proxyMean:Number(f.resources.envoyProxy.cpu.mean.toFixed(1)),proxyMax:Number(f.resources.envoyProxy.cpu.max.toFixed(1))})),a=n.map(f=>({routes:f.routes,gatewayPerRoute:Number((f.gateway/f.routes).toFixed(2)),proxyPerRoute:Number((f.proxy/f.routes).toFixed(2)),totalPerRoute:Number((f.total/f.routes).toFixed(2))})),o=()=>{if(n.length===0)return[{component:"Gateway",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Proxy",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Total",min:0,max:0,scaling:"No Data",efficiency:"Unknown"}];const f=n.map(m=>m.gateway),d=n.map(m=>m.proxy),h=n.map(m=>m.total);return[{component:"Gateway",min:Math.min(...f),max:Math.max(...f),scaling:i(n.map(m=>m.routes),f),efficiency:s(n.map(m=>m.routes),f)},{component:"Proxy",min:Math.min(...d),max:Math.max(...d),scaling:i(n.map(m=>m.routes),d),efficiency:s(n.map(m=>m.routes),d)},{component:"Total",min:Math.min(...h),max:Math.max(...h),scaling:i(n.map(m=>m.routes),h),efficiency:s(n.map(m=>m.routes),h)}]},i=(f,d)=>{if(f.length<3)return"Insufficient Data";const h=f.length,m=f.reduce((N,M)=>N+M,0),g=d.reduce((N,M)=>N+M,0),v=f.reduce((N,M,I)=>N+M*d[I],0),y=f.reduce((N,M)=>N+M*M,0),x=d.reduce((N,M)=>N+M*M,0),P=h*v-m*g,w=Math.sqrt((h*y-m*m)*(h*x-g*g)),S=w===0?0:P/w,O=S*S,_=[];for(let N=1;N<d.length;N++)_.push(d[N]-d[N-1]);const C=_.reduce((N,M)=>N+M,0)/_.length,j=_.reduce((N,M)=>N+Math.pow(M-C,2),0)/_.length,E=Math.sqrt(j),T=C===0?0:Math.abs(E/C);return O>.95?"Highly Linear":O>.85?"Linear":T>1.5?"Step-wise":O>.7?"Moderately Linear":"Variable"},s=(f,d)=>{if(f.length<2)return"Unknown";const h=f.map((w,S)=>d[S]/w),m=h[0],g=h[h.length-1],v=(m-g)/m,y=h.reduce((w,S)=>w+S,0)/h.length,x=h.reduce((w,S)=>w+Math.pow(S-y,2),0)/h.length,P=Math.sqrt(x)/y;return v>.3?"Excellent":v>.1||P<.2?"Good":P<.4?"Moderate":"Variable"},l=o(),u={gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},gatewayMean:{label:"Gateway Mean",color:"#8b5cf6"},gatewayMax:{label:"Gateway Peak",color:"#c084fc"},proxyMean:{label:"Proxy Mean",color:"#6366f1"},proxyMax:{label:"Proxy Peak",color:"#818cf8"}},c=(()=>{if(n.length===0||r.length===0||a.length===0)return{gatewayMemoryRange:"0-0MB",proxyMemoryRange:"0-0MB",peakCPU:0,memoryPerRouteAtScale:0};const f=n.map(S=>S.gateway),d=n.map(S=>S.proxy),h=Math.min(...f),m=Math.max(...f),g=Math.min(...d),v=Math.max(...d),y=r.flatMap(S=>[S.gatewayMax,S.proxyMax]),x=Math.max(...y),P=a[a.length-1],w=(P==null?void 0:P.totalPerRoute)||0;return{gatewayMemoryRange:`${h}-${m}MB`,proxyMemoryRange:`${g}-${v}MB`,peakCPU:Math.round(x),memoryPerRouteAtScale:w}})();return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Gateway Memory"}),b.jsx(K4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:c.gatewayMemoryRange}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Linear scaling pattern"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Proxy Memory"}),b.jsx(Q4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:c.proxyMemoryRange}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Efficient step-wise scaling"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Peak CPU"}),b.jsx(G4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[c.peakCPU,"%"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Brief spikes, stable avg"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Efficiency"}),b.jsx(Z4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[c.memoryPerRouteAtScale.toFixed(2),"MB"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Memory per route at scale"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Scaling"}),b.jsx(tn,{children:"How Gateway and Proxy memory usage grows with route count"})]}),b.jsx(be,{children:n&&n.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:u,children:b.jsxs(Sf,{data:n,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:f=>`${f}MB`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:f=>`${f} routes`})}),b.jsx(pt,{dataKey:"gateway",type:"monotone",fill:"#a855f7",fillOpacity:.4,stroke:"#a855f7",strokeWidth:2}),b.jsx(pt,{dataKey:"proxy",type:"monotone",fill:"#4f46e5",fillOpacity:.4,stroke:"#4f46e5",strokeWidth:2})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"CPU Usage Patterns"}),b.jsx(tn,{children:"Mean vs peak CPU usage showing burst characteristics."})]}),b.jsx(be,{children:r&&r.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:u,children:b.jsxs(Ioe,{data:r,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:f=>`${f}%`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:f=>`${f} routes`})}),b.jsx(pt,{dataKey:"gatewayMax",type:"monotone",fill:"#c084fc",fillOpacity:.1,stroke:"#c084fc",strokeWidth:1,strokeDasharray:"2 2"}),b.jsx(pt,{dataKey:"proxyMax",type:"monotone",fill:"#818cf8",fillOpacity:.1,stroke:"#818cf8",strokeWidth:1,strokeDasharray:"2 2"}),b.jsx(Rt,{dataKey:"gatewayMean",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(Rt,{dataKey:"proxyMean",type:"monotone",stroke:"#6366f1",strokeWidth:3,dot:{fill:"#6366f1",strokeWidth:2,r:4}})]})})]}):b.jsx(Bn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Efficiency"}),b.jsx(tn,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),b.jsx(be,{children:a&&a.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:u,children:b.jsxs(e1,{data:a,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:f=>`${f}MB`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(f,d)=>[`${f}MB per route`,d==="gatewayPerRoute"?"Gateway":d==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:f=>`${f} routes`})}),b.jsx(Rt,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(Rt,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Rt,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Scaling Summary"}),b.jsx(tn,{children:"Memory usage characteristics and scaling patterns across different components"})]}),b.jsx(be,{children:b.jsx("div",{className:"space-y-4",children:l.map((f,d)=>b.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:[b.jsxs("div",{className:"space-y-1",children:[b.jsx("p",{className:"font-medium",children:f.component}),b.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[b.jsxs("span",{children:["Range: ",f.min,"-",f.max,"MB"]}),b.jsxs("span",{children:["Pattern: ",f.scaling]})]})]}),b.jsxs("div",{className:"flex items-center space-x-2",children:[b.jsx(q4,{className:"h-4 w-4 text-green-600"}),b.jsx("span",{className:"text-sm font-medium text-green-700",children:f.efficiency})]})]},d))})})]})]})]})};var rh="rovingFocusGroup.onEntryFocus",Woe={bubbles:!1,cancelable:!0},Lu="RovingFocusGroup",[Dv,XS,qoe]=w6(Lu),[Voe,YS]=fs(Lu,[qoe]),[Koe,Xoe]=Voe(Lu),QS=k.forwardRef((e,t)=>b.jsx(Dv.Provider,{scope:e.__scopeRovingFocusGroup,children:b.jsx(Dv.Slot,{scope:e.__scopeRovingFocusGroup,children:b.jsx(Yoe,{...e,ref:t})})}));QS.displayName=Lu;var Yoe=k.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:a=!1,dir:o,currentTabStopId:i,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:l,onEntryFocus:u,preventScrollOnEntryFocus:p=!1,...c}=e,f=k.useRef(null),d=Ye(t,f),h=Ry(o),[m,g]=gp({prop:i,defaultProp:s??null,onChange:l,caller:Lu}),[v,y]=k.useState(!1),x=Ca(u),P=XS(n),w=k.useRef(!1),[S,O]=k.useState(0);return k.useEffect(()=>{const _=f.current;if(_)return _.addEventListener(rh,x),()=>_.removeEventListener(rh,x)},[x]),b.jsx(Koe,{scope:n,orientation:r,dir:h,loop:a,currentTabStopId:m,onItemFocus:k.useCallback(_=>g(_),[g]),onItemShiftTab:k.useCallback(()=>y(!0),[]),onFocusableItemAdd:k.useCallback(()=>O(_=>_+1),[]),onFocusableItemRemove:k.useCallback(()=>O(_=>_-1),[]),children:b.jsx(Ee.div,{tabIndex:v||S===0?-1:0,"data-orientation":r,...c,ref:d,style:{outline:"none",...e.style},onMouseDown:fe(e.onMouseDown,()=>{w.current=!0}),onFocus:fe(e.onFocus,_=>{const C=!w.current;if(_.target===_.currentTarget&&C&&!v){const j=new CustomEvent(rh,Woe);if(_.currentTarget.dispatchEvent(j),!j.defaultPrevented){const E=P().filter(R=>R.focusable),T=E.find(R=>R.active),N=E.find(R=>R.id===m),I=[T,N,...E].filter(Boolean).map(R=>R.ref.current);eO(I,p)}}w.current=!1}),onBlur:fe(e.onBlur,()=>y(!1))})})}),ZS="RovingFocusGroupItem",JS=k.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:a=!1,tabStopId:o,children:i,...s}=e,l=Tu(),u=o||l,p=Xoe(ZS,n),c=p.currentTabStopId===u,f=XS(n),{onFocusableItemAdd:d,onFocusableItemRemove:h,currentTabStopId:m}=p;return k.useEffect(()=>{if(r)return d(),()=>h()},[r,d,h]),b.jsx(Dv.ItemSlot,{scope:n,id:u,focusable:r,active:a,children:b.jsx(Ee.span,{tabIndex:c?0:-1,"data-orientation":p.orientation,...s,ref:t,onMouseDown:fe(e.onMouseDown,g=>{r?p.onItemFocus(u):g.preventDefault()}),onFocus:fe(e.onFocus,()=>p.onItemFocus(u)),onKeyDown:fe(e.onKeyDown,g=>{if(g.key==="Tab"&&g.shiftKey){p.onItemShiftTab();return}if(g.target!==g.currentTarget)return;const v=Joe(g,p.orientation,p.dir);if(v!==void 0){if(g.metaKey||g.ctrlKey||g.altKey||g.shiftKey)return;g.preventDefault();let x=f().filter(P=>P.focusable).map(P=>P.ref.current);if(v==="last")x.reverse();else if(v==="prev"||v==="next"){v==="prev"&&x.reverse();const P=x.indexOf(g.currentTarget);x=p.loop?eie(x,P+1):x.slice(P+1)}setTimeout(()=>eO(x))}}),children:typeof i=="function"?i({isCurrentTabStop:c,hasTabStop:m!=null}):i})})});JS.displayName=ZS;var Qoe={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Zoe(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function Joe(e,t,n){const r=Zoe(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return Qoe[r]}function eO(e,t=!1){const n=document.activeElement;for(const r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function eie(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var tie=QS,nie=JS;function rie(e,t){return k.useReducer((n,r)=>t[n][r]??n,e)}var t1=e=>{const{present:t,children:n}=e,r=aie(t),a=typeof n=="function"?n({present:r.isPresent}):k.Children.only(n),o=Ye(r.ref,oie(a));return typeof n=="function"||r.isPresent?k.cloneElement(a,{ref:o}):null};t1.displayName="Presence";function aie(e){const[t,n]=k.useState(),r=k.useRef(null),a=k.useRef(e),o=k.useRef("none"),i=e?"mounted":"unmounted",[s,l]=rie(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return k.useEffect(()=>{const u=Oc(r.current);o.current=s==="mounted"?u:"none"},[s]),jt(()=>{const u=r.current,p=a.current;if(p!==e){const f=o.current,d=Oc(u);e?l("MOUNT"):d==="none"||(u==null?void 0:u.display)==="none"?l("UNMOUNT"):l(p&&f!==d?"ANIMATION_OUT":"UNMOUNT"),a.current=e}},[e,l]),jt(()=>{if(t){let u;const p=t.ownerDocument.defaultView??window,c=d=>{const m=Oc(r.current).includes(d.animationName);if(d.target===t&&m&&(l("ANIMATION_END"),!a.current)){const g=t.style.animationFillMode;t.style.animationFillMode="forwards",u=p.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=g)})}},f=d=>{d.target===t&&(o.current=Oc(r.current))};return t.addEventListener("animationstart",f),t.addEventListener("animationcancel",c),t.addEventListener("animationend",c),()=>{p.clearTimeout(u),t.removeEventListener("animationstart",f),t.removeEventListener("animationcancel",c),t.removeEventListener("animationend",c)}}else l("ANIMATION_END")},[t,l]),{isPresent:["mounted","unmountSuspended"].includes(s),ref:k.useCallback(u=>{r.current=u?getComputedStyle(u):null,n(u)},[])}}function Oc(e){return(e==null?void 0:e.animationName)||"none"}function oie(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var zd="Tabs",[iie,Ase]=fs(zd,[YS]),tO=YS(),[sie,n1]=iie(zd),nO=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,onValueChange:a,defaultValue:o,orientation:i="horizontal",dir:s,activationMode:l="automatic",...u}=e,p=Ry(s),[c,f]=gp({prop:r,onChange:a,defaultProp:o??"",caller:zd});return b.jsx(sie,{scope:n,baseId:Tu(),value:c,onValueChange:f,orientation:i,dir:p,activationMode:l,children:b.jsx(Ee.div,{dir:p,"data-orientation":i,...u,ref:t})})});nO.displayName=zd;var rO="TabsList",aO=k.forwardRef((e,t)=>{const{__scopeTabs:n,loop:r=!0,...a}=e,o=n1(rO,n),i=tO(n);return b.jsx(tie,{asChild:!0,...i,orientation:o.orientation,dir:o.dir,loop:r,children:b.jsx(Ee.div,{role:"tablist","aria-orientation":o.orientation,...a,ref:t})})});aO.displayName=rO;var oO="TabsTrigger",iO=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,disabled:a=!1,...o}=e,i=n1(oO,n),s=tO(n),l=uO(i.baseId,r),u=cO(i.baseId,r),p=r===i.value;return b.jsx(nie,{asChild:!0,...s,focusable:!a,active:p,children:b.jsx(Ee.button,{type:"button",role:"tab","aria-selected":p,"aria-controls":u,"data-state":p?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:l,...o,ref:t,onMouseDown:fe(e.onMouseDown,c=>{!a&&c.button===0&&c.ctrlKey===!1?i.onValueChange(r):c.preventDefault()}),onKeyDown:fe(e.onKeyDown,c=>{[" ","Enter"].includes(c.key)&&i.onValueChange(r)}),onFocus:fe(e.onFocus,()=>{const c=i.activationMode!=="manual";!p&&!a&&c&&i.onValueChange(r)})})})});iO.displayName=oO;var sO="TabsContent",lO=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,forceMount:a,children:o,...i}=e,s=n1(sO,n),l=uO(s.baseId,r),u=cO(s.baseId,r),p=r===s.value,c=k.useRef(p);return k.useEffect(()=>{const f=requestAnimationFrame(()=>c.current=!1);return()=>cancelAnimationFrame(f)},[]),b.jsx(t1,{present:a||p,children:({present:f})=>b.jsx(Ee.div,{"data-state":p?"active":"inactive","data-orientation":s.orientation,role:"tabpanel","aria-labelledby":l,hidden:!f,id:u,tabIndex:0,...i,ref:t,style:{...e.style,animationDuration:c.current?"0s":void 0},children:f&&o})})});lO.displayName=sO;function uO(e,t){return`${e}-trigger-${t}`}function cO(e,t){return`${e}-content-${t}`}var lie=nO,pO=aO,fO=iO,dO=lO;const uie=lie,mO=k.forwardRef(({className:e,...t},n)=>b.jsx(pO,{ref:n,className:Oe("inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",e),...t}));mO.displayName=pO.displayName;const Bc=k.forwardRef(({className:e,...t},n)=>b.jsx(fO,{ref:n,className:Oe("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",e),...t}));Bc.displayName=fO.displayName;const Hc=k.forwardRef(({className:e,...t},n)=>b.jsx(dO,{ref:n,className:Oe("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));Hc.displayName=dO.displayName;const cie={metadata:{version:"1.4.2",runId:"1.4.2-1752805392474",date:"2025-07-18T02:23:12.474Z",environment:"production",description:"Benchmark results for version 1.4.2",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5153.92,totalRequests:154618,latency:{min:383,mean:7923,max:80375,pstdev:13254,percentiles:{p50:3722,p75:6072,p80:6915,p90:11685,p95:49872,p99:56281,p999:62722}},resources:{envoyGateway:{memory:{min:131.64,max:158.27,mean:153.65},cpu:{min:.13,max:1,mean:.43}},envoyProxy:{memory:{min:0,max:27.04,mean:24.5},cpu:{min:0,max:92.27,mean:13.11}}},poolOverflow:357,upstreamConnections:43},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5214.96,totalRequests:156456,latency:{min:392,mean:6917,max:94703,pstdev:12289,percentiles:{p50:3265,p75:5168,p80:5850,p90:9014,p95:48109,p99:54501,p999:61138}},resources:{envoyGateway:{memory:{min:151.75,max:162.37,mean:156.16},cpu:{min:.27,max:4.07,mean:.93}},envoyProxy:{memory:{min:26.85,max:33.23,mean:31.93},cpu:{min:0,max:99.8,mean:2.75}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5286.96,totalRequests:158609,latency:{min:368,mean:7734,max:92332,pstdev:12933,percentiles:{p50:3787,p75:5897,p80:6637,p90:10518,p95:49209,p99:55494,p999:62668}},resources:{envoyGateway:{memory:{min:154.29,max:162.45,mean:160.12},cpu:{min:.4,max:8.13,mean:1.15}},envoyProxy:{memory:{min:33.08,max:37.43,mean:36.96},cpu:{min:0,max:99.94,mean:12.84}}},poolOverflow:357,upstreamConnections:43},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5071.92,totalRequests:152158,latency:{min:367,mean:7108,max:96673,pstdev:12611,percentiles:{p50:3259,p75:5273,p80:5983,p90:9540,p95:48895,p99:55816,p999:64583}},resources:{envoyGateway:{memory:{min:178.72,max:189.43,mean:185.02},cpu:{min:.53,max:49.47,mean:4.51}},envoyProxy:{memory:{min:53.3,max:57.54,mean:57.04},cpu:{min:0,max:100.16,mean:15}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:4987.92,totalRequests:149640,latency:{min:394,mean:7071,max:108810,pstdev:12666,percentiles:{p50:3283,p75:5167,p80:5821,p90:9217,p95:48912,p99:56031,p999:68722}},resources:{envoyGateway:{memory:{min:187.59,max:203.43,mean:199.65},cpu:{min:.27,max:48.25,mean:1.88}},envoyProxy:{memory:{min:73.41,max:79.6,mean:79.35},cpu:{min:0,max:99.91,mean:11.81}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4945.69,totalRequests:148373,latency:{min:411,mean:7306,max:101023,pstdev:12990,percentiles:{p50:3249,p75:5440,p80:6223,p90:10246,p95:49207,p99:57444,p999:69570}},resources:{envoyGateway:{memory:{min:231.85,max:243.1,mean:237.75},cpu:{min:.2,max:1.2,mean:.84}},envoyProxy:{memory:{min:129.84,max:130.36,mean:129.96},cpu:{min:0,max:99.89,mean:11.78}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5200.02,totalRequests:156013,latency:{min:397,mean:7832,max:75223,pstdev:13154,percentiles:{p50:3651,p75:5953,p80:6758,p90:11656,p95:49915,p99:56150,p999:62173}},resources:{envoyGateway:{memory:{min:262.52,max:266.5,mean:263.99},cpu:{min:.67,max:3.53,mean:1.15}},envoyProxy:{memory:{min:123.49,max:123.65,mean:123.54},cpu:{min:0,max:100.22,mean:7.55}}},poolOverflow:357,upstreamConnections:43},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5116.68,totalRequests:153503,latency:{min:404,mean:7069,max:71688,pstdev:12498,percentiles:{p50:3313,p75:5203,p80:5888,p90:9173,p95:48934,p99:55580,p999:61552}},resources:{envoyGateway:{memory:{min:266.25,max:277.75,mean:267.54},cpu:{min:.67,max:7.13,mean:1.51}},envoyProxy:{memory:{min:123.47,max:123.67,mean:123.53},cpu:{min:0,max:99.78,mean:4.47}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5153.5,totalRequests:154605,latency:{min:376,mean:6989,max:80056,pstdev:12394,percentiles:{p50:3284,p75:5189,p80:5871,p90:9047,p95:48644,p99:55019,p999:61106}},resources:{envoyGateway:{memory:{min:170.85,max:277.75,mean:210.44},cpu:{min:.67,max:68.27,mean:7.39}},envoyProxy:{memory:{min:123.46,max:123.75,mean:123.55},cpu:{min:0,max:100.02,mean:16.06}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5125.52,totalRequests:153766,latency:{min:369,mean:6827,max:85323,pstdev:12196,percentiles:{p50:3193,p75:5036,p80:5699,p90:8862,p95:47597,p99:54747,p999:64284}},resources:{envoyGateway:{memory:{min:181.68,max:196.62,mean:192.08},cpu:{min:.4,max:72.6,mean:3.62}},envoyProxy:{memory:{min:129.86,max:130.06,mean:129.95},cpu:{min:0,max:100.07,mean:13.11}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5130.15,totalRequests:153916,latency:{min:389,mean:7004,max:103731,pstdev:12505,percentiles:{p50:3244,p75:5247,p80:5944,p90:9184,p95:48279,p99:55420,p999:66549}},resources:{envoyGateway:{memory:{min:205.04,max:208.2,mean:206.96},cpu:{min:.33,max:54.27,mean:2.52}},envoyProxy:{memory:{min:129.85,max:130.02,mean:129.9},cpu:{min:0,max:91.79,mean:22.69}}},poolOverflow:362,upstreamConnections:38}]},pie={metadata:{version:"1.4.1",runId:"1.4.1-1750189826783",date:"2025-06-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5440.31,totalRequests:163209,latency:{min:335,mean:6565,max:66668,pstdev:11480,percentiles:{p50:3258,p75:5079,p80:5722,p90:8679,p95:45924,p99:53512,p999:58220}},resources:{envoyGateway:{memory:{min:128.02,max:151.26,mean:147.41},cpu:{min:.27,max:.67,mean:.45}},envoyProxy:{memory:{min:0,max:26.92,mean:22.58},cpu:{min:0,max:99.73,mean:6.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5429.88,totalRequests:162900,latency:{min:345,mean:6468,max:70791,pstdev:11793,percentiles:{p50:3170,p75:4794,p80:5311,p90:7534,p95:47400,p99:53536,p999:58034}},resources:{envoyGateway:{memory:{min:151.26,max:170.78,mean:161.92},cpu:{min:.4,max:4.33,mean:.97}},envoyProxy:{memory:{min:26.73,max:33.13,mean:31.63},cpu:{min:0,max:99.94,mean:3.35}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5499.86,totalRequests:164996,latency:{min:391,mean:8147,max:99663,pstdev:13319,percentiles:{p50:3957,p75:6308,p80:7120,p90:11799,p95:49942,p99:56190,p999:62709}},resources:{envoyGateway:{memory:{min:161.19,max:165.52,mean:163.96},cpu:{min:.4,max:8.67,mean:1.36}},envoyProxy:{memory:{min:32.98,max:39.18,mean:38.14},cpu:{min:0,max:99.97,mean:8.67}}},poolOverflow:353,upstreamConnections:47},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5335.1,totalRequests:160053,latency:{min:365,mean:6734,max:90963,pstdev:12096,percentiles:{p50:3228,p75:5042,p80:5649,p90:8465,p95:47704,p99:54396,p999:61714}},resources:{envoyGateway:{memory:{min:183.87,max:223.25,mean:206.96},cpu:{min:.47,max:79.87,mean:3.9}},envoyProxy:{memory:{min:57.15,max:57.52,mean:57.34},cpu:{min:0,max:99.97,mean:13.49}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5256.52,totalRequests:157696,latency:{min:389,mean:6320,max:77848,pstdev:11829,percentiles:{p50:2974,p75:4705,p80:5292,p90:7729,p95:47173,p99:54317,p999:64679}},resources:{envoyGateway:{memory:{min:186.16,max:199.19,mean:195.68},cpu:{min:.4,max:1.2,mean:.75}},envoyProxy:{memory:{min:63.26,max:79.43,mean:79.04},cpu:{min:0,max:99.86,mean:17.64}}},poolOverflow:365,upstreamConnections:35},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5280.09,totalRequests:158409,latency:{min:387,mean:6871,max:94064,pstdev:12441,percentiles:{p50:3186,p75:5019,p80:5651,p90:8766,p95:48361,p99:55758,p999:67403}},resources:{envoyGateway:{memory:{min:230.81,max:243.68,mean:238.65},cpu:{min:.13,max:1.13,mean:.8}},envoyProxy:{memory:{min:127.63,max:127.86,mean:127.72},cpu:{min:0,max:85.57,mean:6.19}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5430.18,totalRequests:162909,latency:{min:376,mean:6679,max:79630,pstdev:12142,percentiles:{p50:3147,p75:5015,p80:5630,p90:8374,p95:48377,p99:54654,p999:59858}},resources:{envoyGateway:{memory:{min:164.61,max:169.75,mean:165.39},cpu:{min:.8,max:3.47,mean:1.14}},envoyProxy:{memory:{min:121.22,max:121.61,mean:121.3},cpu:{min:0,max:99.74,mean:8.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5506.49,totalRequests:165195,latency:{min:386,mean:8319,max:85860,pstdev:13567,percentiles:{p50:3951,p75:6305,p80:7155,p90:12741,p95:50714,p99:57303,p999:63928}},resources:{envoyGateway:{memory:{min:165.63,max:175.23,mean:169.06},cpu:{min:.8,max:7.53,mean:1.54}},envoyProxy:{memory:{min:111.91,max:121.36,mean:113.46},cpu:{min:0,max:99.75,mean:7.62}}},poolOverflow:352,upstreamConnections:48},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5452.96,totalRequests:163589,latency:{min:395,mean:7694,max:97460,pstdev:12949,percentiles:{p50:3636,p75:5828,p80:6627,p90:10929,p95:49506,p99:55681,p999:62369}},resources:{envoyGateway:{memory:{min:166.64,max:195.48,mean:174.79},cpu:{min:.8,max:38.2,mean:5.63}},envoyProxy:{memory:{min:111.8,max:112.36,mean:111.95},cpu:{min:0,max:35.17,mean:2.77}}},poolOverflow:356,upstreamConnections:44},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5360.33,totalRequests:160815,latency:{min:354,mean:6538,max:92344,pstdev:12045,percentiles:{p50:3068,p75:4770,p80:5341,p90:7974,p95:47742,p99:54480,p999:62144}},resources:{envoyGateway:{memory:{min:180.27,max:192.65,mean:189.01},cpu:{min:.67,max:46.53,mean:4.41}},envoyProxy:{memory:{min:127.66,max:127.84,mean:127.72},cpu:{min:0,max:100.03,mean:9.14}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5334.03,totalRequests:160024,latency:{min:392,mean:6782,max:132493,pstdev:12373,percentiles:{p50:3182,p75:4977,p80:5586,p90:8359,p95:48365,p99:55252,p999:64712}},resources:{envoyGateway:{memory:{min:203.37,max:217.03,mean:209.04},cpu:{min:.67,max:5.67,mean:1.33}},envoyProxy:{memory:{min:127.65,max:127.84,mean:127.72},cpu:{min:0,max:99.86,mean:9.91}}},poolOverflow:362,upstreamConnections:38}]},fie={metadata:{version:"1.4.0",runId:"1.4.0-1750189826781",date:"2025-05-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5433.23,totalRequests:163e3,latency:{min:367,mean:6485,max:65673,pstdev:11042,percentiles:{p50:3222,p75:5166,p80:5879,p90:9253,p95:43970,p99:52201,p999:56854}},resources:{envoyGateway:{memory:{min:128.52,max:156.24,mean:150.28},cpu:{min:.13,max:.67,mean:.44}},envoyProxy:{memory:{min:0,max:27.01,mean:21.73},cpu:{min:0,max:72.36,mean:2.32}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5340.69,totalRequests:160221,latency:{min:355,mean:6582,max:88674,pstdev:11849,percentiles:{p50:3134,p75:4984,p80:5597,p90:8545,p95:46972,p99:53663,p999:59625}},resources:{envoyGateway:{memory:{min:155.3,max:169.25,mean:159.23},cpu:{min:.27,max:4.73,mean:.91}},envoyProxy:{memory:{min:26.64,max:33.18,mean:32.22},cpu:{min:0,max:99.91,mean:11.1}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5205.41,totalRequests:156162,latency:{min:384,mean:4221,max:63500,pstdev:9204,percentiles:{p50:2039,p75:3063,p80:3399,p90:4605,p95:7844,p99:49758,p999:54032}},resources:{envoyGateway:{memory:{min:156.77,max:174.36,mean:168.53},cpu:{min:.4,max:8.8,mean:1.37}},envoyProxy:{memory:{min:32.83,max:37.05,mean:36.58},cpu:{min:0,max:99.97,mean:4.39}}},poolOverflow:377,upstreamConnections:23},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5271.84,totalRequests:158157,latency:{min:393,mean:7209,max:93327,pstdev:12640,percentiles:{p50:3281,p75:5443,p80:6241,p90:10258,p95:48494,p99:55793,p999:65497}},resources:{envoyGateway:{memory:{min:179.66,max:187.8,mean:184.81},cpu:{min:.53,max:27.13,mean:4.87}},envoyProxy:{memory:{min:53.06,max:57.31,mean:56.58},cpu:{min:0,max:99.96,mean:15.82}}},poolOverflow:360,upstreamConnections:40},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5351.64,totalRequests:160555,latency:{min:370,mean:6797,max:91549,pstdev:12276,percentiles:{p50:3145,p75:5052,p80:5728,p90:8916,p95:47915,p99:54947,p999:65368}},resources:{envoyGateway:{memory:{min:186.4,max:200.27,mean:195.8},cpu:{min:.4,max:26.07,mean:1.71}},envoyProxy:{memory:{min:71.16,max:77.36,mean:77},cpu:{min:0,max:94.88,mean:3.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5239.17,totalRequests:157179,latency:{min:367,mean:6908,max:97939,pstdev:12608,percentiles:{p50:3176,p75:5046,p80:5680,p90:8770,p95:48472,p99:56449,p999:68317}},resources:{envoyGateway:{memory:{min:220.03,max:237.27,mean:233.38},cpu:{min:.07,max:1.2,mean:.78}},envoyProxy:{memory:{min:129.13,max:129.59,mean:129.34},cpu:{min:0,max:74.43,mean:2.24}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5409.79,totalRequests:162296,latency:{min:386,mean:6690,max:71688,pstdev:12144,percentiles:{p50:3075,p75:4937,p80:5610,p90:8727,p95:48252,p99:54595,p999:59408}},resources:{envoyGateway:{memory:{min:165.91,max:176.04,mean:168.11},cpu:{min:.67,max:3.73,mean:1.23}},envoyProxy:{memory:{min:123.28,max:123.45,mean:123.35},cpu:{min:0,max:99.72,mean:9.08}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5480.62,totalRequests:164426,latency:{min:378,mean:7119,max:85032,pstdev:12404,percentiles:{p50:3390,p75:5340,p80:6015,p90:9300,p95:48457,p99:55005,p999:60284}},resources:{envoyGateway:{memory:{min:165.36,max:171.88,mean:169.47},cpu:{min:.6,max:6.8,mean:1.44}},envoyProxy:{memory:{min:123.27,max:123.97,mean:123.42},cpu:{min:0,max:100.05,mean:11.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5413.63,totalRequests:162409,latency:{min:357,mean:6664,max:77307,pstdev:12030,percentiles:{p50:3140,p75:4935,p80:5560,p90:8456,p95:47661,p99:54544,p999:61110}},resources:{envoyGateway:{memory:{min:170.86,max:186.68,mean:173.53},cpu:{min:.67,max:67.27,mean:7.29}},envoyProxy:{memory:{min:123.27,max:129.61,mean:124.04},cpu:{min:0,max:100,mean:5.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5356.13,totalRequests:160684,latency:{min:376,mean:6544,max:86540,pstdev:11908,percentiles:{p50:3079,p75:4927,p80:5554,p90:8360,p95:47069,p99:54265,p999:62601}},resources:{envoyGateway:{memory:{min:176.87,max:192.99,mean:189.97},cpu:{min:.6,max:73.6,mean:5.05}},envoyProxy:{memory:{min:129.54,max:129.76,mean:129.65},cpu:{min:0,max:100.08,mean:11.45}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5339.99,totalRequests:160200,latency:{min:395,mean:6772,max:99700,pstdev:12345,percentiles:{p50:3118,p75:4954,p80:5598,p90:8672,p95:48261,p99:55498,p999:65902}},resources:{envoyGateway:{memory:{min:199.81,max:210.76,mean:205.85},cpu:{min:.4,max:31.13,mean:2.01}},envoyProxy:{memory:{min:129.54,max:129.74,mean:129.6},cpu:{min:0,max:99.87,mean:8.99}}},poolOverflow:362,upstreamConnections:38}]},die={metadata:{version:"1.3.3",runId:"1.3.3-1750189826778",date:"2025-05-09",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5302.05,totalRequests:159067,latency:{min:384,mean:7440,max:68399,pstdev:12191,percentiles:{p50:3692,p75:5903,p80:6670,p90:10777,p95:47519,p99:54405,p999:59346}},resources:{envoyGateway:{memory:{min:126.17,max:126.17,mean:126.17},cpu:{min:.95,max:.95,mean:.95}},envoyProxy:{memory:{min:25.93,max:25.93,mean:25.93},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:358,upstreamConnections:42},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5270.25,totalRequests:158112,latency:{min:392,mean:7067,max:77467,pstdev:12552,percentiles:{p50:3330,p75:5225,p80:5887,p90:8906,p95:49113,p99:55103,p999:60295}},resources:{envoyGateway:{memory:{min:145.89,max:145.89,mean:145.89},cpu:{min:1.66,max:1.66,mean:1.66}},envoyProxy:{memory:{min:32.1,max:32.1,mean:32.1},cpu:{min:60.71,max:60.71,mean:60.71}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5307.61,totalRequests:159230,latency:{min:387,mean:7350,max:76185,pstdev:12732,percentiles:{p50:3508,p75:5524,p80:6220,p90:9652,p95:49100,p99:55363,p999:62654}},resources:{envoyGateway:{memory:{min:153.05,max:153.05,mean:153.05},cpu:{min:3.08,max:3.08,mean:3.08}},envoyProxy:{memory:{min:38.29,max:38.29,mean:38.29},cpu:{min:91.5,max:91.5,mean:91.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5139.63,totalRequests:154189,latency:{min:390,mean:7376,max:78098,pstdev:12993,percentiles:{p50:3429,p75:5431,p80:6116,p90:9633,p95:49809,p99:56043,p999:64651}},resources:{envoyGateway:{memory:{min:152.28,max:152.28,mean:152.28},cpu:{min:15.6,max:15.6,mean:15.6}},envoyProxy:{memory:{min:56.33,max:56.33,mean:56.33},cpu:{min:124.15,max:124.15,mean:124.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5169.8,totalRequests:155094,latency:{min:374,mean:7385,max:105918,pstdev:13085,percentiles:{p50:3382,p75:5336,p80:6024,p90:9658,p95:50104,p99:56487,p999:66418}},resources:{envoyGateway:{memory:{min:166.29,max:166.29,mean:166.29},cpu:{min:28.13,max:28.13,mean:28.13}},envoyProxy:{memory:{min:76.53,max:76.53,mean:76.53},cpu:{min:157.45,max:157.45,mean:157.45}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4963.46,totalRequests:148908,latency:{min:374,mean:7335,max:94580,pstdev:13294,percentiles:{p50:3255,p75:5279,p80:5998,p90:9532,p95:50294,p99:58908,p999:70729}},resources:{envoyGateway:{memory:{min:199.79,max:199.79,mean:199.79},cpu:{min:61.67,max:61.67,mean:61.67}},envoyProxy:{memory:{min:120.77,max:120.77,mean:120.77},cpu:{min:195.1,max:195.1,mean:195.1}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5200.07,totalRequests:156001,latency:{min:395,mean:7530,max:81936,pstdev:13142,percentiles:{p50:3438,p75:5497,p80:6226,p90:10218,p95:50345,p99:56436,p999:61919}},resources:{envoyGateway:{memory:{min:221.87,max:221.87,mean:221.87},cpu:{min:114.77,max:114.77,mean:114.77}},envoyProxy:{memory:{min:121.27,max:121.27,mean:121.27},cpu:{min:356.4,max:356.4,mean:356.4}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5229.66,totalRequests:156893,latency:{min:368,mean:6911,max:72273,pstdev:12396,percentiles:{p50:3227,p75:5075,p80:5695,p90:8751,p95:48676,p99:54822,p999:59865}},resources:{envoyGateway:{memory:{min:221.8,max:221.8,mean:221.8},cpu:{min:114.13,max:114.13,mean:114.13}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:325.9,max:325.9,mean:325.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5099.34,totalRequests:152980,latency:{min:357,mean:6637,max:68100,pstdev:12012,percentiles:{p50:3167,p75:4972,p80:5580,p90:8302,p95:47650,p99:53993,p999:59299}},resources:{envoyGateway:{memory:{min:182.69,max:182.69,mean:182.69},cpu:{min:113.02,max:113.02,mean:113.02}},envoyProxy:{memory:{min:121.2,max:121.2,mean:121.2},cpu:{min:295.3,max:295.3,mean:295.3}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5145.13,totalRequests:154357,latency:{min:379,mean:7234,max:111517,pstdev:12814,percentiles:{p50:3381,p75:5331,p80:5993,p90:9269,p95:49465,p99:55562,p999:64862}},resources:{envoyGateway:{memory:{min:159.09,max:159.09,mean:159.09},cpu:{min:102.57,max:102.57,mean:102.57}},envoyProxy:{memory:{min:121.08,max:121.08,mean:121.08},cpu:{min:263.29,max:263.29,mean:263.29}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5130.95,totalRequests:153929,latency:{min:365,mean:7098,max:95834,pstdev:12843,percentiles:{p50:3267,p75:5110,p80:5752,p90:8975,p95:49702,p99:56408,p999:67330}},resources:{envoyGateway:{memory:{min:163.91,max:163.91,mean:163.91},cpu:{min:91.18,max:91.18,mean:91.18}},envoyProxy:{memory:{min:120.91,max:120.91,mean:120.91},cpu:{min:230.77,max:230.77,mean:230.77}}},poolOverflow:362,upstreamConnections:38}]},mie={metadata:{version:"1.3.2",runId:"1.3.2-1750189826777",date:"2025-03-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5203.06,totalRequests:156092,latency:{min:371,mean:6970,max:73949,pstdev:12106,percentiles:{p50:3331,p75:5396,p80:6080,p90:9715,p95:47564,p99:55666,p999:60872}},resources:{envoyGateway:{memory:{min:126.68,max:126.68,mean:126.68},cpu:{min:.99,max:.99,mean:.99}},envoyProxy:{memory:{min:28.17,max:28.17,mean:28.17},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5157.35,totalRequests:154724,latency:{min:380,mean:6752,max:83992,pstdev:12526,percentiles:{p50:3089,p75:4875,p80:5484,p90:8253,p95:49682,p99:55398,p999:61507}},resources:{envoyGateway:{memory:{min:129.05,max:129.05,mean:129.05},cpu:{min:1.79,max:1.79,mean:1.79}},envoyProxy:{memory:{min:32.33,max:32.33,mean:32.33},cpu:{min:61.02,max:61.02,mean:61.02}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5052.19,totalRequests:151566,latency:{min:363,mean:7564,max:72122,pstdev:13492,percentiles:{p50:3384,p75:5472,p80:6191,p90:9941,p95:51320,p99:57128,p999:63107}},resources:{envoyGateway:{memory:{min:146.92,max:146.92,mean:146.92},cpu:{min:3.17,max:3.17,mean:3.17}},envoyProxy:{memory:{min:40.52,max:40.52,mean:40.52},cpu:{min:91.79,max:91.79,mean:91.79}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5101.42,totalRequests:153051,latency:{min:397,mean:6832,max:82624,pstdev:12894,percentiles:{p50:2990,p75:4798,p80:5418,p90:8366,p95:50391,p99:56737,p999:65114}},resources:{envoyGateway:{memory:{min:154.98,max:154.98,mean:154.98},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.7,max:58.7,mean:58.7},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:4948.44,totalRequests:148459,latency:{min:398,mean:7200,max:94949,pstdev:13256,percentiles:{p50:3208,p75:5057,p80:5652,p90:8780,p95:50821,p99:57442,p999:66746}},resources:{envoyGateway:{memory:{min:163.01,max:163.01,mean:163.01},cpu:{min:27.68,max:27.68,mean:27.68}},envoyProxy:{memory:{min:78.9,max:78.9,mean:78.9},cpu:{min:158.2,max:158.2,mean:158.2}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4933.76,totalRequests:148015,latency:{min:361,mean:7088,max:127959,pstdev:13349,percentiles:{p50:3052,p75:4885,p80:5529,p90:8785,p95:50700,p99:59123,p999:70660}},resources:{envoyGateway:{memory:{min:196.05,max:196.05,mean:196.05},cpu:{min:62.32,max:62.32,mean:62.32}},envoyProxy:{memory:{min:127.19,max:127.19,mean:127.19},cpu:{min:196.79,max:196.79,mean:196.79}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.93,totalRequests:153515,latency:{min:387,mean:9017,max:78245,pstdev:15046,percentiles:{p50:3922,p75:6583,p80:7609,p90:16301,p95:54007,p99:59990,p999:67956}},resources:{envoyGateway:{memory:{min:210.06,max:210.06,mean:210.06},cpu:{min:115.56,max:115.56,mean:115.56}},envoyProxy:{memory:{min:110.31,max:110.31,mean:110.31},cpu:{min:358.89,max:358.89,mean:358.89}}},poolOverflow:351,upstreamConnections:49},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:4991.13,totalRequests:149734,latency:{min:391,mean:7071,max:80433,pstdev:12841,percentiles:{p50:3199,p75:5005,p80:5635,p90:8730,p95:49813,p99:55756,p999:61407}},resources:{envoyGateway:{memory:{min:199.41,max:199.41,mean:199.41},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:127.44,max:127.44,mean:127.44},cpu:{min:328.33,max:328.33,mean:328.33}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5138.59,totalRequests:154161,latency:{min:377,mean:6954,max:86982,pstdev:13049,percentiles:{p50:3045,p75:4886,p80:5525,p90:8466,p95:51048,p99:56733,p999:62337}},resources:{envoyGateway:{memory:{min:219.76,max:219.76,mean:219.76},cpu:{min:113.71,max:113.71,mean:113.71}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:297.73,max:297.73,mean:297.73}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5051.68,totalRequests:151551,latency:{min:389,mean:7977,max:86577,pstdev:14090,percentiles:{p50:3498,p75:5731,p80:6471,p90:10947,p95:52355,p99:58748,p999:67379}},resources:{envoyGateway:{memory:{min:259.14,max:259.14,mean:259.14},cpu:{min:103.22,max:103.22,mean:103.22}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:265.59,max:265.59,mean:265.59}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:4962.4,totalRequests:148872,latency:{min:384,mean:7209,max:110186,pstdev:13357,percentiles:{p50:3112,p75:5018,p80:5694,p90:9338,p95:51267,p99:57384,p999:67244}},resources:{envoyGateway:{memory:{min:177.76,max:177.76,mean:177.76},cpu:{min:91.86,max:91.86,mean:91.86}},envoyProxy:{memory:{min:127.24,max:127.24,mean:127.24},cpu:{min:233.07,max:233.07,mean:233.07}}},poolOverflow:362,upstreamConnections:38}]},hie={metadata:{version:"1.3.1",runId:"1.3.1-1750189826775",date:"2025-03-05",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5115.35,totalRequests:153465,latency:{min:389,mean:6604,max:74543,pstdev:11843,percentiles:{p50:3094,p75:5007,p80:5671,p90:8723,p95:46997,p99:55033,p999:60336}},resources:{envoyGateway:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:1.04,max:1.04,mean:1.04}},envoyProxy:{memory:{min:25.28,max:25.28,mean:25.28},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5150.43,totalRequests:154513,latency:{min:386,mean:6919,max:87556,pstdev:12645,percentiles:{p50:3126,p75:5009,p80:5646,p90:8620,p95:49580,p99:55326,p999:60073}},resources:{envoyGateway:{memory:{min:151.59,max:151.59,mean:151.59},cpu:{min:1.83,max:1.83,mean:1.83}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5211.7,totalRequests:156354,latency:{min:376,mean:6687,max:88604,pstdev:12657,percentiles:{p50:2913,p75:4676,p80:5309,p90:8259,p95:49930,p99:55853,p999:63514}},resources:{envoyGateway:{memory:{min:145.61,max:145.61,mean:145.61},cpu:{min:3.19,max:3.19,mean:3.19}},envoyProxy:{memory:{min:35.5,max:35.5,mean:35.5},cpu:{min:91.72,max:91.72,mean:91.72}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5066.99,totalRequests:152016,latency:{min:386,mean:7628,max:93048,pstdev:13700,percentiles:{p50:3310,p75:5414,p80:6156,p90:10289,p95:51750,p99:58007,p999:66938}},resources:{envoyGateway:{memory:{min:156.12,max:156.12,mean:156.12},cpu:{min:15.73,max:15.73,mean:15.73}},envoyProxy:{memory:{min:55.56,max:55.56,mean:55.56},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5098.53,totalRequests:152960,latency:{min:373,mean:7203,max:108142,pstdev:13209,percentiles:{p50:3161,p75:5083,p80:5791,p90:9292,p95:50372,p99:56864,p999:67850}},resources:{envoyGateway:{memory:{min:181.23,max:181.23,mean:181.23},cpu:{min:28.35,max:28.35,mean:28.35}},envoyProxy:{memory:{min:73.6,max:73.6,mean:73.6},cpu:{min:158.01,max:158.01,mean:158.01}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5048.96,totalRequests:151469,latency:{min:366,mean:7462,max:99799,pstdev:13676,percentiles:{p50:3122,p75:5245,p80:6050,p90:10398,p95:50685,p99:59639,p999:74547}},resources:{envoyGateway:{memory:{min:196.57,max:196.57,mean:196.57},cpu:{min:61.62,max:61.62,mean:61.62}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:196.43,max:196.43,mean:196.43}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.49,totalRequests:153495,latency:{min:373,mean:7373,max:79749,pstdev:13231,percentiles:{p50:3334,p75:5268,p80:5935,p90:9436,p95:50972,p99:56680,p999:62969}},resources:{envoyGateway:{memory:{min:213.36,max:213.36,mean:213.36},cpu:{min:114.56,max:114.56,mean:114.56}},envoyProxy:{memory:{min:109.79,max:109.79,mean:109.79},cpu:{min:357.84,max:357.84,mean:357.84}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5128.63,totalRequests:153859,latency:{min:380,mean:6787,max:76259,pstdev:12813,percentiles:{p50:2982,p75:4725,p80:5330,p90:8194,p95:50354,p99:56367,p999:61741}},resources:{envoyGateway:{memory:{min:217.34,max:217.34,mean:217.34},cpu:{min:113.9,max:113.9,mean:113.9}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:327.37,max:327.37,mean:327.37}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5217.06,totalRequests:156516,latency:{min:386,mean:7182,max:93491,pstdev:12999,percentiles:{p50:3211,p75:5188,p80:5872,p90:9449,p95:50083,p99:56135,p999:63309}},resources:{envoyGateway:{memory:{min:220.2,max:220.2,mean:220.2},cpu:{min:112.64,max:112.64,mean:112.64}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:296.73,max:296.73,mean:296.73}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5033.4,totalRequests:151002,latency:{min:380,mean:6522,max:92626,pstdev:12472,percentiles:{p50:2849,p75:4643,p80:5272,p90:8064,p95:49350,p99:55799,p999:64323}},resources:{envoyGateway:{memory:{min:201.77,max:201.77,mean:201.77},cpu:{min:102.25,max:102.25,mean:102.25}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:264.74,max:264.74,mean:264.74}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5061.34,totalRequests:151843,latency:{min:393,mean:7429,max:99934,pstdev:13552,percentiles:{p50:3227,p75:5180,p80:5867,p90:9747,p95:51320,p99:58009,p999:68829}},resources:{envoyGateway:{memory:{min:173.04,max:173.04,mean:173.04},cpu:{min:91.12,max:91.12,mean:91.12}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:360,upstreamConnections:40}]},vie={metadata:{version:"1.3.0",runId:"1.3.0-1750189826772",date:"2025-01-31",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5297.23,totalRequests:158917,latency:{min:371,mean:6861,max:69562,pstdev:12096,percentiles:{p50:3223,p75:5219,p80:5926,p90:9360,p95:48029,p99:54945,p999:60096}},resources:{envoyGateway:{memory:{min:116.36,max:116.36,mean:116.36},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:25.3,max:25.3,mean:25.3},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5276.06,totalRequests:158285,latency:{min:372,mean:6781,max:81436,pstdev:12685,percentiles:{p50:3035,p75:4783,p80:5410,p90:8210,p95:50042,p99:55861,p999:61739}},resources:{envoyGateway:{memory:{min:135.97,max:135.97,mean:135.97},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:60.97,max:60.97,mean:60.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5248.15,totalRequests:157445,latency:{min:386,mean:6832,max:83939,pstdev:12879,percentiles:{p50:2957,p75:4826,p80:5504,p90:8587,p95:50454,p99:56524,p999:63150}},resources:{envoyGateway:{memory:{min:128.67,max:128.67,mean:128.67},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:35.62,max:35.62,mean:35.62},cpu:{min:91.69,max:91.69,mean:91.69}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5190.05,totalRequests:155708,latency:{min:374,mean:6735,max:105820,pstdev:12667,percentiles:{p50:2997,p75:4715,p80:5323,p90:8205,p95:49692,p99:56199,p999:64403}},resources:{envoyGateway:{memory:{min:147.27,max:147.27,mean:147.27},cpu:{min:15.8,max:15.8,mean:15.8}},envoyProxy:{memory:{min:61.52,max:61.52,mean:61.52},cpu:{min:124.52,max:124.52,mean:124.52}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5171.63,totalRequests:155149,latency:{min:345,mean:7139,max:89923,pstdev:13210,percentiles:{p50:3191,p75:5039,p80:5680,p90:8824,p95:50767,p99:57397,p999:67665}},resources:{envoyGateway:{memory:{min:158.88,max:158.88,mean:158.88},cpu:{min:28.37,max:28.37,mean:28.37}},envoyProxy:{memory:{min:76,max:76,mean:76},cpu:{min:157.59,max:157.59,mean:157.59}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4998.06,totalRequests:149944,latency:{min:371,mean:6950,max:98525,pstdev:13111,percentiles:{p50:3057,p75:4816,p80:5416,p90:8383,p95:50270,p99:57946,p999:69038}},resources:{envoyGateway:{memory:{min:182.71,max:182.71,mean:182.71},cpu:{min:61.79,max:61.79,mean:61.79}},envoyProxy:{memory:{min:122.12,max:122.12,mean:122.12},cpu:{min:194.7,max:194.7,mean:194.7}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5224.35,totalRequests:156731,latency:{min:376,mean:6870,max:73203,pstdev:12827,percentiles:{p50:3060,p75:4817,p80:5428,p90:8280,p95:50618,p99:56178,p999:61280}},resources:{envoyGateway:{memory:{min:209.85,max:209.85,mean:209.85},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:110.5,max:110.5,mean:110.5},cpu:{min:356.13,max:356.13,mean:356.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5247.75,totalRequests:157436,latency:{min:383,mean:6991,max:88027,pstdev:12998,percentiles:{p50:3091,p75:4901,p80:5532,p90:8568,p95:50655,p99:56272,p999:62160}},resources:{envoyGateway:{memory:{min:208.95,max:208.95,mean:208.95},cpu:{min:114.35,max:114.35,mean:114.35}},envoyProxy:{memory:{min:122.19,max:122.19,mean:122.19},cpu:{min:325.78,max:325.78,mean:325.78}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5201.69,totalRequests:156051,latency:{min:380,mean:7027,max:78663,pstdev:12995,percentiles:{p50:3129,p75:4963,p80:5600,p90:8642,p95:50726,p99:56254,p999:61509}},resources:{envoyGateway:{memory:{min:211.34,max:211.34,mean:211.34},cpu:{min:113.23,max:113.23,mean:113.23}},envoyProxy:{memory:{min:122.17,max:122.17,mean:122.17},cpu:{min:295.15,max:295.15,mean:295.15}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5206.95,totalRequests:156214,latency:{min:386,mean:6893,max:92049,pstdev:12874,percentiles:{p50:3088,p75:4898,p80:5548,p90:8444,p95:50268,p99:56334,p999:65038}},resources:{envoyGateway:{memory:{min:158.73,max:158.73,mean:158.73},cpu:{min:102.79,max:102.79,mean:102.79}},envoyProxy:{memory:{min:122.15,max:122.15,mean:122.15},cpu:{min:263,max:263,mean:263}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5150.23,totalRequests:154507,latency:{min:375,mean:6786,max:84877,pstdev:12812,percentiles:{p50:3009,p75:4734,p80:5340,p90:8236,p95:50247,p99:56647,p999:65042}},resources:{envoyGateway:{memory:{min:168.04,max:168.04,mean:168.04},cpu:{min:91.51,max:91.51,mean:91.51}},envoyProxy:{memory:{min:122.14,max:122.14,mean:122.14},cpu:{min:230.49,max:230.49,mean:230.49}}},poolOverflow:363,upstreamConnections:37}]},yie={metadata:{version:"1.2.8",runId:"1.2.8-1750189826771",date:"2025-03-25",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.8",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.8/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5878.23,totalRequests:176347,latency:{min:376,mean:9154,max:75661,pstdev:14181,percentiles:{p50:4294,p75:7182,p80:8292,p90:22716,p95:52056,p99:58071,p999:64841}},resources:{envoyGateway:{memory:{min:108.89,max:108.89,mean:108.89},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:28.23,max:28.23,mean:28.23},cpu:{min:30.48,max:30.48,mean:30.48}}},poolOverflow:342,upstreamConnections:58},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5582.21,totalRequests:167469,latency:{min:359,mean:6378,max:69967,pstdev:12106,percentiles:{p50:2864,p75:4529,p80:5113,p90:7717,p95:48431,p99:54521,p999:59967}},resources:{envoyGateway:{memory:{min:132.62,max:132.62,mean:132.62},cpu:{min:1.54,max:1.54,mean:1.54}},envoyProxy:{memory:{min:32.39,max:32.39,mean:32.39},cpu:{min:60.99,max:60.99,mean:60.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5454.1,totalRequests:163623,latency:{min:368,mean:6738,max:72437,pstdev:12216,percentiles:{p50:3318,p75:5037,p80:5581,p90:8092,p95:47886,p99:53829,p999:60200}},resources:{envoyGateway:{memory:{min:135.66,max:135.66,mean:135.66},cpu:{min:2.91,max:2.91,mean:2.91}},envoyProxy:{memory:{min:38.6,max:38.6,mean:38.6},cpu:{min:91.91,max:91.91,mean:91.91}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5496.5,totalRequests:164898,latency:{min:375,mean:6453,max:103043,pstdev:12191,percentiles:{p50:2887,p75:4603,p80:5209,p90:7967,p95:48150,p99:54630,p999:63743}},resources:{envoyGateway:{memory:{min:147.15,max:147.15,mean:147.15},cpu:{min:15.47,max:15.47,mean:15.47}},envoyProxy:{memory:{min:60.75,max:60.75,mean:60.75},cpu:{min:125.31,max:125.31,mean:125.31}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5351.8,totalRequests:160554,latency:{min:377,mean:6516,max:93298,pstdev:12549,percentiles:{p50:2857,p75:4496,p80:5076,p90:7615,p95:49512,p99:55822,p999:65318}},resources:{envoyGateway:{memory:{min:155.79,max:155.79,mean:155.79},cpu:{min:28.01,max:28.01,mean:28.01}},envoyProxy:{memory:{min:82.96,max:82.96,mean:82.96},cpu:{min:159.29,max:159.29,mean:159.29}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5102.69,totalRequests:153086,latency:{min:358,mean:6968,max:108298,pstdev:13304,percentiles:{p50:2979,p75:4802,p80:5441,p90:8343,p95:50370,p99:60203,p999:71446}},resources:{envoyGateway:{memory:{min:190.03,max:190.03,mean:190.03},cpu:{min:61.69,max:61.69,mean:61.69}},envoyProxy:{memory:{min:133.22,max:133.22,mean:133.22},cpu:{min:199.84,max:199.84,mean:199.84}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5424.03,totalRequests:162721,latency:{min:362,mean:6570,max:73609,pstdev:12562,percentiles:{p50:2923,p75:4626,p80:5209,p90:7751,p95:49960,p99:55525,p999:60127}},resources:{envoyGateway:{memory:{min:127.89,max:127.89,mean:127.89},cpu:{min:114.69,max:114.69,mean:114.69}},envoyProxy:{memory:{min:112.11,max:112.11,mean:112.11},cpu:{min:363.01,max:363.01,mean:363.01}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5454.96,totalRequests:163653,latency:{min:363,mean:6397,max:73404,pstdev:12347,percentiles:{p50:2884,p75:4452,p80:4989,p90:7300,p95:49477,p99:55369,p999:61495}},resources:{envoyGateway:{memory:{min:136.28,max:136.28,mean:136.28},cpu:{min:114.05,max:114.05,mean:114.05}},envoyProxy:{memory:{min:114.79,max:114.79,mean:114.79},cpu:{min:332.54,max:332.54,mean:332.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5402.5,totalRequests:162075,latency:{min:366,mean:6575,max:127266,pstdev:12484,percentiles:{p50:2940,p75:4600,p80:5162,p90:7727,p95:49549,p99:55334,p999:61478}},resources:{envoyGateway:{memory:{min:140.91,max:140.91,mean:140.91},cpu:{min:112.87,max:112.87,mean:112.87}},envoyProxy:{memory:{min:114.76,max:114.76,mean:114.76},cpu:{min:301.85,max:301.85,mean:301.85}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5498.81,totalRequests:164969,latency:{min:349,mean:6325,max:84213,pstdev:12296,percentiles:{p50:2789,p75:4396,p80:4944,p90:7293,p95:48961,p99:55212,p999:65019}},resources:{envoyGateway:{memory:{min:148.36,max:148.36,mean:148.36},cpu:{min:102.53,max:102.53,mean:102.53}},envoyProxy:{memory:{min:133.35,max:133.35,mean:133.35},cpu:{min:269.43,max:269.43,mean:269.43}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5308.76,totalRequests:159263,latency:{min:361,mean:6727,max:98807,pstdev:12828,percentiles:{p50:2916,p75:4650,p80:5273,p90:8161,p95:49971,p99:56840,p999:67182}},resources:{envoyGateway:{memory:{min:157.93,max:157.93,mean:157.93},cpu:{min:91.26,max:91.26,mean:91.26}},envoyProxy:{memory:{min:133.2,max:133.2,mean:133.2},cpu:{min:236.02,max:236.02,mean:236.02}}},poolOverflow:362,upstreamConnections:38}]},gie={metadata:{version:"1.2.7",runId:"1.2.7-1750189826769",date:"2025-03-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.7",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.7/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5984.83,totalRequests:179545,latency:{min:402,mean:12033,max:92835,pstdev:16725,percentiles:{p50:5655,p75:9809,p80:11804,p90:49971,p95:55760,p99:64241,p999:73961}},resources:{envoyGateway:{memory:{min:112.35,max:112.35,mean:112.35},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:28.29,max:28.29,mean:28.29},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:323,upstreamConnections:77},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5564.85,totalRequests:166949,latency:{min:362,mean:6416,max:73261,pstdev:12268,percentiles:{p50:2855,p75:4514,p80:5094,p90:7660,p95:49031,p99:54939,p999:60436}},resources:{envoyGateway:{memory:{min:125.94,max:125.94,mean:125.94},cpu:{min:1.52,max:1.52,mean:1.52}},envoyProxy:{memory:{min:34.46,max:34.46,mean:34.46},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5618.23,totalRequests:168547,latency:{min:372,mean:6834,max:85766,pstdev:12643,percentiles:{p50:3107,p75:4954,p80:5560,p90:8454,p95:49485,p99:55513,p999:61272}},resources:{envoyGateway:{memory:{min:132.05,max:132.05,mean:132.05},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:40.63,max:40.63,mean:40.63},cpu:{min:92.02,max:92.02,mean:92.02}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5506.26,totalRequests:165193,latency:{min:383,mean:6670,max:85905,pstdev:12677,percentiles:{p50:2946,p75:4659,p80:5243,p90:7891,p95:49846,p99:56096,p999:65185}},resources:{envoyGateway:{memory:{min:146.09,max:146.09,mean:146.09},cpu:{min:15.43,max:15.43,mean:15.43}},envoyProxy:{memory:{min:62.86,max:62.86,mean:62.86},cpu:{min:125.21,max:125.21,mean:125.21}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5580.92,totalRequests:167428,latency:{min:310,mean:6716,max:89178,pstdev:12233,percentiles:{p50:3157,p75:4861,p80:5446,p90:8231,p95:47419,p99:54634,p999:65587}},resources:{envoyGateway:{memory:{min:163.49,max:163.49,mean:163.49},cpu:{min:28.15,max:28.15,mean:28.15}},envoyProxy:{memory:{min:83.07,max:83.07,mean:83.07},cpu:{min:159.15,max:159.15,mean:159.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5298.3,totalRequests:158951,latency:{min:369,mean:6537,max:122015,pstdev:12654,percentiles:{p50:2914,p75:4472,p80:5012,p90:7402,p95:48639,p99:58097,p999:69103}},resources:{envoyGateway:{memory:{min:187.81,max:187.81,mean:187.81},cpu:{min:62.41,max:62.41,mean:62.41}},envoyProxy:{memory:{min:133.27,max:133.27,mean:133.27},cpu:{min:199.13,max:199.13,mean:199.13}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5623.57,totalRequests:168711,latency:{min:380,mean:7190,max:75063,pstdev:13103,percentiles:{p50:3211,p75:5102,p80:5772,p90:9144,p95:50722,p99:56260,p999:61515}},resources:{envoyGateway:{memory:{min:132.38,max:132.38,mean:132.38},cpu:{min:116.08,max:116.08,mean:116.08}},envoyProxy:{memory:{min:128.69,max:128.69,mean:128.69},cpu:{min:362.3,max:362.3,mean:362.3}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5516.59,totalRequests:165498,latency:{min:329,mean:6044,max:69902,pstdev:11632,percentiles:{p50:2893,p75:4337,p80:4790,p90:6742,p95:47155,p99:53372,p999:58073}},resources:{envoyGateway:{memory:{min:144.02,max:144.02,mean:144.02},cpu:{min:115.5,max:115.5,mean:115.5}},envoyProxy:{memory:{min:129.14,max:129.14,mean:129.14},cpu:{min:331.76,max:331.76,mean:331.76}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5515.82,totalRequests:165475,latency:{min:380,mean:6483,max:79159,pstdev:12363,percentiles:{p50:2872,p75:4545,p80:5131,p90:7760,p95:49190,p99:55408,p999:61890}},resources:{envoyGateway:{memory:{min:135.79,max:135.79,mean:135.79},cpu:{min:114.36,max:114.36,mean:114.36}},envoyProxy:{memory:{min:109,max:109,mean:109},cpu:{min:301.13,max:301.13,mean:301.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5403.53,totalRequests:162106,latency:{min:354,mean:6429,max:83423,pstdev:12305,percentiles:{p50:2864,p75:4496,p80:5072,p90:7504,p95:48885,p99:55414,p999:63565}},resources:{envoyGateway:{memory:{min:155.42,max:155.42,mean:155.42},cpu:{min:103.9,max:103.9,mean:103.9}},envoyProxy:{memory:{min:133.59,max:133.59,mean:133.59},cpu:{min:268.85,max:268.85,mean:268.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5405.24,totalRequests:162162,latency:{min:387,mean:6615,max:90812,pstdev:12660,percentiles:{p50:2913,p75:4593,p80:5174,p90:7866,p95:49461,p99:56510,p999:67248}},resources:{envoyGateway:{memory:{min:165.58,max:165.58,mean:165.58},cpu:{min:92.35,max:92.35,mean:92.35}},envoyProxy:{memory:{min:133.42,max:133.42,mean:133.42},cpu:{min:235.87,max:235.87,mean:235.87}}},poolOverflow:362,upstreamConnections:38}]},xie={metadata:{version:"1.2.6",runId:"1.2.6-1750189826767",date:"2025-01-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.6",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.6/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5668.03,totalRequests:170041,latency:{min:354,mean:6713,max:73658,pstdev:11906,percentiles:{p50:3142,p75:5170,p80:5865,p90:9278,p95:47425,p99:54870,p999:59602}},resources:{envoyGateway:{memory:{min:108.82,max:108.82,mean:108.82},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:25.38,max:25.38,mean:25.38},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5542.06,totalRequests:166262,latency:{min:380,mean:6117,max:73658,pstdev:11949,percentiles:{p50:2749,p75:4310,p80:4842,p90:7067,p95:48484,p99:54499,p999:59725}},resources:{envoyGateway:{memory:{min:135.08,max:135.08,mean:135.08},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.53,max:31.53,mean:31.53},cpu:{min:61.17,max:61.17,mean:61.17}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5556.06,totalRequests:166682,latency:{min:363,mean:6439,max:100163,pstdev:12297,percentiles:{p50:2891,p75:4506,p80:5050,p90:7595,p95:49078,p99:54935,p999:60456}},resources:{envoyGateway:{memory:{min:140.09,max:140.09,mean:140.09},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:37.7,max:37.7,mean:37.7},cpu:{min:91.98,max:91.98,mean:91.98}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5462.58,totalRequests:163882,latency:{min:372,mean:6376,max:78544,pstdev:12289,percentiles:{p50:2853,p75:4454,p80:5002,p90:7458,p95:49076,p99:55132,p999:63879}},resources:{envoyGateway:{memory:{min:146.71,max:146.71,mean:146.71},cpu:{min:15.64,max:15.64,mean:15.64}},envoyProxy:{memory:{min:59.89,max:59.89,mean:59.89},cpu:{min:125.41,max:125.41,mean:125.41}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5427.5,totalRequests:162825,latency:{min:359,mean:6562,max:97148,pstdev:12598,percentiles:{p50:2881,p75:4518,p80:5091,p90:7774,p95:49301,p99:56102,p999:67338}},resources:{envoyGateway:{memory:{min:155.26,max:155.26,mean:155.26},cpu:{min:28.52,max:28.52,mean:28.52}},envoyProxy:{memory:{min:82.08,max:82.08,mean:82.08},cpu:{min:159.72,max:159.72,mean:159.72}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5261.62,totalRequests:157849,latency:{min:373,mean:6972,max:115060,pstdev:13251,percentiles:{p50:3015,p75:4770,p80:5385,p90:8293,p95:50296,p99:59930,p999:70590}},resources:{envoyGateway:{memory:{min:188.13,max:188.13,mean:188.13},cpu:{min:61.78,max:61.78,mean:61.78}},envoyProxy:{memory:{min:130.35,max:130.35,mean:130.35},cpu:{min:199.1,max:199.1,mean:199.1}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5543.17,totalRequests:166299,latency:{min:360,mean:6447,max:75276,pstdev:12396,percentiles:{p50:2866,p75:4486,p80:5040,p90:7527,p95:49663,p99:55240,p999:60647}},resources:{envoyGateway:{memory:{min:129.36,max:129.36,mean:129.36},cpu:{min:115.21,max:115.21,mean:115.21}},envoyProxy:{memory:{min:122.58,max:122.58,mean:122.58},cpu:{min:362.6,max:362.6,mean:362.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5522.73,totalRequests:165682,latency:{min:384,mean:6098,max:68321,pstdev:11922,percentiles:{p50:2776,p75:4326,p80:4838,p90:6958,p95:48431,p99:54296,p999:58857}},resources:{envoyGateway:{memory:{min:140.97,max:140.97,mean:140.97},cpu:{min:114.57,max:114.57,mean:114.57}},envoyProxy:{memory:{min:122.83,max:122.83,mean:122.83},cpu:{min:332.12,max:332.12,mean:332.12}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5500.66,totalRequests:165023,latency:{min:360,mean:6301,max:80400,pstdev:12064,percentiles:{p50:2833,p75:4483,p80:5035,p90:7574,p95:48777,p99:54876,p999:60850}},resources:{envoyGateway:{memory:{min:132.45,max:132.45,mean:132.45},cpu:{min:113.5,max:113.5,mean:113.5}},envoyProxy:{memory:{min:122.84,max:122.84,mean:122.84},cpu:{min:301.26,max:301.26,mean:301.26}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5453.33,totalRequests:163603,latency:{min:357,mean:6324,max:86024,pstdev:12138,percentiles:{p50:2842,p75:4429,p80:4967,p90:7393,p95:48201,p99:54683,p999:65251}},resources:{envoyGateway:{memory:{min:150.62,max:150.62,mean:150.62},cpu:{min:103.11,max:103.11,mean:103.11}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:269.03,max:269.03,mean:269.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5402.96,totalRequests:162089,latency:{min:371,mean:6575,max:90804,pstdev:12621,percentiles:{p50:2877,p75:4543,p80:5114,p90:7832,p95:49375,p99:56092,p999:69132}},resources:{envoyGateway:{memory:{min:159.25,max:159.25,mean:159.25},cpu:{min:91.66,max:91.66,mean:91.66}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:235.83,max:235.83,mean:235.83}}},poolOverflow:362,upstreamConnections:38}]},wie={metadata:{version:"1.2.5",runId:"1.2.5-1750189826766",date:"2025-01-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.5",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.5/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5704.46,totalRequests:171136,latency:{min:370,mean:6520,max:74477,pstdev:11781,percentiles:{p50:3051,p75:4913,p80:5565,p90:8700,p95:47091,p99:54638,p999:59404}},resources:{envoyGateway:{memory:{min:112.07,max:112.07,mean:112.07},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:24.38,max:24.38,mean:24.38},cpu:{min:30.47,max:30.47,mean:30.47}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5647.86,totalRequests:169439,latency:{min:379,mean:6313,max:80498,pstdev:11935,percentiles:{p50:2854,p75:4550,p80:5158,p90:7820,p95:48025,p99:54390,p999:60321}},resources:{envoyGateway:{memory:{min:123.4,max:123.4,mean:123.4},cpu:{min:1.48,max:1.48,mean:1.48}},envoyProxy:{memory:{min:30.55,max:30.55,mean:30.55},cpu:{min:61.09,max:61.09,mean:61.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5529.29,totalRequests:165879,latency:{min:379,mean:6240,max:73539,pstdev:12017,percentiles:{p50:2818,p75:4510,p80:5068,p90:7413,p95:48300,p99:54171,p999:59308}},resources:{envoyGateway:{memory:{min:139.7,max:139.7,mean:139.7},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:36.73,max:36.73,mean:36.73},cpu:{min:91.9,max:91.9,mean:91.9}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5542.3,totalRequests:166274,latency:{min:365,mean:6463,max:81305,pstdev:12357,percentiles:{p50:2890,p75:4545,p80:5116,p90:7585,p95:49043,p99:55365,p999:64399}},resources:{envoyGateway:{memory:{min:146.11,max:146.11,mean:146.11},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.91,max:58.91,mean:58.91},cpu:{min:124.96,max:124.96,mean:124.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5407.59,totalRequests:162228,latency:{min:363,mean:6396,max:88236,pstdev:12419,percentiles:{p50:2816,p75:4450,p80:5012,p90:7485,p95:48762,p99:55666,p999:67457}},resources:{envoyGateway:{memory:{min:154.01,max:154.01,mean:154.01},cpu:{min:27.98,max:27.98,mean:27.98}},envoyProxy:{memory:{min:81.11,max:81.11,mean:81.11},cpu:{min:158.85,max:158.85,mean:158.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5247.32,totalRequests:157425,latency:{min:374,mean:6604,max:106491,pstdev:12903,percentiles:{p50:2880,p75:4514,p80:5089,p90:7639,p95:49453,p99:58750,p999:71970}},resources:{envoyGateway:{memory:{min:183.52,max:183.52,mean:183.52},cpu:{min:61.85,max:61.85,mean:61.85}},envoyProxy:{memory:{min:129.33,max:129.33,mean:129.33},cpu:{min:198.98,max:198.98,mean:198.98}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5668.05,totalRequests:170048,latency:{min:366,mean:6143,max:73551,pstdev:12054,percentiles:{p50:2726,p75:4279,p80:4799,p90:7123,p95:48988,p99:54704,p999:58812}},resources:{envoyGateway:{memory:{min:138.57,max:138.57,mean:138.57},cpu:{min:115.2,max:115.2,mean:115.2}},envoyProxy:{memory:{min:121.88,max:121.88,mean:121.88},cpu:{min:361.89,max:361.89,mean:361.89}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5579.16,totalRequests:167375,latency:{min:353,mean:6190,max:87244,pstdev:12028,percentiles:{p50:2803,p75:4357,p80:4889,p90:7110,p95:48482,p99:54329,p999:59113}},resources:{envoyGateway:{memory:{min:132.83,max:132.83,mean:132.83},cpu:{min:114.63,max:114.63,mean:114.63}},envoyProxy:{memory:{min:122.16,max:122.16,mean:122.16},cpu:{min:331.47,max:331.47,mean:331.47}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5581.7,totalRequests:167453,latency:{min:377,mean:6525,max:72724,pstdev:12286,percentiles:{p50:2929,p75:4641,p80:5219,p90:7915,p95:48732,p99:54810,p999:61450}},resources:{envoyGateway:{memory:{min:133.91,max:133.91,mean:133.91},cpu:{min:113.44,max:113.44,mean:113.44}},envoyProxy:{memory:{min:122.02,max:122.02,mean:122.02},cpu:{min:300.79,max:300.79,mean:300.79}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5447.53,totalRequests:163426,latency:{min:368,mean:6540,max:88612,pstdev:12451,percentiles:{p50:2904,p75:4546,p80:5128,p90:7692,p95:49305,p99:55422,p999:64116}},resources:{envoyGateway:{memory:{min:145.28,max:145.28,mean:145.28},cpu:{min:102.98,max:102.98,mean:102.98}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:268.5,max:268.5,mean:268.5}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5437.61,totalRequests:163132,latency:{min:383,mean:6527,max:102998,pstdev:12600,percentiles:{p50:2827,p75:4470,p80:5070,p90:7714,p95:49029,p99:56436,p999:66684}},resources:{envoyGateway:{memory:{min:164.07,max:164.07,mean:164.07},cpu:{min:91.64,max:91.64,mean:91.64}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:235.61,max:235.61,mean:235.61}}},poolOverflow:362,upstreamConnections:38}]},bie={metadata:{version:"1.2.4",runId:"1.2.4-1750189826764",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5982.38,totalRequests:179472,latency:{min:349,mean:6011,max:83349,pstdev:11061,percentiles:{p50:2829,p75:4477,p80:5098,p90:7842,p95:43255,p99:53350,p999:59346}},resources:{envoyGateway:{memory:{min:110.54,max:110.54,mean:110.54},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.44,max:30.44,mean:30.44}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5917.46,totalRequests:177524,latency:{min:361,mean:6164,max:70909,pstdev:11809,percentiles:{p50:2843,p75:4366,p80:4876,p90:7109,p95:47788,p99:54372,p999:59932}},resources:{envoyGateway:{memory:{min:119.89,max:119.89,mean:119.89},cpu:{min:1.61,max:1.61,mean:1.61}},envoyProxy:{memory:{min:30.43,max:30.43,mean:30.43},cpu:{min:61.13,max:61.13,mean:61.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.25,totalRequests:177910,latency:{min:398,mean:6027,max:92041,pstdev:11760,percentiles:{p50:2652,p75:4198,p80:4747,p90:7135,p95:47513,p99:55083,p999:61542}},resources:{envoyGateway:{memory:{min:129.08,max:129.08,mean:129.08},cpu:{min:3.05,max:3.05,mean:3.05}},envoyProxy:{memory:{min:36.57,max:36.57,mean:36.57},cpu:{min:92.01,max:92.01,mean:92.01}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5612.73,totalRequests:168382,latency:{min:368,mean:6361,max:108085,pstdev:12378,percentiles:{p50:2817,p75:4383,p80:4929,p90:7356,p95:48795,p99:56586,p999:68399}},resources:{envoyGateway:{memory:{min:140.63,max:140.63,mean:140.63},cpu:{min:15.35,max:15.35,mean:15.35}},envoyProxy:{memory:{min:58.77,max:58.77,mean:58.77},cpu:{min:125.44,max:125.44,mean:125.44}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5799.01,totalRequests:173974,latency:{min:378,mean:6166,max:97771,pstdev:11964,percentiles:{p50:2818,p75:4251,p80:4742,p90:6922,p95:47560,p99:55281,p999:68112}},resources:{envoyGateway:{memory:{min:152.5,max:152.5,mean:152.5},cpu:{min:28.38,max:28.38,mean:28.38}},envoyProxy:{memory:{min:78.94,max:78.94,mean:78.94},cpu:{min:159.67,max:159.67,mean:159.67}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5474.43,totalRequests:164233,latency:{min:386,mean:6534,max:109809,pstdev:12936,percentiles:{p50:2656,p75:4361,p80:5013,p90:8074,p95:49516,p99:60213,p999:73678}},resources:{envoyGateway:{memory:{min:183.98,max:183.98,mean:183.98},cpu:{min:62.29,max:62.29,mean:62.29}},envoyProxy:{memory:{min:131.16,max:131.16,mean:131.16},cpu:{min:200.46,max:200.46,mean:200.46}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5816.39,totalRequests:174492,latency:{min:340,mean:6131,max:85209,pstdev:11868,percentiles:{p50:2730,p75:4264,p80:4816,p90:7369,p95:47933,p99:54984,p999:61820}},resources:{envoyGateway:{memory:{min:195,max:195,mean:195},cpu:{min:116.53,max:116.53,mean:116.53}},envoyProxy:{memory:{min:120.37,max:120.37,mean:120.37},cpu:{min:363.61,max:363.61,mean:363.61}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5848.8,totalRequests:175470,latency:{min:372,mean:6285,max:77979,pstdev:12136,percentiles:{p50:2760,p75:4334,p80:4906,p90:7492,p95:48553,p99:55732,p999:63037}},resources:{envoyGateway:{memory:{min:205.2,max:205.2,mean:205.2},cpu:{min:115.88,max:115.88,mean:115.88}},envoyProxy:{memory:{min:120.26,max:120.26,mean:120.26},cpu:{min:333.06,max:333.06,mean:333.06}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5897.55,totalRequests:176927,latency:{min:365,mean:6054,max:78041,pstdev:11770,percentiles:{p50:2761,p75:4253,p80:4770,p90:6934,p95:47628,p99:54935,p999:62232}},resources:{envoyGateway:{memory:{min:201.78,max:201.78,mean:201.78},cpu:{min:114.84,max:114.84,mean:114.84}},envoyProxy:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:302.66,max:302.66,mean:302.66}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5764.69,totalRequests:172941,latency:{min:376,mean:6540,max:87822,pstdev:12528,percentiles:{p50:2847,p75:4511,p80:5118,p90:7907,p95:49336,p99:56737,p999:66895}},resources:{envoyGateway:{memory:{min:237.36,max:237.36,mean:237.36},cpu:{min:104.3,max:104.3,mean:104.3}},envoyProxy:{memory:{min:131.2,max:131.2,mean:131.2},cpu:{min:270.32,max:270.32,mean:270.32}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5709.58,totalRequests:171290,latency:{min:350,mean:6172,max:93663,pstdev:11978,percentiles:{p50:2864,p75:4285,p80:4782,p90:6980,p95:47689,p99:55115,p999:67440}},resources:{envoyGateway:{memory:{min:158.41,max:158.41,mean:158.41},cpu:{min:92.69,max:92.69,mean:92.69}},envoyProxy:{memory:{min:131.32,max:131.32,mean:131.32},cpu:{min:236.85,max:236.85,mean:236.85}}},poolOverflow:363,upstreamConnections:37}]},Pie={metadata:{version:"1.2.3",runId:"1.2.3-1750189826763",date:"2024-12-02",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6222.52,totalRequests:186680,latency:{min:349,mean:6177,max:70643,pstdev:11464,percentiles:{p50:2879,p75:4520,p80:5082,p90:7684,p95:46213,p99:54147,p999:60250}},resources:{envoyGateway:{memory:{min:110.2,max:110.2,mean:110.2},cpu:{min:.68,max:.68,mean:.68}},envoyProxy:{memory:{min:25.89,max:25.89,mean:25.89},cpu:{min:30.33,max:30.33,mean:30.33}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6170.38,totalRequests:185112,latency:{min:370,mean:5770,max:72798,pstdev:11358,percentiles:{p50:2657,p75:4054,p80:4535,p90:6537,p95:46632,p99:53751,p999:59174}},resources:{envoyGateway:{memory:{min:122.48,max:122.48,mean:122.48},cpu:{min:1.42,max:1.42,mean:1.42}},envoyProxy:{memory:{min:32.05,max:32.05,mean:32.05},cpu:{min:60.88,max:60.88,mean:60.88}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6085.51,totalRequests:182567,latency:{min:365,mean:5863,max:84721,pstdev:11540,percentiles:{p50:2605,p75:4127,p80:4662,p90:7048,p95:46759,p99:54556,p999:61736}},resources:{envoyGateway:{memory:{min:131.06,max:131.06,mean:131.06},cpu:{min:2.8,max:2.8,mean:2.8}},envoyProxy:{memory:{min:38.19,max:38.19,mean:38.19},cpu:{min:91.64,max:91.64,mean:91.64}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6032.83,totalRequests:180985,latency:{min:362,mean:6079,max:79421,pstdev:11806,percentiles:{p50:2707,p75:4272,p80:4832,p90:7327,p95:47441,p99:54743,p999:65808}},resources:{envoyGateway:{memory:{min:142.98,max:142.98,mean:142.98},cpu:{min:15.04,max:15.04,mean:15.04}},envoyProxy:{memory:{min:60.39,max:60.39,mean:60.39},cpu:{min:124.47,max:124.47,mean:124.47}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5773.98,totalRequests:173223,latency:{min:344,mean:6360,max:79355,pstdev:12473,percentiles:{p50:2707,p75:4299,p80:4888,p90:7643,p95:49309,p99:57382,p999:68141}},resources:{envoyGateway:{memory:{min:160.84,max:160.84,mean:160.84},cpu:{min:27.66,max:27.66,mean:27.66}},envoyProxy:{memory:{min:80.58,max:80.58,mean:80.58},cpu:{min:156.97,max:156.97,mean:156.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5776.08,totalRequests:173283,latency:{min:361,mean:6194,max:89714,pstdev:12241,percentiles:{p50:2703,p75:4241,p80:4791,p90:7296,p95:47755,p99:58537,p999:70676}},resources:{envoyGateway:{memory:{min:186.49,max:186.49,mean:186.49},cpu:{min:61.39,max:61.39,mean:61.39}},envoyProxy:{memory:{min:130.82,max:130.82,mean:130.82},cpu:{min:196.17,max:196.17,mean:196.17}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6128.86,totalRequests:183866,latency:{min:351,mean:5824,max:73633,pstdev:11470,percentiles:{p50:2578,p75:4038,p80:4570,p90:6823,p95:46927,p99:54392,p999:60213}},resources:{envoyGateway:{memory:{min:218.36,max:218.36,mean:218.36},cpu:{min:114.4,max:114.4,mean:114.4}},envoyProxy:{memory:{min:118.8,max:118.8,mean:118.8},cpu:{min:358.03,max:358.03,mean:358.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6065.62,totalRequests:181969,latency:{min:378,mean:5877,max:82526,pstdev:11643,percentiles:{p50:2588,p75:4048,p80:4587,p90:6876,p95:47429,p99:54710,p999:62111}},resources:{envoyGateway:{memory:{min:222.42,max:222.42,mean:222.42},cpu:{min:113.86,max:113.86,mean:113.86}},envoyProxy:{memory:{min:119.23,max:119.23,mean:119.23},cpu:{min:327.6,max:327.6,mean:327.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6045.71,totalRequests:181360,latency:{min:388,mean:6024,max:80216,pstdev:11596,percentiles:{p50:2802,p75:4253,p80:4761,p90:6951,p95:47183,p99:54065,p999:59455}},resources:{envoyGateway:{memory:{min:142.37,max:142.37,mean:142.37},cpu:{min:112.77,max:112.77,mean:112.77}},envoyProxy:{memory:{min:119.54,max:119.54,mean:119.54},cpu:{min:296.95,max:296.95,mean:296.95}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5956.66,totalRequests:178700,latency:{min:379,mean:6153,max:85528,pstdev:12032,percentiles:{p50:2640,p75:4362,p80:4961,p90:7625,p95:47886,p99:55965,p999:65695}},resources:{envoyGateway:{memory:{min:148.72,max:148.72,mean:148.72},cpu:{min:102.49,max:102.49,mean:102.49}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:264.96,max:264.96,mean:264.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5958.61,totalRequests:178765,latency:{min:362,mean:5967,max:83480,pstdev:11671,percentiles:{p50:2714,p75:4156,p80:4658,p90:6839,p95:46901,p99:54601,p999:65464}},resources:{envoyGateway:{memory:{min:164.87,max:164.87,mean:164.87},cpu:{min:91.25,max:91.25,mean:91.25}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:363,upstreamConnections:37}]},Sie={metadata:{version:"1.2.2",runId:"1.2.2-1750189826761",date:"2024-11-28",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6249.74,totalRequests:187495,latency:{min:333,mean:5937,max:75075,pstdev:10895,percentiles:{p50:2840,p75:4501,p80:5077,p90:7640,p95:41435,p99:53243,p999:58066}},resources:{envoyGateway:{memory:{min:106.26,max:106.26,mean:106.26},cpu:{min:.73,max:.73,mean:.73}},envoyProxy:{memory:{min:26.09,max:26.09,mean:26.09},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6140.58,totalRequests:184222,latency:{min:373,mean:5812,max:79740,pstdev:11513,percentiles:{p50:2590,p75:4071,p80:4583,p90:6812,p95:46811,p99:54179,p999:61151}},resources:{envoyGateway:{memory:{min:131.24,max:131.24,mean:131.24},cpu:{min:1.34,max:1.34,mean:1.34}},envoyProxy:{memory:{min:32.26,max:32.26,mean:32.26},cpu:{min:60.74,max:60.74,mean:60.74}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6149.72,totalRequests:184494,latency:{min:366,mean:5813,max:89935,pstdev:11434,percentiles:{p50:2637,p75:4073,p80:4561,p90:6680,p95:46505,p99:53872,p999:60348}},resources:{envoyGateway:{memory:{min:133.05,max:133.05,mean:133.05},cpu:{min:2.75,max:2.75,mean:2.75}},envoyProxy:{memory:{min:38.38,max:38.38,mean:38.38},cpu:{min:91.57,max:91.57,mean:91.57}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6076.78,totalRequests:182305,latency:{min:361,mean:6031,max:87502,pstdev:11819,percentiles:{p50:2675,p75:4203,p80:4751,p90:7118,p95:47147,p99:55078,p999:67106}},resources:{envoyGateway:{memory:{min:153.62,max:153.62,mean:153.62},cpu:{min:14.77,max:14.77,mean:14.77}},envoyProxy:{memory:{min:60.45,max:60.45,mean:60.45},cpu:{min:124.04,max:124.04,mean:124.04}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5928.89,totalRequests:177873,latency:{min:336,mean:6196,max:85643,pstdev:12032,percentiles:{p50:2803,p75:4338,p80:4852,p90:7143,p95:47726,p99:55619,p999:67780}},resources:{envoyGateway:{memory:{min:145.79,max:145.79,mean:145.79},cpu:{min:27.17,max:27.17,mean:27.17}},envoyProxy:{memory:{min:80.64,max:80.64,mean:80.64},cpu:{min:157.65,max:157.65,mean:157.65}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5843.64,totalRequests:175314,latency:{min:339,mean:6452,max:101912,pstdev:12482,percentiles:{p50:2790,p75:4509,p80:5136,p90:8012,p95:47702,p99:58542,p999:74014}},resources:{envoyGateway:{memory:{min:173.7,max:173.7,mean:173.7},cpu:{min:61.12,max:61.12,mean:61.12}},envoyProxy:{memory:{min:130.89,max:130.89,mean:130.89},cpu:{min:195.74,max:195.74,mean:195.74}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6096.9,totalRequests:182907,latency:{min:365,mean:5840,max:99377,pstdev:11326,percentiles:{p50:2735,p75:4188,p80:4674,p90:6654,p95:46344,p99:53444,p999:58591}},resources:{envoyGateway:{memory:{min:230.99,max:230.99,mean:230.99},cpu:{min:114.22,max:114.22,mean:114.22}},envoyProxy:{memory:{min:121.56,max:121.56,mean:121.56},cpu:{min:358.71,max:358.71,mean:358.71}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6151.76,totalRequests:184556,latency:{min:376,mean:5805,max:84885,pstdev:11572,percentiles:{p50:2520,p75:3969,p80:4498,p90:6842,p95:46837,p99:54761,p999:62570}},resources:{envoyGateway:{memory:{min:233.63,max:233.63,mean:233.63},cpu:{min:113.65,max:113.65,mean:113.65}},envoyProxy:{memory:{min:121.86,max:121.86,mean:121.86},cpu:{min:328.3,max:328.3,mean:328.3}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6157.53,totalRequests:184729,latency:{min:379,mean:5964,max:75988,pstdev:11502,percentiles:{p50:2743,p75:4204,p80:4695,p90:6941,p95:46497,p99:54179,p999:62005}},resources:{envoyGateway:{memory:{min:141.36,max:141.36,mean:141.36},cpu:{min:112.67,max:112.67,mean:112.67}},envoyProxy:{memory:{min:122.04,max:122.04,mean:122.04},cpu:{min:297.59,max:297.59,mean:297.59}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:6060.5,totalRequests:181818,latency:{min:360,mean:6022,max:92483,pstdev:11657,percentiles:{p50:2685,p75:4265,p80:4811,p90:7313,p95:46495,p99:54495,p999:64219}},resources:{envoyGateway:{memory:{min:150.71,max:150.71,mean:150.71},cpu:{min:102.4,max:102.4,mean:102.4}},envoyProxy:{memory:{min:130.9,max:130.9,mean:130.9},cpu:{min:265.29,max:265.29,mean:265.29}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5966.83,totalRequests:179008,latency:{min:343,mean:5962,max:102715,pstdev:11763,percentiles:{p50:2668,p75:4125,p80:4633,p90:6863,p95:46741,p99:54929,p999:67018}},resources:{envoyGateway:{memory:{min:162.62,max:162.62,mean:162.62},cpu:{min:91.03,max:91.03,mean:91.03}},envoyProxy:{memory:{min:131.05,max:131.05,mean:131.05},cpu:{min:232.55,max:232.55,mean:232.55}}},poolOverflow:363,upstreamConnections:37}]},Oie={metadata:{version:"1.2.1",runId:"1.2.1-1750189826759",date:"2024-11-07",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6110.53,totalRequests:183316,latency:{min:337,mean:6415,max:92647,pstdev:11350,percentiles:{p50:3107,p75:5037,p80:5711,p90:8782,p95:45103,p99:53942,p999:60790}},resources:{envoyGateway:{memory:{min:111.18,max:111.18,mean:111.18},cpu:{min:.79,max:.79,mean:.79}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.62,max:30.62,mean:30.62}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6011.43,totalRequests:180343,latency:{min:377,mean:6244,max:72724,pstdev:11870,percentiles:{p50:2835,p75:4408,p80:4939,p90:7412,p95:47611,p99:54769,p999:61716}},resources:{envoyGateway:{memory:{min:116.45,max:116.45,mean:116.45},cpu:{min:1.59,max:1.59,mean:1.59}},envoyProxy:{memory:{min:30.41,max:30.41,mean:30.41},cpu:{min:61.42,max:61.42,mean:61.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5961.65,totalRequests:178854,latency:{min:370,mean:5979,max:81096,pstdev:11586,percentiles:{p50:2705,p75:4189,p80:4699,p90:7030,p95:46987,p99:54095,p999:61222}},resources:{envoyGateway:{memory:{min:128.02,max:128.02,mean:128.02},cpu:{min:3.04,max:3.04,mean:3.04}},envoyProxy:{memory:{min:36.55,max:36.55,mean:36.55},cpu:{min:92.49,max:92.49,mean:92.49}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5921.3,totalRequests:177639,latency:{min:376,mean:6208,max:100098,pstdev:11901,percentiles:{p50:2770,p75:4413,p80:5009,p90:7647,p95:46934,p99:55273,p999:68509}},resources:{envoyGateway:{memory:{min:144.93,max:144.93,mean:144.93},cpu:{min:15.11,max:15.11,mean:15.11}},envoyProxy:{memory:{min:58.75,max:58.75,mean:58.75},cpu:{min:125.9,max:125.9,mean:125.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5876.24,totalRequests:176290,latency:{min:365,mean:6248,max:80101,pstdev:12134,percentiles:{p50:2759,p75:4348,p80:4922,p90:7422,p95:47855,p99:56041,p999:67145}},resources:{envoyGateway:{memory:{min:155.94,max:155.94,mean:155.94},cpu:{min:27.72,max:27.72,mean:27.72}},envoyProxy:{memory:{min:80.95,max:80.95,mean:80.95},cpu:{min:159.58,max:159.58,mean:159.58}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5744.1,totalRequests:172323,latency:{min:380,mean:6374,max:100245,pstdev:12424,percentiles:{p50:2775,p75:4337,p80:4899,p90:7542,p95:47699,p99:59248,p999:71761}},resources:{envoyGateway:{memory:{min:184.41,max:184.41,mean:184.41},cpu:{min:61.5,max:61.5,mean:61.5}},envoyProxy:{memory:{min:129.19,max:129.19,mean:129.19},cpu:{min:199.75,max:199.75,mean:199.75}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6028.67,totalRequests:180864,latency:{min:361,mean:5919,max:75882,pstdev:11427,percentiles:{p50:2729,p75:4244,p80:4783,p90:6934,p95:46608,p99:53897,p999:59893}},resources:{envoyGateway:{memory:{min:229.41,max:229.41,mean:229.41},cpu:{min:114.16,max:114.16,mean:114.16}},envoyProxy:{memory:{min:121.69,max:121.69,mean:121.69},cpu:{min:363.78,max:363.78,mean:363.78}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6093.21,totalRequests:182799,latency:{min:364,mean:5859,max:73809,pstdev:11454,percentiles:{p50:2634,p75:4171,p80:4702,p90:7002,p95:46548,p99:53979,p999:62793}},resources:{envoyGateway:{memory:{min:236.91,max:236.91,mean:236.91},cpu:{min:113.6,max:113.6,mean:113.6}},envoyProxy:{memory:{min:122.3,max:122.3,mean:122.3},cpu:{min:333.22,max:333.22,mean:333.22}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6057.56,totalRequests:181727,latency:{min:366,mean:5898,max:83623,pstdev:11560,percentiles:{p50:2628,p75:4159,p80:4695,p90:6996,p95:46897,p99:54495,p999:61849}},resources:{envoyGateway:{memory:{min:143.71,max:143.71,mean:143.71},cpu:{min:112.58,max:112.58,mean:112.58}},envoyProxy:{memory:{min:121.84,max:121.84,mean:121.84},cpu:{min:302.58,max:302.58,mean:302.58}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5899.93,totalRequests:176998,latency:{min:329,mean:6218,max:88965,pstdev:12007,percentiles:{p50:2818,p75:4388,p80:4920,p90:7204,p95:47871,p99:55517,p999:65886}},resources:{envoyGateway:{memory:{min:154.24,max:154.24,mean:154.24},cpu:{min:102.3,max:102.3,mean:102.3}},envoyProxy:{memory:{min:129.34,max:129.34,mean:129.34},cpu:{min:270.21,max:270.21,mean:270.21}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5862.2,totalRequests:175868,latency:{min:359,mean:6106,max:107622,pstdev:11962,percentiles:{p50:2648,p75:4343,p80:4933,p90:7617,p95:47341,p99:55508,p999:69103}},resources:{envoyGateway:{memory:{min:153.72,max:153.72,mean:153.72},cpu:{min:91.07,max:91.07,mean:91.07}},envoyProxy:{memory:{min:129.18,max:129.18,mean:129.18},cpu:{min:237.04,max:237.04,mean:237.04}}},poolOverflow:363,upstreamConnections:37}]},kie={metadata:{version:"1.2.0",runId:"1.2.0-1750189826754",date:"2024-11-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6006.27,totalRequests:180191,latency:{min:359,mean:6202,max:74358,pstdev:11262,percentiles:{p50:2976,p75:4719,p80:5330,p90:8159,p95:44003,p99:54190,p999:59357}},resources:{envoyGateway:{memory:{min:113.66,max:113.66,mean:113.66},cpu:{min:.75,max:.75,mean:.75}},envoyProxy:{memory:{min:25.55,max:25.55,mean:25.55},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5988.15,totalRequests:179650,latency:{min:366,mean:6093,max:82386,pstdev:11670,percentiles:{p50:2838,p75:4283,p80:4798,p90:6972,p95:47523,p99:54038,p999:59813}},resources:{envoyGateway:{memory:{min:119.16,max:119.16,mean:119.16},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.71,max:31.71,mean:31.71},cpu:{min:61.03,max:61.03,mean:61.03}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.13,totalRequests:177905,latency:{min:374,mean:6182,max:93884,pstdev:11844,percentiles:{p50:2812,p75:4420,p80:4967,p90:7339,p95:47618,p99:54661,p999:61865}},resources:{envoyGateway:{memory:{min:123.35,max:123.35,mean:123.35},cpu:{min:2.89,max:2.89,mean:2.89}},envoyProxy:{memory:{min:37.86,max:37.86,mean:37.86},cpu:{min:91.87,max:91.87,mean:91.87}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5713.27,totalRequests:171401,latency:{min:384,mean:6405,max:105545,pstdev:12313,percentiles:{p50:2832,p75:4450,p80:5057,p90:7773,p95:48732,p99:56084,p999:66220}},resources:{envoyGateway:{memory:{min:150.92,max:150.92,mean:150.92},cpu:{min:15.08,max:15.08,mean:15.08}},envoyProxy:{memory:{min:60.05,max:60.05,mean:60.05},cpu:{min:125.09,max:125.09,mean:125.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5689.03,totalRequests:170675,latency:{min:365,mean:5939,max:98639,pstdev:11585,percentiles:{p50:2715,p75:4258,p80:4772,p90:7055,p95:45996,p99:54368,p999:68464}},resources:{envoyGateway:{memory:{min:156.97,max:156.97,mean:156.97},cpu:{min:27.62,max:27.62,mean:27.62}},envoyProxy:{memory:{min:82.26,max:82.26,mean:82.26},cpu:{min:158.86,max:158.86,mean:158.86}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5407.08,totalRequests:162220,latency:{min:371,mean:6424,max:131579,pstdev:12473,percentiles:{p50:2692,p75:4503,p80:5177,p90:8264,p95:47540,p99:58488,p999:72720}},resources:{envoyGateway:{memory:{min:215.93,max:215.93,mean:215.93},cpu:{min:61.56,max:61.56,mean:61.56}},envoyProxy:{memory:{min:130.5,max:130.5,mean:130.5},cpu:{min:197.45,max:197.45,mean:197.45}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5905.23,totalRequests:177157,latency:{min:396,mean:6205,max:92979,pstdev:12065,percentiles:{p50:2713,p75:4262,p80:4832,p90:7415,p95:48306,p99:55736,p999:63318}},resources:{envoyGateway:{memory:{min:233.71,max:233.71,mean:233.71},cpu:{min:114.53,max:114.53,mean:114.53}},envoyProxy:{memory:{min:118.94,max:118.94,mean:118.94},cpu:{min:360.39,max:360.39,mean:360.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5793.19,totalRequests:173800,latency:{min:385,mean:6501,max:86843,pstdev:12452,percentiles:{p50:2744,p75:4568,p80:5227,p90:8494,p95:48965,p99:56467,p999:65382}},resources:{envoyGateway:{memory:{min:202.08,max:202.08,mean:202.08},cpu:{min:113.96,max:113.96,mean:113.96}},envoyProxy:{memory:{min:121.24,max:121.24,mean:121.24},cpu:{min:329.91,max:329.91,mean:329.91}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5783.8,totalRequests:173514,latency:{min:385,mean:6179,max:85405,pstdev:11889,percentiles:{p50:2707,p75:4462,p80:5071,p90:7760,p95:47423,p99:54994,p999:64567}},resources:{envoyGateway:{memory:{min:144.59,max:144.59,mean:144.59},cpu:{min:112.93,max:112.93,mean:112.93}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:299.28,max:299.28,mean:299.28}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5804.51,totalRequests:174139,latency:{min:384,mean:6147,max:82661,pstdev:11892,percentiles:{p50:2807,p75:4284,p80:4791,p90:7039,p95:47558,p99:55162,p999:66723}},resources:{envoyGateway:{memory:{min:160.23,max:160.23,mean:160.23},cpu:{min:102.85,max:102.85,mean:102.85}},envoyProxy:{memory:{min:130.62,max:130.62,mean:130.62},cpu:{min:267.09,max:267.09,mean:267.09}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5804.87,totalRequests:174149,latency:{min:368,mean:5828,max:106119,pstdev:11561,percentiles:{p50:2647,p75:4078,p80:4553,p90:6656,p95:46047,p99:55025,p999:66633}},resources:{envoyGateway:{memory:{min:155.88,max:155.88,mean:155.88},cpu:{min:91.5,max:91.5,mean:91.5}},envoyProxy:{memory:{min:130.61,max:130.61,mean:130.61},cpu:{min:234.47,max:234.47,mean:234.47}}},poolOverflow:365,upstreamConnections:35}]},_ie={metadata:{version:"1.1.4",runId:"1.1.4-1750190329987",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5971.73,totalRequests:179152,latency:{min:354,mean:6247,max:97591,pstdev:11371,percentiles:{p50:2948,p75:4694,p80:5352,p90:8420,p95:44519,p99:54398,p999:62244}},resources:{envoyGateway:{memory:{min:82.79,max:82.79,mean:82.79},cpu:{min:1.5000000000000002,max:1.5000000000000002,mean:1.5000000000000002}},envoyProxy:{memory:{min:24.11,max:24.11,mean:24.11},cpu:{min:101.53333333333335,max:101.53333333333335,mean:101.53333333333335}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5957.22,totalRequests:178717,latency:{min:385,mean:6145,max:93360,pstdev:11838,percentiles:{p50:2751,p75:4352,p80:4922,p90:7436,p95:47679,p99:54878,p999:62414}},resources:{envoyGateway:{memory:{min:103.29,max:103.29,mean:103.29},cpu:{min:6.800000000000001,max:6.800000000000001,mean:6.800000000000001}},envoyProxy:{memory:{min:32.29,max:32.29,mean:32.29},cpu:{min:204,max:204,mean:204}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5896.53,totalRequests:176899,latency:{min:360,mean:6376,max:93995,pstdev:12077,percentiles:{p50:2905,p75:4542,p80:5112,p90:7699,p95:48019,p99:55472,p999:63707}},resources:{envoyGateway:{memory:{min:151.7,max:151.7,mean:151.7},cpu:{min:32.599999999999994,max:32.599999999999994,mean:32.599999999999994}},envoyProxy:{memory:{min:46.46,max:46.46,mean:46.46},cpu:{min:309.8,max:309.8,mean:309.8}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5885.1,totalRequests:176553,latency:{min:370,mean:6378,max:102457,pstdev:12096,percentiles:{p50:2834,p75:4508,p80:5093,p90:7817,p95:48099,p99:55572,p999:64329}},resources:{envoyGateway:{memory:{min:763.38,max:763.38,mean:763.38},cpu:{min:605.6333333333333,max:605.6333333333333,mean:605.6333333333333}},envoyProxy:{memory:{min:150.81,max:150.81,mean:150.81},cpu:{min:494.66666666666674,max:494.66666666666674,mean:494.66666666666674}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5642.37,totalRequests:169274,latency:{min:314,mean:6430,max:135987,pstdev:12216,percentiles:{p50:2801,p75:4489,p80:5175,p90:8673,p95:46690,p99:56358,p999:73814}},resources:{envoyGateway:{memory:{min:1603.28,max:1603.28,mean:1603.28},cpu:{min:41.63333333333333,max:41.63333333333333,mean:41.63333333333333}},envoyProxy:{memory:{min:289.75,max:289.75,mean:289.75},cpu:{min:727.1666666666666,max:727.1666666666666,mean:727.1666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5993.8,totalRequests:179822,latency:{min:381,mean:5965,max:84086,pstdev:11660,percentiles:{p50:2666,p75:4169,p80:4715,p90:6995,p95:47218,p99:54775,p999:61200}},resources:{envoyGateway:{memory:{min:117.16,max:117.16,mean:117.16},cpu:{min:518.0333333333333,max:518.0333333333333,mean:518.0333333333333}},envoyProxy:{memory:{min:278.72,max:278.72,mean:278.72},cpu:{min:1205.8,max:1205.8,mean:1205.8}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5947.1,totalRequests:178412,latency:{min:346,mean:5809,max:76681,pstdev:11155,percentiles:{p50:2707,p75:4164,p80:4684,p90:6938,p95:45451,p99:53227,p999:59303}},resources:{envoyGateway:{memory:{min:123.23,max:123.23,mean:123.23},cpu:{min:512.5333333333333,max:512.5333333333333,mean:512.5333333333333}},envoyProxy:{memory:{min:291.25,max:291.25,mean:291.25},cpu:{min:1103.6333333333334,max:1103.6333333333334,mean:1103.6333333333334}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4884.46,totalRequests:146534,latency:{min:362,mean:7148,max:137863,pstdev:11237,percentiles:{p50:3375,p75:6266,p80:7621,p90:17699,p95:31992,p99:59576,p999:83935}},resources:{envoyGateway:{memory:{min:338.12,max:338.12,mean:338.12},cpu:{min:488.1333333333333,max:488.1333333333333,mean:488.1333333333333}},envoyProxy:{memory:{min:294.41,max:294.41,mean:294.41},cpu:{min:993,max:993,mean:993}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5737.62,totalRequests:172120,latency:{min:345,mean:6192,max:117288,pstdev:11530,percentiles:{p50:2822,p75:4535,p80:5155,p90:8463,p95:42631,p99:55584,p999:70291}},resources:{envoyGateway:{memory:{min:679.73,max:679.73,mean:679.73},cpu:{min:18.76666666666667,max:18.76666666666667,mean:18.76666666666667}},envoyProxy:{memory:{min:285.93,max:285.93,mean:285.93},cpu:{min:833.4333333333334,max:833.4333333333334,mean:833.4333333333334}}},poolOverflow:363,upstreamConnections:37}]},Cie={metadata:{version:"1.1.3",runId:"1.1.3-1750190329984",date:"2024-11-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6070.53,totalRequests:182116,latency:{min:353,mean:6263,max:87117,pstdev:11274,percentiles:{p50:2994,p75:4783,p80:5441,p90:8506,p95:44029,p99:54130,p999:59291}},resources:{envoyGateway:{memory:{min:85.16,max:85.16,mean:85.16},cpu:{min:1.3666666666666665,max:1.3666666666666665,mean:1.3666666666666665}},envoyProxy:{memory:{min:26,max:26,mean:26},cpu:{min:101.43333333333334,max:101.43333333333334,mean:101.43333333333334}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5999.45,totalRequests:179985,latency:{min:368,mean:6117,max:76840,pstdev:11675,percentiles:{p50:2803,p75:4339,p80:4903,p90:7204,p95:47128,p99:54317,p999:60557}},resources:{envoyGateway:{memory:{min:102.18,max:102.18,mean:102.18},cpu:{min:7.033333333333333,max:7.033333333333333,mean:7.033333333333333}},envoyProxy:{memory:{min:34.18,max:34.18,mean:34.18},cpu:{min:203.56666666666666,max:203.56666666666666,mean:203.56666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6053.06,totalRequests:181592,latency:{min:390,mean:5889,max:94826,pstdev:11642,percentiles:{p50:2599,p75:4075,p80:4583,p90:6945,p95:47128,p99:54872,p999:62212}},resources:{envoyGateway:{memory:{min:151.34,max:151.34,mean:151.34},cpu:{min:31.633333333333336,max:31.633333333333336,mean:31.633333333333336}},envoyProxy:{memory:{min:48.34,max:48.34,mean:48.34},cpu:{min:309.06666666666666,max:309.06666666666666,mean:309.06666666666666}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5895.77,totalRequests:176873,latency:{min:378,mean:6220,max:100757,pstdev:12033,percentiles:{p50:2723,p75:4341,p80:4931,p90:7644,p95:47828,p99:55521,p999:67383}},resources:{envoyGateway:{memory:{min:687.16,max:687.16,mean:687.16},cpu:{min:578.2333333333332,max:578.2333333333332,mean:578.2333333333332}},envoyProxy:{memory:{min:150.69,max:150.69,mean:150.69},cpu:{min:488.20000000000005,max:488.20000000000005,mean:488.20000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5818.09,totalRequests:174543,latency:{min:356,mean:6109,max:107913,pstdev:11285,percentiles:{p50:2832,p75:4538,p80:5163,p90:8134,p95:42639,p99:54546,p999:67543}},resources:{envoyGateway:{memory:{min:1329.35,max:1329.35,mean:1329.35},cpu:{min:61.33333333333333,max:61.33333333333333,mean:61.33333333333333}},envoyProxy:{memory:{min:303.55,max:303.55,mean:303.55},cpu:{min:731.4333333333334,max:731.4333333333334,mean:731.4333333333334}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5996.79,totalRequests:179907,latency:{min:367,mean:6127,max:77688,pstdev:11777,percentiles:{p50:2745,p75:4292,p80:4835,p90:7317,p95:47597,p99:54706,p999:61323}},resources:{envoyGateway:{memory:{min:125.62,max:125.62,mean:125.62},cpu:{min:525.5,max:525.5,mean:525.5}},envoyProxy:{memory:{min:289.68,max:289.68,mean:289.68},cpu:{min:1239.6,max:1239.6,mean:1239.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5732.14,totalRequests:171956,latency:{min:336,mean:4876,max:76279,pstdev:10072,percentiles:{p50:2290,p75:3444,p80:3846,p90:5476,p95:24546,p99:51763,p999:57040}},resources:{envoyGateway:{memory:{min:132.64,max:132.64,mean:132.64},cpu:{min:520.8333333333333,max:520.8333333333333,mean:520.8333333333333}},envoyProxy:{memory:{min:291.68,max:291.68,mean:291.68},cpu:{min:1138.0333333333335,max:1138.0333333333335,mean:1138.0333333333335}}},poolOverflow:371,upstreamConnections:29},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5311.34,totalRequests:159332,latency:{min:362,mean:6219,max:144302,pstdev:11133,percentiles:{p50:2808,p75:4741,p80:5579,p90:10689,p95:37480,p99:53626,p999:73998}},resources:{envoyGateway:{memory:{min:179.01,max:179.01,mean:179.01},cpu:{min:497.9666666666666,max:497.9666666666666,mean:497.9666666666666}},envoyProxy:{memory:{min:298.77,max:298.77,mean:298.77},cpu:{min:1034.033333333333,max:1034.033333333333,mean:1034.033333333333}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5633.85,totalRequests:169021,latency:{min:369,mean:6266,max:106577,pstdev:11127,percentiles:{p50:2908,p75:4793,p80:5511,p90:9568,p95:36169,p99:54472,p999:68628}},resources:{envoyGateway:{memory:{min:487.12,max:487.12,mean:487.12},cpu:{min:27.133333333333336,max:27.133333333333336,mean:27.133333333333336}},envoyProxy:{memory:{min:299.84,max:299.84,mean:299.84},cpu:{min:837.8666666666668,max:837.8666666666668,mean:837.8666666666668}}},poolOverflow:363,upstreamConnections:37}]},Aie={metadata:{version:"1.1.2",runId:"1.1.2-1750190329982",date:"2024-09-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5649.72,totalRequests:169493,latency:{min:356,mean:6560,max:72347,pstdev:11796,percentiles:{p50:3044,p75:5011,p80:5690,p90:8937,p95:46880,p99:54560,p999:59316}},resources:{envoyGateway:{memory:{min:86.72,max:86.72,mean:86.72},cpu:{min:1.5666666666666667,max:1.5666666666666667,mean:1.5666666666666667}},envoyProxy:{memory:{min:24.26,max:24.26,mean:24.26},cpu:{min:101.63333333333333,max:101.63333333333333,mean:101.63333333333333}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5594.14,totalRequests:167826,latency:{min:377,mean:6225,max:71024,pstdev:11980,percentiles:{p50:2812,p75:4378,p80:4905,p90:7214,p95:48160,p99:54513,p999:59850}},resources:{envoyGateway:{memory:{min:106.76,max:106.76,mean:106.76},cpu:{min:7.7,max:7.7,mean:7.7}},envoyProxy:{memory:{min:32.43,max:32.43,mean:32.43},cpu:{min:204.53333333333333,max:204.53333333333333,mean:204.53333333333333}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5523.65,totalRequests:165711,latency:{min:379,mean:6455,max:77815,pstdev:12317,percentiles:{p50:2868,p75:4510,p80:5086,p90:7645,p95:49127,p99:55048,p999:61448}},resources:{envoyGateway:{memory:{min:149.03,max:149.03,mean:149.03},cpu:{min:29.333333333333332,max:29.333333333333332,mean:29.333333333333332}},envoyProxy:{memory:{min:46.61,max:46.61,mean:46.61},cpu:{min:309.7666666666667,max:309.7666666666667,mean:309.7666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5554.01,totalRequests:166624,latency:{min:357,mean:6246,max:99753,pstdev:12051,percentiles:{p50:2841,p75:4416,p80:4960,p90:7177,p95:48371,p99:54800,p999:63275}},resources:{envoyGateway:{memory:{min:375.51,max:375.51,mean:375.51},cpu:{min:615.1,max:615.1,mean:615.1}},envoyProxy:{memory:{min:152.97,max:152.97,mean:152.97},cpu:{min:492.4666666666667,max:492.4666666666667,mean:492.4666666666667}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5475.04,totalRequests:164256,latency:{min:365,mean:6546,max:95539,pstdev:12646,percentiles:{p50:2834,p75:4484,p80:5075,p90:7891,p95:49397,p99:56231,p999:67629}},resources:{envoyGateway:{memory:{min:1340.6,max:1340.6,mean:1340.6},cpu:{min:38.333333333333336,max:38.333333333333336,mean:38.333333333333336}},envoyProxy:{memory:{min:281.71,max:281.71,mean:281.71},cpu:{min:718.0666666666666,max:718.0666666666666,mean:718.0666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5657.68,totalRequests:169734,latency:{min:355,mean:7320,max:87252,pstdev:13162,percentiles:{p50:3307,p75:5218,p80:5885,p90:9252,p95:50671,p99:56332,p999:62406}},resources:{envoyGateway:{memory:{min:371.29,max:371.29,mean:371.29},cpu:{min:578.7666666666667,max:578.7666666666667,mean:578.7666666666667}},envoyProxy:{memory:{min:273.57,max:273.57,mean:273.57},cpu:{min:1224,max:1224,mean:1224}}},poolOverflow:356,upstreamConnections:44},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5587.8,totalRequests:167636,latency:{min:356,mean:6346,max:68095,pstdev:12097,percentiles:{p50:2890,p75:4509,p80:5041,p90:7495,p95:48560,p99:54345,p999:60436}},resources:{envoyGateway:{memory:{min:342.8,max:342.8,mean:342.8},cpu:{min:573.3000000000001,max:573.3000000000001,mean:573.3000000000001}},envoyProxy:{memory:{min:274.84,max:274.84,mean:274.84},cpu:{min:1122.2333333333333,max:1122.2333333333333,mean:1122.2333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4098.74,totalRequests:122966,latency:{min:347,mean:3660,max:99745,pstdev:7371,percentiles:{p50:1658,p75:2735,p80:3147,p90:5306,p95:18030,p99:42778,p999:60440}},resources:{envoyGateway:{memory:{min:433.01,max:433.01,mean:433.01},cpu:{min:486.96666666666664,max:486.96666666666664,mean:486.96666666666664}},envoyProxy:{memory:{min:281.27,max:281.27,mean:281.27},cpu:{min:996.0333333333333,max:996.0333333333333,mean:996.0333333333333}}},poolOverflow:384,upstreamConnections:16},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5306.46,totalRequests:159194,latency:{min:360,mean:6884,max:106807,pstdev:12850,percentiles:{p50:2983,p75:4873,p80:5573,p90:9215,p95:49102,p99:58521,p999:70213}},resources:{envoyGateway:{memory:{min:232.76,max:232.76,mean:232.76},cpu:{min:16.299999999999997,max:16.299999999999997,mean:16.299999999999997}},envoyProxy:{memory:{min:282.68,max:282.68,mean:282.68},cpu:{min:825.4333333333333,max:825.4333333333333,mean:825.4333333333333}}},poolOverflow:361,upstreamConnections:39}]},Eie={metadata:{version:"1.1.1",runId:"1.1.1-1750190329981",date:"2024-09-12",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6258.99,totalRequests:187774,latency:{min:333,mean:5933,max:71266,pstdev:10816,percentiles:{p50:2898,p75:4513,p80:5099,p90:7661,p95:40607,p99:53149,p999:58789}},resources:{envoyGateway:{memory:{min:84.04,max:84.04,mean:84.04},cpu:{min:1.5333333333333334,max:1.5333333333333334,mean:1.5333333333333334}},envoyProxy:{memory:{min:25.57,max:25.57,mean:25.57},cpu:{min:101.33333333333331,max:101.33333333333331,mean:101.33333333333331}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6118.28,totalRequests:183552,latency:{min:359,mean:5828,max:81178,pstdev:11437,percentiles:{p50:2646,p75:4049,p80:4561,p90:6666,p95:46723,p99:53913,p999:60094}},resources:{envoyGateway:{memory:{min:101.33,max:101.33,mean:101.33},cpu:{min:6.8999999999999995,max:6.8999999999999995,mean:6.8999999999999995}},envoyProxy:{memory:{min:33.75,max:33.75,mean:33.75},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6045.36,totalRequests:181361,latency:{min:377,mean:5908,max:88063,pstdev:11539,percentiles:{p50:2659,p75:4143,p80:4675,p90:6863,p95:46733,p99:54091,p999:63211}},resources:{envoyGateway:{memory:{min:115.34,max:115.34,mean:115.34},cpu:{min:32.800000000000004,max:32.800000000000004,mean:32.800000000000004}},envoyProxy:{memory:{min:47.79,max:47.79,mean:47.79},cpu:{min:308.96666666666664,max:308.96666666666664,mean:308.96666666666664}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5881.18,totalRequests:176436,latency:{min:327,mean:6376,max:130330,pstdev:12048,percentiles:{p50:2843,p75:4548,p80:5181,p90:8168,p95:47517,p99:55470,p999:66041}},resources:{envoyGateway:{memory:{min:608.65,max:608.65,mean:608.65},cpu:{min:625.6666666666666,max:625.6666666666666,mean:625.6666666666666}},envoyProxy:{memory:{min:152.29,max:152.29,mean:152.29},cpu:{min:492.5666666666667,max:492.5666666666667,mean:492.5666666666667}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5875.93,totalRequests:176280,latency:{min:381,mean:6086,max:86654,pstdev:11932,percentiles:{p50:2704,p75:4181,p80:4727,p90:7177,p95:47091,p99:55814,p999:68415}},resources:{envoyGateway:{memory:{min:1308.52,max:1308.52,mean:1308.52},cpu:{min:39.49999999999999,max:39.49999999999999,mean:39.49999999999999}},envoyProxy:{memory:{min:283.24,max:283.24,mean:283.24},cpu:{min:707.1333333333332,max:707.1333333333332,mean:707.1333333333332}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6077.56,totalRequests:182327,latency:{min:362,mean:6197,max:92372,pstdev:11720,percentiles:{p50:2824,p75:4438,p80:5e3,p90:7503,p95:47110,p99:54169,p999:60426}},resources:{envoyGateway:{memory:{min:121.13,max:121.13,mean:121.13},cpu:{min:544.5333333333334,max:544.5333333333334,mean:544.5333333333334}},envoyProxy:{memory:{min:277.29,max:277.29,mean:277.29},cpu:{min:1206.4666666666665,max:1206.4666666666665,mean:1206.4666666666665}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6047.67,totalRequests:181438,latency:{min:370,mean:6062,max:92168,pstdev:11743,percentiles:{p50:2733,p75:4268,p80:4801,p90:7226,p95:47095,p99:54886,p999:61917}},resources:{envoyGateway:{memory:{min:126.22,max:126.22,mean:126.22},cpu:{min:538.8333333333334,max:538.8333333333334,mean:538.8333333333334}},envoyProxy:{memory:{min:285.62,max:285.62,mean:285.62},cpu:{min:1104.3000000000002,max:1104.3000000000002,mean:1104.3000000000002}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4654.8,totalRequests:139655,latency:{min:336,mean:4675,max:107409,pstdev:9843,percentiles:{p50:2048,p75:3459,p80:4015,p90:6531,p95:19138,p99:57518,p999:73269}},resources:{envoyGateway:{memory:{min:480.36,max:480.36,mean:480.36},cpu:{min:377,max:377,mean:377}},envoyProxy:{memory:{min:289.51,max:289.51,mean:289.51},cpu:{min:969.2333333333332,max:969.2333333333332,mean:969.2333333333332}}},poolOverflow:377,upstreamConnections:23},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5676.68,totalRequests:170301,latency:{min:376,mean:6244,max:153264,pstdev:11618,percentiles:{p50:2797,p75:4618,p80:5324,p90:8807,p95:40232,p99:56496,p999:73506}},resources:{envoyGateway:{memory:{min:436.58,max:436.58,mean:436.58},cpu:{min:28.066666666666666,max:28.066666666666666,mean:28.066666666666666}},envoyProxy:{memory:{min:283.47,max:283.47,mean:283.47},cpu:{min:813.3666666666667,max:813.3666666666667,mean:813.3666666666667}}},poolOverflow:363,upstreamConnections:37}]},Tie={metadata:{version:"1.1.0",runId:"1.1.0-1750190329977",date:"2024-07-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6181.97,totalRequests:185463,latency:{min:362,mean:5902,max:73084,pstdev:11039,percentiles:{p50:2765,p75:4364,p80:4935,p90:7504,p95:41244,p99:53929,p999:61147}},resources:{envoyGateway:{memory:{min:86.2,max:86.2,mean:86.2},cpu:{min:1.4333333333333333,max:1.4333333333333333,mean:1.4333333333333333}},envoyProxy:{memory:{min:24.09,max:24.09,mean:24.09},cpu:{min:101.36666666666667,max:101.36666666666667,mean:101.36666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6103.97,totalRequests:183121,latency:{min:354,mean:5852,max:75943,pstdev:11382,percentiles:{p50:2681,p75:4083,p80:4601,p90:6825,p95:46262,p99:53862,p999:60651}},resources:{envoyGateway:{memory:{min:100.14,max:100.14,mean:100.14},cpu:{min:7.233333333333333,max:7.233333333333333,mean:7.233333333333333}},envoyProxy:{memory:{min:32.25,max:32.25,mean:32.25},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6074.87,totalRequests:182247,latency:{min:371,mean:5877,max:94171,pstdev:11399,percentiles:{p50:2732,p75:4191,p80:4677,p90:6801,p95:46481,p99:53866,p999:61036}},resources:{envoyGateway:{memory:{min:114.69,max:114.69,mean:114.69},cpu:{min:30,max:30,mean:30}},envoyProxy:{memory:{min:46.42,max:46.42,mean:46.42},cpu:{min:308.70000000000005,max:308.70000000000005,mean:308.70000000000005}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5993.57,totalRequests:179811,latency:{min:368,mean:6123,max:96571,pstdev:11831,percentiles:{p50:2753,p75:4261,p80:4799,p90:7247,p95:47368,p99:55248,p999:66586}},resources:{envoyGateway:{memory:{min:762.8,max:762.8,mean:762.8},cpu:{min:600.8666666666667,max:600.8666666666667,mean:600.8666666666667}},envoyProxy:{memory:{min:152.78,max:152.78,mean:152.78},cpu:{min:488.70000000000005,max:488.70000000000005,mean:488.70000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5812.8,totalRequests:174396,latency:{min:388,mean:6310,max:95719,pstdev:12246,percentiles:{p50:2729,p75:4334,p80:4905,p90:7607,p95:47970,p99:56811,p999:68165}},resources:{envoyGateway:{memory:{min:1593.56,max:1593.56,mean:1593.56},cpu:{min:36.56666666666667,max:36.56666666666667,mean:36.56666666666667}},envoyProxy:{memory:{min:289.79,max:289.79,mean:289.79},cpu:{min:715.6333333333333,max:715.6333333333333,mean:715.6333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5916.93,totalRequests:177517,latency:{min:385,mean:6352,max:82747,pstdev:12011,percentiles:{p50:2822,p75:4461,p80:5061,p90:7769,p95:47847,p99:55068,p999:62578}},resources:{envoyGateway:{memory:{min:124.07,max:124.07,mean:124.07},cpu:{min:519.6333333333332,max:519.6333333333332,mean:519.6333333333332}},envoyProxy:{memory:{min:284.03,max:284.03,mean:284.03},cpu:{min:1194.8666666666666,max:1194.8666666666666,mean:1194.8666666666666}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5876.35,totalRequests:176294,latency:{min:371,mean:6226,max:83869,pstdev:11816,percentiles:{p50:2770,p75:4396,p80:5e3,p90:7848,p95:47163,p99:55156,p999:64434}},resources:{envoyGateway:{memory:{min:131.62,max:131.62,mean:131.62},cpu:{min:513.6,max:513.6,mean:513.6}},envoyProxy:{memory:{min:291.73,max:291.73,mean:291.73},cpu:{min:1092.9333333333334,max:1092.9333333333334,mean:1092.9333333333334}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4820.43,totalRequests:144617,latency:{min:342,mean:7088,max:172031,pstdev:12642,percentiles:{p50:3156,p75:5480,p80:6443,p90:12007,p95:39675,p99:63842,p999:86532}},resources:{envoyGateway:{memory:{min:374.36,max:374.36,mean:374.36},cpu:{min:462.8,max:462.8,mean:462.8}},envoyProxy:{memory:{min:289.98,max:289.98,mean:289.98},cpu:{min:980.4,max:980.4,mean:980.4}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5746.71,totalRequests:172402,latency:{min:386,mean:6313,max:101535,pstdev:11578,percentiles:{p50:2875,p75:4579,p80:5222,p90:8617,p95:44341,p99:54996,p999:67178}},resources:{envoyGateway:{memory:{min:670.44,max:670.44,mean:670.44},cpu:{min:24.333333333333332,max:24.333333333333332,mean:24.333333333333332}},envoyProxy:{memory:{min:285.86,max:285.86,mean:285.86},cpu:{min:824.5666666666667,max:824.5666666666667,mean:824.5666666666667}}},poolOverflow:362,upstreamConnections:38}]},r1=[cie,pie,fie,die,mie,hie,vie,yie,gie,xie,wie,bie,Pie,Sie,Oie,kie,_ie,Cie,Aie,Eie,Tie],jie=()=>r1.map(e=>e.metadata.version),gi=r1.find(e=>e.metadata.version==="1.4.1"),St=(gi==null?void 0:gi.results)||[];gi!=null&&gi.metadata.testConfiguration;St.length,St.filter(e=>e.phase==="scaling-up").length,St.filter(e=>e.phase==="scaling-down").length,St.length>0&&Math.max(...St.map(e=>e.routes)),St.length>0&&Math.min(...St.map(e=>e.routes)),St.length>0&&St.reduce((e,t)=>e+t.throughput,0)/St.length,St.length>0&&St.reduce((e,t)=>e+t.latency.mean,0)/St.length;St.map(e=>({routes:e.routes,phase:e.phase,p50:e.latency.percentiles.p50/1e3,p75:e.latency.percentiles.p75/1e3,p90:e.latency.percentiles.p90/1e3,p95:e.latency.percentiles.p95/1e3,p99:e.latency.percentiles.p99/1e3,p999:e.latency.percentiles.p999/1e3}));St.map(e=>({routes:e.routes,phase:e.phase,envoyGatewayMemory:e.resources.envoyGateway.memory.mean,envoyGatewayCpu:e.resources.envoyGateway.cpu.mean,envoyProxyMemory:e.resources.envoyProxy.memory.mean,envoyProxyCpu:e.resources.envoyProxy.cpu.mean}));St.map(e=>({testName:e.testName,routes:e.routes,phase:e.phase,throughput:e.throughput,meanLatency:e.latency.mean/1e3,p95Latency:e.latency.percentiles.p95/1e3,totalMemory:e.resources.envoyGateway.memory.mean+e.resources.envoyProxy.memory.mean,totalCpu:e.resources.envoyGateway.cpu.mean+e.resources.envoyProxy.cpu.mean}));const $ie=()=>{const e=jie(),[t,n]=k.useState(e[0]||""),r=k.useMemo(()=>r1.find(o=>o.metadata.version===t),[t]),a=k.useMemo(()=>{if(!r)return{benchmarkResults:[],testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"},performanceSummary:{totalTests:0,scaleUpTests:0,scaleDownTests:0,maxRoutes:0,minRoutes:0,avgThroughput:0,avgLatency:0},latencyPercentileComparison:[],resourceTrends:[],performanceMatrix:[],metadata:null};const o=r.results;return{benchmarkResults:o,testConfiguration:r.metadata.testConfiguration,performanceSummary:{totalTests:o.length,scaleUpTests:o.filter(i=>i.phase==="scaling-up").length,scaleDownTests:o.filter(i=>i.phase==="scaling-down").length,maxRoutes:o.length>0?Math.max(...o.map(i=>i.routes)):0,minRoutes:o.length>0?Math.min(...o.map(i=>i.routes)):0,avgThroughput:o.length>0?o.reduce((i,s)=>i+s.throughput,0)/o.length:0,avgLatency:o.length>0?o.reduce((i,s)=>i+s.latency.mean,0)/o.length:0},latencyPercentileComparison:o.map(i=>({routes:i.routes,phase:i.phase,p50:i.latency.percentiles.p50/1e3,p75:i.latency.percentiles.p75/1e3,p90:i.latency.percentiles.p90/1e3,p95:i.latency.percentiles.p95/1e3,p99:i.latency.percentiles.p99/1e3,p999:i.latency.percentiles.p999/1e3})),resourceTrends:o.map(i=>({routes:i.routes,phase:i.phase,envoyGatewayMemory:i.resources.envoyGateway.memory.mean,envoyGatewayCpu:i.resources.envoyGateway.cpu.mean,envoyProxyMemory:i.resources.envoyProxy.memory.mean,envoyProxyCpu:i.resources.envoyProxy.cpu.mean})),performanceMatrix:o.map(i=>({testName:i.testName,routes:i.routes,phase:i.phase,throughput:i.throughput,meanLatency:i.latency.mean/1e3,p95Latency:i.latency.percentiles.p95/1e3,totalMemory:i.resources.envoyGateway.memory.mean+i.resources.envoyProxy.memory.mean,totalCpu:i.resources.envoyGateway.cpu.mean+i.resources.envoyProxy.cpu.mean})),metadata:r.metadata}},[r]);return{selectedVersion:t,setSelectedVersion:n,availableVersions:e,...a}},Nie=({apiBase:e="https://envoy-gateway-benchmark-report.netlify.app/api",initialVersion:t,theme:n="light",containerClassName:r="",features:a={header:!1,versionSelector:!0,summaryCards:!0,tabs:["overview","latency","resources"]}})=>{var i,s,l,u,p,c;const o=$ie();return k.useEffect(()=>{n==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},[n]),k.useEffect(()=>{const f=document.createElement("style");return f.textContent=`
       .benchmark-dashboard [data-radix-popper-content-wrapper] {
         z-index: 9999 !important;
       }
       .benchmark-dashboard .relative.z-50 {
         z-index: 9999 !important;
       }
-    `,document.head.appendChild(p),()=>{document.head.removeChild(p)}},[]),b.jsxs("div",{className:`benchmark-dashboard ${n} ${r}`,"data-theme":n,children:[a.header&&b.jsxs("div",{className:"mb-8",children:[b.jsx("h2",{className:"text-3xl font-bold",children:"Performance Benchmark Report Explorer"}),b.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300",children:"Detailed performance analysis"})]}),a.versionSelector&&b.jsx("div",{className:"mb-6",children:b.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-xl shadow-lg p-4 w-full",children:b.jsx(ij,{selectedVersion:o.selectedVersion,availableVersions:o.availableVersions,onVersionChange:o.setSelectedVersion,metadata:o.metadata})})}),a.summaryCards&&o.performanceSummary&&b.jsx("div",{className:"mb-8",children:b.jsx(lj,{performanceSummary:o.performanceSummary,benchmarkResults:o.benchmarkResults})}),a.tabs&&a.tabs.length>0&&b.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg overflow-hidden",children:b.jsxs(Xoe,{defaultValue:a.tabs[0],className:"w-full",children:[b.jsxs(fO,{className:`grid w-full ${a.tabs.length===1?"grid-cols-1":a.tabs.length===2?"grid-cols-2":"grid-cols-3"} bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 h-auto p-0 rounded-none`,children:[((i=a.tabs)==null?void 0:i.includes("overview"))&&b.jsx(Bc,{value:"overview",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Overview"}),((s=a.tabs)==null?void 0:s.includes("latency"))&&b.jsx(Bc,{value:"latency",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Request RTT Analysis"}),((l=a.tabs)==null?void 0:l.includes("resources"))&&b.jsx(Bc,{value:"resources",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Resource Usage"})]}),b.jsxs("div",{className:"p-6",children:[((u=a.tabs)==null?void 0:u.includes("overview"))&&b.jsx(Hc,{value:"overview",children:b.jsx(Coe,{performanceMatrix:o.performanceMatrix,benchmarkResults:o.benchmarkResults,testConfiguration:o.testConfiguration,performanceSummary:o.performanceSummary,latencyPercentileComparison:o.latencyPercentileComparison})}),((f=a.tabs)==null?void 0:f.includes("latency"))&&b.jsx(Hc,{value:"latency",children:b.jsx(Eoe,{latencyPercentileComparison:o.latencyPercentileComparison,benchmarkResults:o.benchmarkResults})}),((c=a.tabs)==null?void 0:c.includes("resources"))&&b.jsx(Hc,{value:"resources",children:b.jsx(Toe,{resourceTrends:o.resourceTrends,benchmarkResults:o.benchmarkResults})})]})]})})]})};class pO{static async getAllCSS(){const t="shadow-dom-css";if(this.cssCache.has(t))return this.cssCache.get(t);try{let n="";const r=this.getBundledCSS();if(r){n=this.transformCSSForShadowDOM(r);const a=`
+    `,document.head.appendChild(f),()=>{document.head.removeChild(f)}},[]),b.jsxs("div",{className:`benchmark-dashboard ${n} ${r}`,"data-theme":n,children:[a.header&&b.jsxs("div",{className:"mb-8",children:[b.jsx("h2",{className:"text-3xl font-bold",children:"Performance Benchmark Report Explorer"}),b.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300",children:"Detailed performance analysis"})]}),a.versionSelector&&b.jsx("div",{className:"mb-6",children:b.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-xl shadow-lg p-4 w-full",children:b.jsx(wj,{selectedVersion:o.selectedVersion,availableVersions:o.availableVersions,onVersionChange:o.setSelectedVersion,metadata:o.metadata})})}),a.summaryCards&&o.performanceSummary&&b.jsx("div",{className:"mb-8",children:b.jsx(Pj,{performanceSummary:o.performanceSummary,benchmarkResults:o.benchmarkResults})}),a.tabs&&a.tabs.length>0&&b.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg overflow-hidden",children:b.jsxs(uie,{defaultValue:a.tabs[0],className:"w-full",children:[b.jsxs(mO,{className:`grid w-full ${a.tabs.length===1?"grid-cols-1":a.tabs.length===2?"grid-cols-2":"grid-cols-3"} bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 h-auto p-0 rounded-none`,children:[((i=a.tabs)==null?void 0:i.includes("overview"))&&b.jsx(Bc,{value:"overview",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Overview"}),((s=a.tabs)==null?void 0:s.includes("latency"))&&b.jsx(Bc,{value:"latency",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Request RTT Analysis"}),((l=a.tabs)==null?void 0:l.includes("resources"))&&b.jsx(Bc,{value:"resources",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Resource Usage"})]}),b.jsxs("div",{className:"p-6",children:[((u=a.tabs)==null?void 0:u.includes("overview"))&&b.jsx(Hc,{value:"overview",children:b.jsx(Hoe,{performanceMatrix:o.performanceMatrix,benchmarkResults:o.benchmarkResults,testConfiguration:o.testConfiguration,performanceSummary:o.performanceSummary,latencyPercentileComparison:o.latencyPercentileComparison})}),((p=a.tabs)==null?void 0:p.includes("latency"))&&b.jsx(Hc,{value:"latency",children:b.jsx(Goe,{latencyPercentileComparison:o.latencyPercentileComparison,benchmarkResults:o.benchmarkResults})}),((c=a.tabs)==null?void 0:c.includes("resources"))&&b.jsx(Hc,{value:"resources",children:b.jsx(Uoe,{resourceTrends:o.resourceTrends,benchmarkResults:o.benchmarkResults})})]})]})})]})};class hO{static async getAllCSS(){const t="shadow-dom-css";if(this.cssCache.has(t))return this.cssCache.get(t);try{let n="";const r=this.getBundledCSS();if(r){n=this.transformCSSForShadowDOM(r);const a=`
           ${this.getShadowDOMStyles()}
           ${n}
         `;return this.cssCache.set(t,a),a}else{const a=this.getFallbackCSS();return this.cssCache.set(t,a),a}}catch(n){return console.error("Error loading CSS for Shadow DOM:",n),this.getFallbackCSS()}}static getBundledCSS(){return window.__BENCHMARK_CSS__||null}static getCSSVariables(){return`
@@ -569,7 +569,7 @@ ${n.map(([o,i])=>{var l;const s=((l=i.theme)==null?void 0:l[r])||i.color;return
       @media (min-width: 640px) {
         .sm\\:text-base { font-size: 1rem !important; line-height: 1.5rem !important; }
       }
-    `}}f1(pO,"cssCache",new Map);var Bd=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Hd=typeof window>"u"||"Deno"in globalThis;function En(){}function xie(e,t){return typeof e=="function"?e(t):e}function wie(e){return typeof e=="number"&&e>=0&&e!==1/0}function bie(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Ly(e,t){return typeof e=="function"?e(t):e}function Pie(e,t){return typeof e=="function"?e(t):e}function B2(e,t){const{type:n="all",exact:r,fetchStatus:a,predicate:o,queryKey:i,stale:s}=e;if(i){if(r){if(t.queryHash!==a1(i,t.options))return!1}else if(!Pu(t.queryKey,i))return!1}if(n!=="all"){const l=t.isActive();if(n==="active"&&!l||n==="inactive"&&l)return!1}return!(typeof s=="boolean"&&t.isStale()!==s||a&&a!==t.state.fetchStatus||o&&!o(t))}function H2(e,t){const{exact:n,status:r,predicate:a,mutationKey:o}=e;if(o){if(!t.options.mutationKey)return!1;if(n){if(bu(t.options.mutationKey)!==bu(o))return!1}else if(!Pu(t.options.mutationKey,o))return!1}return!(r&&t.state.status!==r||a&&!a(t))}function a1(e,t){return((t==null?void 0:t.queryKeyHashFn)||bu)(e)}function bu(e){return JSON.stringify(e,(t,n)=>Fy(n)?Object.keys(n).sort().reduce((r,a)=>(r[a]=n[a],r),{}):n)}function Pu(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(n=>Pu(e[n],t[n])):!1}function dO(e,t){if(e===t)return e;const n=G2(e)&&G2(t);if(n||Fy(e)&&Fy(t)){const r=n?e:Object.keys(e),a=r.length,o=n?t:Object.keys(t),i=o.length,s=n?[]:{},l=new Set(r);let u=0;for(let f=0;f<i;f++){const c=n?f:o[f];(!n&&l.has(c)||n)&&e[c]===void 0&&t[c]===void 0?(s[c]=void 0,u++):(s[c]=dO(e[c],t[c]),s[c]===e[c]&&e[c]!==void 0&&u++)}return a===i&&u===a?e:s}return t}function G2(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function Fy(e){if(!U2(e))return!1;const t=e.constructor;if(t===void 0)return!0;const n=t.prototype;return!(!U2(n)||!n.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function U2(e){return Object.prototype.toString.call(e)==="[object Object]"}function Sie(e){return new Promise(t=>{setTimeout(t,e)})}function Oie(e,t,n){return typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?dO(e,t):t}function kie(e,t,n=0){const r=[...e,t];return n&&r.length>n?r.slice(1):r}function _ie(e,t,n=0){const r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var o1=Symbol();function mO(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===o1?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}var ro,ia,xi,X2,Aie=(X2=class extends Bd{constructor(){super();me(this,ro);me(this,ia);me(this,xi);ae(this,xi,t=>{if(!Hd&&window.addEventListener){const n=()=>t();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}})}onSubscribe(){B(this,ia)||this.setEventListener(B(this,xi))}onUnsubscribe(){var t;this.hasListeners()||((t=B(this,ia))==null||t.call(this),ae(this,ia,void 0))}setEventListener(t){var n;ae(this,xi,t),(n=B(this,ia))==null||n.call(this),ae(this,ia,t(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(t){B(this,ro)!==t&&(ae(this,ro,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(n=>{n(t)})}isFocused(){var t;return typeof B(this,ro)=="boolean"?B(this,ro):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},ro=new WeakMap,ia=new WeakMap,xi=new WeakMap,X2),hO=new Aie,wi,sa,bi,Y2,Cie=(Y2=class extends Bd{constructor(){super();me(this,wi,!0);me(this,sa);me(this,bi);ae(this,bi,t=>{if(!Hd&&window.addEventListener){const n=()=>t(!0),r=()=>t(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",r)}}})}onSubscribe(){B(this,sa)||this.setEventListener(B(this,bi))}onUnsubscribe(){var t;this.hasListeners()||((t=B(this,sa))==null||t.call(this),ae(this,sa,void 0))}setEventListener(t){var n;ae(this,bi,t),(n=B(this,sa))==null||n.call(this),ae(this,sa,t(this.setOnline.bind(this)))}setOnline(t){B(this,wi)!==t&&(ae(this,wi,t),this.listeners.forEach(r=>{r(t)}))}isOnline(){return B(this,wi)}},wi=new WeakMap,sa=new WeakMap,bi=new WeakMap,Y2),Op=new Cie;function Eie(){let e,t;const n=new Promise((a,o)=>{e=a,t=o});n.status="pending",n.catch(()=>{});function r(a){Object.assign(n,a),delete n.resolve,delete n.reject}return n.resolve=a=>{r({status:"fulfilled",value:a}),e(a)},n.reject=a=>{r({status:"rejected",reason:a}),t(a)},n}function Tie(e){return Math.min(1e3*2**e,3e4)}function vO(e){return(e??"online")==="online"?Op.isOnline():!0}var yO=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function ah(e){return e instanceof yO}function gO(e){let t=!1,n=0,r=!1,a;const o=Eie(),i=m=>{var g;r||(p(new yO(m)),(g=e.abort)==null||g.call(e))},s=()=>{t=!0},l=()=>{t=!1},u=()=>hO.isFocused()&&(e.networkMode==="always"||Op.isOnline())&&e.canRun(),f=()=>vO(e.networkMode)&&e.canRun(),c=m=>{var g;r||(r=!0,(g=e.onSuccess)==null||g.call(e,m),a==null||a(),o.resolve(m))},p=m=>{var g;r||(r=!0,(g=e.onError)==null||g.call(e,m),a==null||a(),o.reject(m))},d=()=>new Promise(m=>{var g;a=v=>{(r||u())&&m(v)},(g=e.onPause)==null||g.call(e)}).then(()=>{var m;a=void 0,r||(m=e.onContinue)==null||m.call(e)}),h=()=>{if(r)return;let m;const g=n===0?e.initialPromise:void 0;try{m=g??e.fn()}catch(v){m=Promise.reject(v)}Promise.resolve(m).then(c).catch(v=>{var S;if(r)return;const y=e.retry??(Hd?0:3),x=e.retryDelay??Tie,P=typeof x=="function"?x(n,v):x,w=y===!0||typeof y=="number"&&n<y||typeof y=="function"&&y(n,v);if(t||!w){p(v);return}n++,(S=e.onFail)==null||S.call(e,n,v),Sie(P).then(()=>u()?void 0:d()).then(()=>{t?p(v):h()})})};return{promise:o,cancel:i,continue:()=>(a==null||a(),o),cancelRetry:s,continueRetry:l,canStart:f,start:()=>(f()?h():d().then(h),o)}}var jie=e=>setTimeout(e,0);function $ie(){let e=[],t=0,n=s=>{s()},r=s=>{s()},a=jie;const o=s=>{t?e.push(s):a(()=>{n(s)})},i=()=>{const s=e;e=[],s.length&&a(()=>{r(()=>{s.forEach(l=>{n(l)})})})};return{batch:s=>{let l;t++;try{l=s()}finally{t--,t||i()}return l},batchCalls:s=>(...l)=>{o(()=>{s(...l)})},schedule:o,setNotifyFunction:s=>{n=s},setBatchNotifyFunction:s=>{r=s},setScheduler:s=>{a=s}}}var Mt=$ie(),ao,Q2,xO=(Q2=class{constructor(){me(this,ao)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),wie(this.gcTime)&&ae(this,ao,setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Hd?1/0:5*60*1e3))}clearGcTimeout(){B(this,ao)&&(clearTimeout(B(this,ao)),ae(this,ao,void 0))}},ao=new WeakMap,Q2),Pi,oo,pn,io,Ot,Su,so,Tn,br,Z2,Nie=(Z2=class extends xO{constructor(t){super();me(this,Tn);me(this,Pi);me(this,oo);me(this,pn);me(this,io);me(this,Ot);me(this,Su);me(this,so);ae(this,so,!1),ae(this,Su,t.defaultOptions),this.setOptions(t.options),this.observers=[],ae(this,io,t.client),ae(this,pn,B(this,io).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,ae(this,Pi,Rie(this.options)),this.state=t.state??B(this,Pi),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var t;return(t=B(this,Ot))==null?void 0:t.promise}setOptions(t){this.options={...B(this,Su),...t},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&B(this,pn).remove(this)}setData(t,n){const r=Oie(this.state.data,t,this.options);return wt(this,Tn,br).call(this,{data:r,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),r}setState(t,n){wt(this,Tn,br).call(this,{type:"setState",state:t,setStateOptions:n})}cancel(t){var r,a;const n=(r=B(this,Ot))==null?void 0:r.promise;return(a=B(this,Ot))==null||a.cancel(t),n?n.then(En).catch(En):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(B(this,Pi))}isActive(){return this.observers.some(t=>Pie(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===o1||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>Ly(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!bie(this.state.dataUpdatedAt,t)}onFocus(){var n;const t=this.observers.find(r=>r.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(n=B(this,Ot))==null||n.continue()}onOnline(){var n;const t=this.observers.find(r=>r.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(n=B(this,Ot))==null||n.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),B(this,pn).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(n=>n!==t),this.observers.length||(B(this,Ot)&&(B(this,so)?B(this,Ot).cancel({revert:!0}):B(this,Ot).cancelRetry()),this.scheduleGc()),B(this,pn).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||wt(this,Tn,br).call(this,{type:"invalidate"})}fetch(t,n){var u,f,c;if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&(n!=null&&n.cancelRefetch))this.cancel({silent:!0});else if(B(this,Ot))return B(this,Ot).continueRetry(),B(this,Ot).promise}if(t&&this.setOptions(t),!this.options.queryFn){const p=this.observers.find(d=>d.options.queryFn);p&&this.setOptions(p.options)}const r=new AbortController,a=p=>{Object.defineProperty(p,"signal",{enumerable:!0,get:()=>(ae(this,so,!0),r.signal)})},o=()=>{const p=mO(this.options,n),h=(()=>{const m={client:B(this,io),queryKey:this.queryKey,meta:this.meta};return a(m),m})();return ae(this,so,!1),this.options.persister?this.options.persister(p,h,this):p(h)},s=(()=>{const p={fetchOptions:n,options:this.options,queryKey:this.queryKey,client:B(this,io),state:this.state,fetchFn:o};return a(p),p})();(u=this.options.behavior)==null||u.onFetch(s,this),ae(this,oo,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((f=s.fetchOptions)==null?void 0:f.meta))&&wt(this,Tn,br).call(this,{type:"fetch",meta:(c=s.fetchOptions)==null?void 0:c.meta});const l=p=>{var d,h,m,g;ah(p)&&p.silent||wt(this,Tn,br).call(this,{type:"error",error:p}),ah(p)||((h=(d=B(this,pn).config).onError)==null||h.call(d,p,this),(g=(m=B(this,pn).config).onSettled)==null||g.call(m,this.state.data,p,this)),this.scheduleGc()};return ae(this,Ot,gO({initialPromise:n==null?void 0:n.initialPromise,fn:s.fetchFn,abort:r.abort.bind(r),onSuccess:p=>{var d,h,m,g;if(p===void 0){l(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(p)}catch(v){l(v);return}(h=(d=B(this,pn).config).onSuccess)==null||h.call(d,p,this),(g=(m=B(this,pn).config).onSettled)==null||g.call(m,p,this.state.error,this),this.scheduleGc()},onError:l,onFail:(p,d)=>{wt(this,Tn,br).call(this,{type:"failed",failureCount:p,error:d})},onPause:()=>{wt(this,Tn,br).call(this,{type:"pause"})},onContinue:()=>{wt(this,Tn,br).call(this,{type:"continue"})},retry:s.options.retry,retryDelay:s.options.retryDelay,networkMode:s.options.networkMode,canRun:()=>!0})),B(this,Ot).start()}},Pi=new WeakMap,oo=new WeakMap,pn=new WeakMap,io=new WeakMap,Ot=new WeakMap,Su=new WeakMap,so=new WeakMap,Tn=new WeakSet,br=function(t){const n=r=>{switch(t.type){case"failed":return{...r,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...Mie(r.data,this.options),fetchMeta:t.meta??null};case"success":return ae(this,oo,void 0),{...r,data:t.data,dataUpdateCount:r.dataUpdateCount+1,dataUpdatedAt:t.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const a=t.error;return ah(a)&&a.revert&&B(this,oo)?{...B(this,oo),fetchStatus:"idle"}:{...r,error:a,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:a,fetchStatus:"idle",status:"error"};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...t.state}}};this.state=n(this.state),Mt.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),B(this,pn).notify({query:this,type:"updated",action:t})})},Z2);function Mie(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:vO(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function Rie(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var Jn,J2,Iie=(J2=class extends Bd{constructor(t={}){super();me(this,Jn);this.config=t,ae(this,Jn,new Map)}build(t,n,r){const a=n.queryKey,o=n.queryHash??a1(a,n);let i=this.get(o);return i||(i=new Nie({client:t,queryKey:a,queryHash:o,options:t.defaultQueryOptions(n),state:r,defaultOptions:t.getQueryDefaults(a)}),this.add(i)),i}add(t){B(this,Jn).has(t.queryHash)||(B(this,Jn).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const n=B(this,Jn).get(t.queryHash);n&&(t.destroy(),n===t&&B(this,Jn).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){Mt.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return B(this,Jn).get(t)}getAll(){return[...B(this,Jn).values()]}find(t){const n={exact:!0,...t};return this.getAll().find(r=>B2(n,r))}findAll(t={}){const n=this.getAll();return Object.keys(t).length>0?n.filter(r=>B2(t,r)):n}notify(t){Mt.batch(()=>{this.listeners.forEach(n=>{n(t)})})}onFocus(){Mt.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){Mt.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},Jn=new WeakMap,J2),er,$t,lo,tr,Jr,e5,Die=(e5=class extends xO{constructor(t){super();me(this,tr);me(this,er);me(this,$t);me(this,lo);this.mutationId=t.mutationId,ae(this,$t,t.mutationCache),ae(this,er,[]),this.state=t.state||Lie(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){B(this,er).includes(t)||(B(this,er).push(t),this.clearGcTimeout(),B(this,$t).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){ae(this,er,B(this,er).filter(n=>n!==t)),this.scheduleGc(),B(this,$t).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){B(this,er).length||(this.state.status==="pending"?this.scheduleGc():B(this,$t).remove(this))}continue(){var t;return((t=B(this,lo))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var o,i,s,l,u,f,c,p,d,h,m,g,v,y,x,P,w,S,O,_;const n=()=>{wt(this,tr,Jr).call(this,{type:"continue"})};ae(this,lo,gO({fn:()=>this.options.mutationFn?this.options.mutationFn(t):Promise.reject(new Error("No mutationFn found")),onFail:(A,j)=>{wt(this,tr,Jr).call(this,{type:"failed",failureCount:A,error:j})},onPause:()=>{wt(this,tr,Jr).call(this,{type:"pause"})},onContinue:n,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>B(this,$t).canRun(this)}));const r=this.state.status==="pending",a=!B(this,lo).canStart();try{if(r)n();else{wt(this,tr,Jr).call(this,{type:"pending",variables:t,isPaused:a}),await((i=(o=B(this,$t).config).onMutate)==null?void 0:i.call(o,t,this));const j=await((l=(s=this.options).onMutate)==null?void 0:l.call(s,t));j!==this.state.context&&wt(this,tr,Jr).call(this,{type:"pending",context:j,variables:t,isPaused:a})}const A=await B(this,lo).start();return await((f=(u=B(this,$t).config).onSuccess)==null?void 0:f.call(u,A,t,this.state.context,this)),await((p=(c=this.options).onSuccess)==null?void 0:p.call(c,A,t,this.state.context)),await((h=(d=B(this,$t).config).onSettled)==null?void 0:h.call(d,A,null,this.state.variables,this.state.context,this)),await((g=(m=this.options).onSettled)==null?void 0:g.call(m,A,null,t,this.state.context)),wt(this,tr,Jr).call(this,{type:"success",data:A}),A}catch(A){try{throw await((y=(v=B(this,$t).config).onError)==null?void 0:y.call(v,A,t,this.state.context,this)),await((P=(x=this.options).onError)==null?void 0:P.call(x,A,t,this.state.context)),await((S=(w=B(this,$t).config).onSettled)==null?void 0:S.call(w,void 0,A,this.state.variables,this.state.context,this)),await((_=(O=this.options).onSettled)==null?void 0:_.call(O,void 0,A,t,this.state.context)),A}finally{wt(this,tr,Jr).call(this,{type:"error",error:A})}}finally{B(this,$t).runNext(this)}}},er=new WeakMap,$t=new WeakMap,lo=new WeakMap,tr=new WeakSet,Jr=function(t){const n=r=>{switch(t.type){case"failed":return{...r,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...r,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:t.error,failureCount:r.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=n(this.state),Mt.batch(()=>{B(this,er).forEach(r=>{r.onMutationUpdate(t)}),B(this,$t).notify({mutation:this,type:"updated",action:t})})},e5);function Lie(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Or,jn,Ou,t5,Fie=(t5=class extends Bd{constructor(t={}){super();me(this,Or);me(this,jn);me(this,Ou);this.config=t,ae(this,Or,new Set),ae(this,jn,new Map),ae(this,Ou,0)}build(t,n,r){const a=new Die({mutationCache:this,mutationId:++zu(this,Ou)._,options:t.defaultMutationOptions(n),state:r});return this.add(a),a}add(t){B(this,Or).add(t);const n=kc(t);if(typeof n=="string"){const r=B(this,jn).get(n);r?r.push(t):B(this,jn).set(n,[t])}this.notify({type:"added",mutation:t})}remove(t){if(B(this,Or).delete(t)){const n=kc(t);if(typeof n=="string"){const r=B(this,jn).get(n);if(r)if(r.length>1){const a=r.indexOf(t);a!==-1&&r.splice(a,1)}else r[0]===t&&B(this,jn).delete(n)}}this.notify({type:"removed",mutation:t})}canRun(t){const n=kc(t);if(typeof n=="string"){const r=B(this,jn).get(n),a=r==null?void 0:r.find(o=>o.state.status==="pending");return!a||a===t}else return!0}runNext(t){var r;const n=kc(t);if(typeof n=="string"){const a=(r=B(this,jn).get(n))==null?void 0:r.find(o=>o!==t&&o.state.isPaused);return(a==null?void 0:a.continue())??Promise.resolve()}else return Promise.resolve()}clear(){Mt.batch(()=>{B(this,Or).forEach(t=>{this.notify({type:"removed",mutation:t})}),B(this,Or).clear(),B(this,jn).clear()})}getAll(){return Array.from(B(this,Or))}find(t){const n={exact:!0,...t};return this.getAll().find(r=>H2(n,r))}findAll(t={}){return this.getAll().filter(n=>H2(t,n))}notify(t){Mt.batch(()=>{this.listeners.forEach(n=>{n(t)})})}resumePausedMutations(){const t=this.getAll().filter(n=>n.state.isPaused);return Mt.batch(()=>Promise.all(t.map(n=>n.continue().catch(En))))}},Or=new WeakMap,jn=new WeakMap,Ou=new WeakMap,t5);function kc(e){var t;return(t=e.options.scope)==null?void 0:t.id}function W2(e){return{onFetch:(t,n)=>{var f,c,p,d,h;const r=t.options,a=(p=(c=(f=t.fetchOptions)==null?void 0:f.meta)==null?void 0:c.fetchMore)==null?void 0:p.direction,o=((d=t.state.data)==null?void 0:d.pages)||[],i=((h=t.state.data)==null?void 0:h.pageParams)||[];let s={pages:[],pageParams:[]},l=0;const u=async()=>{let m=!1;const g=x=>{Object.defineProperty(x,"signal",{enumerable:!0,get:()=>(t.signal.aborted?m=!0:t.signal.addEventListener("abort",()=>{m=!0}),t.signal)})},v=mO(t.options,t.fetchOptions),y=async(x,P,w)=>{if(m)return Promise.reject();if(P==null&&x.pages.length)return Promise.resolve(x);const O=(()=>{const E={client:t.client,queryKey:t.queryKey,pageParam:P,direction:w?"backward":"forward",meta:t.options.meta};return g(E),E})(),_=await v(O),{maxPages:A}=t.options,j=w?_ie:kie;return{pages:j(x.pages,_,A),pageParams:j(x.pageParams,P,A)}};if(a&&o.length){const x=a==="backward",P=x?zie:q2,w={pages:o,pageParams:i},S=P(r,w);s=await y(w,S,x)}else{const x=e??o.length;do{const P=l===0?i[0]??r.initialPageParam:q2(r,s);if(l>0&&P==null)break;s=await y(s,P),l++}while(l<x)}return s};t.options.persister?t.fetchFn=()=>{var m,g;return(g=(m=t.options).persister)==null?void 0:g.call(m,u,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n)}:t.fetchFn=u}}}function q2(e,{pages:t,pageParams:n}){const r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function zie(e,{pages:t,pageParams:n}){var r;return t.length>0?(r=e.getPreviousPageParam)==null?void 0:r.call(e,t[0],t,n[0],n):void 0}var We,la,ua,Si,Oi,ca,ki,_i,n5,Bie=(n5=class{constructor(e={}){me(this,We);me(this,la);me(this,ua);me(this,Si);me(this,Oi);me(this,ca);me(this,ki);me(this,_i);ae(this,We,e.queryCache||new Iie),ae(this,la,e.mutationCache||new Fie),ae(this,ua,e.defaultOptions||{}),ae(this,Si,new Map),ae(this,Oi,new Map),ae(this,ca,0)}mount(){zu(this,ca)._++,B(this,ca)===1&&(ae(this,ki,hO.subscribe(async e=>{e&&(await this.resumePausedMutations(),B(this,We).onFocus())})),ae(this,_i,Op.subscribe(async e=>{e&&(await this.resumePausedMutations(),B(this,We).onOnline())})))}unmount(){var e,t;zu(this,ca)._--,B(this,ca)===0&&((e=B(this,ki))==null||e.call(this),ae(this,ki,void 0),(t=B(this,_i))==null||t.call(this),ae(this,_i,void 0))}isFetching(e){return B(this,We).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return B(this,la).findAll({...e,status:"pending"}).length}getQueryData(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=B(this,We).get(t.queryHash))==null?void 0:n.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),n=B(this,We).build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(Ly(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return B(this,We).findAll(e).map(({queryKey:t,state:n})=>{const r=n.data;return[t,r]})}setQueryData(e,t,n){const r=this.defaultQueryOptions({queryKey:e}),a=B(this,We).get(r.queryHash),o=a==null?void 0:a.state.data,i=xie(t,o);if(i!==void 0)return B(this,We).build(this,r).setData(i,{...n,manual:!0})}setQueriesData(e,t,n){return Mt.batch(()=>B(this,We).findAll(e).map(({queryKey:r})=>[r,this.setQueryData(r,t,n)]))}getQueryState(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=B(this,We).get(t.queryHash))==null?void 0:n.state}removeQueries(e){const t=B(this,We);Mt.batch(()=>{t.findAll(e).forEach(n=>{t.remove(n)})})}resetQueries(e,t){const n=B(this,We);return Mt.batch(()=>(n.findAll(e).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const n={revert:!0,...t},r=Mt.batch(()=>B(this,We).findAll(e).map(a=>a.cancel(n)));return Promise.all(r).then(En).catch(En)}invalidateQueries(e,t={}){return Mt.batch(()=>(B(this,We).findAll(e).forEach(n=>{n.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const n={...t,cancelRefetch:t.cancelRefetch??!0},r=Mt.batch(()=>B(this,We).findAll(e).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let o=a.fetch(void 0,n);return n.throwOnError||(o=o.catch(En)),a.state.fetchStatus==="paused"?Promise.resolve():o}));return Promise.all(r).then(En)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const n=B(this,We).build(this,t);return n.isStaleByTime(Ly(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(En).catch(En)}fetchInfiniteQuery(e){return e.behavior=W2(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(En).catch(En)}ensureInfiniteQueryData(e){return e.behavior=W2(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return Op.isOnline()?B(this,la).resumePausedMutations():Promise.resolve()}getQueryCache(){return B(this,We)}getMutationCache(){return B(this,la)}getDefaultOptions(){return B(this,ua)}setDefaultOptions(e){ae(this,ua,e)}setQueryDefaults(e,t){B(this,Si).set(bu(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...B(this,Si).values()],n={};return t.forEach(r=>{Pu(e,r.queryKey)&&Object.assign(n,r.defaultOptions)}),n}setMutationDefaults(e,t){B(this,Oi).set(bu(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...B(this,Oi).values()],n={};return t.forEach(r=>{Pu(e,r.mutationKey)&&Object.assign(n,r.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;const t={...B(this,ua).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=a1(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===o1&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...B(this,ua).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){B(this,We).clear(),B(this,la).clear()}},We=new WeakMap,la=new WeakMap,ua=new WeakMap,Si=new WeakMap,Oi=new WeakMap,ca=new WeakMap,ki=new WeakMap,_i=new WeakMap,n5),Hie=k.createContext(void 0),Gie=({client:e,children:t})=>(k.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),b.jsx(Hie.Provider,{value:e,children:t})),[Gd,mse]=ps("Tooltip",[Up]),i1=Up(),wO="TooltipProvider",Uie=700,V2="tooltip.open",[Wie,bO]=Gd(wO),PO=e=>{const{__scopeTooltip:t,delayDuration:n=Uie,skipDelayDuration:r=300,disableHoverableContent:a=!1,children:o}=e,i=k.useRef(!0),s=k.useRef(!1),l=k.useRef(0);return k.useEffect(()=>{const u=l.current;return()=>window.clearTimeout(u)},[]),b.jsx(Wie,{scope:t,isOpenDelayedRef:i,delayDuration:n,onOpen:k.useCallback(()=>{window.clearTimeout(l.current),i.current=!1},[]),onClose:k.useCallback(()=>{window.clearTimeout(l.current),l.current=window.setTimeout(()=>i.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:k.useCallback(u=>{s.current=u},[]),disableHoverableContent:a,children:o})};PO.displayName=wO;var SO="Tooltip",[hse,Ud]=Gd(SO),zy="TooltipTrigger",qie=k.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,a=Ud(zy,n),o=bO(zy,n),i=i1(n),s=k.useRef(null),l=Ye(t,s,a.onTriggerChange),u=k.useRef(!1),f=k.useRef(!1),c=k.useCallback(()=>u.current=!1,[]);return k.useEffect(()=>()=>document.removeEventListener("pointerup",c),[c]),b.jsx(G6,{asChild:!0,...i,children:b.jsx(Ee.button,{"aria-describedby":a.open?a.contentId:void 0,"data-state":a.stateAttribute,...r,ref:l,onPointerMove:pe(e.onPointerMove,p=>{p.pointerType!=="touch"&&!f.current&&!o.isPointerInTransitRef.current&&(a.onTriggerEnter(),f.current=!0)}),onPointerLeave:pe(e.onPointerLeave,()=>{a.onTriggerLeave(),f.current=!1}),onPointerDown:pe(e.onPointerDown,()=>{a.open&&a.onClose(),u.current=!0,document.addEventListener("pointerup",c,{once:!0})}),onFocus:pe(e.onFocus,()=>{u.current||a.onOpen()}),onBlur:pe(e.onBlur,a.onClose),onClick:pe(e.onClick,a.onClose)})})});qie.displayName=zy;var Vie="TooltipPortal",[vse,Kie]=Gd(Vie,{forceMount:void 0}),ss="TooltipContent",OO=k.forwardRef((e,t)=>{const n=Kie(ss,e.__scopeTooltip),{forceMount:r=n.forceMount,side:a="top",...o}=e,i=Ud(ss,e.__scopeTooltip);return b.jsx(t1,{present:r||i.open,children:i.disableHoverableContent?b.jsx(kO,{side:a,...o,ref:t}):b.jsx(Xie,{side:a,...o,ref:t})})}),Xie=k.forwardRef((e,t)=>{const n=Ud(ss,e.__scopeTooltip),r=bO(ss,e.__scopeTooltip),a=k.useRef(null),o=Ye(t,a),[i,s]=k.useState(null),{trigger:l,onClose:u}=n,f=a.current,{onPointerInTransitChange:c}=r,p=k.useCallback(()=>{s(null),c(!1)},[c]),d=k.useCallback((h,m)=>{const g=h.currentTarget,v={x:h.clientX,y:h.clientY},y=ese(v,g.getBoundingClientRect()),x=tse(v,y),P=nse(m.getBoundingClientRect()),w=ase([...x,...P]);s(w),c(!0)},[c]);return k.useEffect(()=>()=>p(),[p]),k.useEffect(()=>{if(l&&f){const h=g=>d(g,f),m=g=>d(g,l);return l.addEventListener("pointerleave",h),f.addEventListener("pointerleave",m),()=>{l.removeEventListener("pointerleave",h),f.removeEventListener("pointerleave",m)}}},[l,f,d,p]),k.useEffect(()=>{if(i){const h=m=>{const g=m.target,v={x:m.clientX,y:m.clientY},y=(l==null?void 0:l.contains(g))||(f==null?void 0:f.contains(g)),x=!rse(v,i);y?p():x&&(p(),u())};return document.addEventListener("pointermove",h),()=>document.removeEventListener("pointermove",h)}},[l,f,i,u,p]),b.jsx(kO,{...e,ref:o})}),[Yie,Qie]=Gd(SO,{isInside:!1}),Zie=iA("TooltipContent"),kO=k.forwardRef((e,t)=>{const{__scopeTooltip:n,children:r,"aria-label":a,onEscapeKeyDown:o,onPointerDownOutside:i,...s}=e,l=Ud(ss,n),u=i1(n),{onClose:f}=l;return k.useEffect(()=>(document.addEventListener(V2,f),()=>document.removeEventListener(V2,f)),[f]),k.useEffect(()=>{if(l.trigger){const c=p=>{const d=p.target;d!=null&&d.contains(l.trigger)&&f()};return window.addEventListener("scroll",c,{capture:!0}),()=>window.removeEventListener("scroll",c,{capture:!0})}},[l.trigger,f]),b.jsx(I0,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:i,onFocusOutside:c=>c.preventDefault(),onDismiss:f,children:b.jsxs(U6,{"data-state":l.stateAttribute,...u,...s,ref:t,style:{...s.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[b.jsx(Zie,{children:r}),b.jsx(Yie,{scope:n,isInside:!0,children:b.jsx(qC,{id:l.contentId,role:"tooltip",children:a||r})})]})})});OO.displayName=ss;var _O="TooltipArrow",Jie=k.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,a=i1(n);return Qie(_O,n).isInside?null:b.jsx(W6,{...a,...r,ref:t})});Jie.displayName=_O;function ese(e,t){const n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),a=Math.abs(t.right-e.x),o=Math.abs(t.left-e.x);switch(Math.min(n,r,a,o)){case o:return"left";case a:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}function tse(e,t,n=5){const r=[];switch(t){case"top":r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case"bottom":r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case"left":r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case"right":r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function nse(e){const{top:t,right:n,bottom:r,left:a}=e;return[{x:a,y:t},{x:n,y:t},{x:n,y:r},{x:a,y:r}]}function rse(e,t){const{x:n,y:r}=e;let a=!1;for(let o=0,i=t.length-1;o<t.length;i=o++){const s=t[o],l=t[i],u=s.x,f=s.y,c=l.x,p=l.y;f>r!=p>r&&n<(c-u)*(r-f)/(p-f)+u&&(a=!a)}return a}function ase(e){const t=e.slice();return t.sort((n,r)=>n.x<r.x?-1:n.x>r.x?1:n.y<r.y?-1:n.y>r.y?1:0),ose(t)}function ose(e){if(e.length<=1)return e.slice();const t=[];for(let r=0;r<e.length;r++){const a=e[r];for(;t.length>=2;){const o=t[t.length-1],i=t[t.length-2];if((o.x-i.x)*(a.y-i.y)>=(o.y-i.y)*(a.x-i.x))t.pop();else break}t.push(a)}t.pop();const n=[];for(let r=e.length-1;r>=0;r--){const a=e[r];for(;n.length>=2;){const o=n[n.length-1],i=n[n.length-2];if((o.x-i.x)*(a.y-i.y)>=(o.y-i.y)*(a.x-i.x))n.pop();else break}n.push(a)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var ise=PO,AO=OO;const sse=ise,lse=k.forwardRef(({className:e,sideOffset:t=4,...n},r)=>b.jsx(AO,{ref:r,sideOffset:t,className:Oe("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...n}));lse.displayName=AO.displayName;const use=e=>{const t=k.useRef(null),n=k.useRef(null),r=k.useRef(null);return k.useEffect(()=>{if(t.current){try{const a=t.current.attachShadow({mode:"open"});n.current=a;const o=document.createElement("div");o.id="shadow-root",o.className="benchmark-dashboard",a.appendChild(o),pO.getAllCSS().then(i=>{const s=document.createElement("style");s.textContent=i,a.insertBefore(s,o);const l=Gc.createRoot(o);r.current=l,l.render(b.jsx(C.StrictMode,{children:b.jsx(Gie,{client:new Bie,children:b.jsx(sse,{children:b.jsx(gie,{...e})})})}))}).catch(i=>{console.error("Failed to inject CSS into Shadow DOM:",i)})}catch(a){console.error("Failed to create Shadow DOM:",a)}return()=>{r.current&&r.current.unmount()}}},[]),b.jsx("div",{ref:t,style:{width:"100%",minHeight:"400px"}})},cse=`*, ::before, ::after {
+    `}}p1(hO,"cssCache",new Map);var Bd=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Hd=typeof window>"u"||"Deno"in globalThis;function En(){}function Mie(e,t){return typeof e=="function"?e(t):e}function Rie(e){return typeof e=="number"&&e>=0&&e!==1/0}function Iie(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Lv(e,t){return typeof e=="function"?e(t):e}function Die(e,t){return typeof e=="function"?e(t):e}function G2(e,t){const{type:n="all",exact:r,fetchStatus:a,predicate:o,queryKey:i,stale:s}=e;if(i){if(r){if(t.queryHash!==a1(i,t.options))return!1}else if(!Pu(t.queryKey,i))return!1}if(n!=="all"){const l=t.isActive();if(n==="active"&&!l||n==="inactive"&&l)return!1}return!(typeof s=="boolean"&&t.isStale()!==s||a&&a!==t.state.fetchStatus||o&&!o(t))}function U2(e,t){const{exact:n,status:r,predicate:a,mutationKey:o}=e;if(o){if(!t.options.mutationKey)return!1;if(n){if(bu(t.options.mutationKey)!==bu(o))return!1}else if(!Pu(t.options.mutationKey,o))return!1}return!(r&&t.state.status!==r||a&&!a(t))}function a1(e,t){return((t==null?void 0:t.queryKeyHashFn)||bu)(e)}function bu(e){return JSON.stringify(e,(t,n)=>Fv(n)?Object.keys(n).sort().reduce((r,a)=>(r[a]=n[a],r),{}):n)}function Pu(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(n=>Pu(e[n],t[n])):!1}function vO(e,t){if(e===t)return e;const n=W2(e)&&W2(t);if(n||Fv(e)&&Fv(t)){const r=n?e:Object.keys(e),a=r.length,o=n?t:Object.keys(t),i=o.length,s=n?[]:{},l=new Set(r);let u=0;for(let p=0;p<i;p++){const c=n?p:o[p];(!n&&l.has(c)||n)&&e[c]===void 0&&t[c]===void 0?(s[c]=void 0,u++):(s[c]=vO(e[c],t[c]),s[c]===e[c]&&e[c]!==void 0&&u++)}return a===i&&u===a?e:s}return t}function W2(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function Fv(e){if(!q2(e))return!1;const t=e.constructor;if(t===void 0)return!0;const n=t.prototype;return!(!q2(n)||!n.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function q2(e){return Object.prototype.toString.call(e)==="[object Object]"}function Lie(e){return new Promise(t=>{setTimeout(t,e)})}function Fie(e,t,n){return typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?vO(e,t):t}function zie(e,t,n=0){const r=[...e,t];return n&&r.length>n?r.slice(1):r}function Bie(e,t,n=0){const r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var o1=Symbol();function yO(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===o1?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}var ro,ia,xi,Q2,Hie=(Q2=class extends Bd{constructor(){super();me(this,ro);me(this,ia);me(this,xi);ae(this,xi,t=>{if(!Hd&&window.addEventListener){const n=()=>t();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}})}onSubscribe(){B(this,ia)||this.setEventListener(B(this,xi))}onUnsubscribe(){var t;this.hasListeners()||((t=B(this,ia))==null||t.call(this),ae(this,ia,void 0))}setEventListener(t){var n;ae(this,xi,t),(n=B(this,ia))==null||n.call(this),ae(this,ia,t(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(t){B(this,ro)!==t&&(ae(this,ro,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(n=>{n(t)})}isFocused(){var t;return typeof B(this,ro)=="boolean"?B(this,ro):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},ro=new WeakMap,ia=new WeakMap,xi=new WeakMap,Q2),gO=new Hie,wi,sa,bi,Z2,Gie=(Z2=class extends Bd{constructor(){super();me(this,wi,!0);me(this,sa);me(this,bi);ae(this,bi,t=>{if(!Hd&&window.addEventListener){const n=()=>t(!0),r=()=>t(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",r)}}})}onSubscribe(){B(this,sa)||this.setEventListener(B(this,bi))}onUnsubscribe(){var t;this.hasListeners()||((t=B(this,sa))==null||t.call(this),ae(this,sa,void 0))}setEventListener(t){var n;ae(this,bi,t),(n=B(this,sa))==null||n.call(this),ae(this,sa,t(this.setOnline.bind(this)))}setOnline(t){B(this,wi)!==t&&(ae(this,wi,t),this.listeners.forEach(r=>{r(t)}))}isOnline(){return B(this,wi)}},wi=new WeakMap,sa=new WeakMap,bi=new WeakMap,Z2),Of=new Gie;function Uie(){let e,t;const n=new Promise((a,o)=>{e=a,t=o});n.status="pending",n.catch(()=>{});function r(a){Object.assign(n,a),delete n.resolve,delete n.reject}return n.resolve=a=>{r({status:"fulfilled",value:a}),e(a)},n.reject=a=>{r({status:"rejected",reason:a}),t(a)},n}function Wie(e){return Math.min(1e3*2**e,3e4)}function xO(e){return(e??"online")==="online"?Of.isOnline():!0}var wO=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function ah(e){return e instanceof wO}function bO(e){let t=!1,n=0,r=!1,a;const o=Uie(),i=m=>{var g;r||(f(new wO(m)),(g=e.abort)==null||g.call(e))},s=()=>{t=!0},l=()=>{t=!1},u=()=>gO.isFocused()&&(e.networkMode==="always"||Of.isOnline())&&e.canRun(),p=()=>xO(e.networkMode)&&e.canRun(),c=m=>{var g;r||(r=!0,(g=e.onSuccess)==null||g.call(e,m),a==null||a(),o.resolve(m))},f=m=>{var g;r||(r=!0,(g=e.onError)==null||g.call(e,m),a==null||a(),o.reject(m))},d=()=>new Promise(m=>{var g;a=v=>{(r||u())&&m(v)},(g=e.onPause)==null||g.call(e)}).then(()=>{var m;a=void 0,r||(m=e.onContinue)==null||m.call(e)}),h=()=>{if(r)return;let m;const g=n===0?e.initialPromise:void 0;try{m=g??e.fn()}catch(v){m=Promise.reject(v)}Promise.resolve(m).then(c).catch(v=>{var S;if(r)return;const y=e.retry??(Hd?0:3),x=e.retryDelay??Wie,P=typeof x=="function"?x(n,v):x,w=y===!0||typeof y=="number"&&n<y||typeof y=="function"&&y(n,v);if(t||!w){f(v);return}n++,(S=e.onFail)==null||S.call(e,n,v),Lie(P).then(()=>u()?void 0:d()).then(()=>{t?f(v):h()})})};return{promise:o,cancel:i,continue:()=>(a==null||a(),o),cancelRetry:s,continueRetry:l,canStart:p,start:()=>(p()?h():d().then(h),o)}}var qie=e=>setTimeout(e,0);function Vie(){let e=[],t=0,n=s=>{s()},r=s=>{s()},a=qie;const o=s=>{t?e.push(s):a(()=>{n(s)})},i=()=>{const s=e;e=[],s.length&&a(()=>{r(()=>{s.forEach(l=>{n(l)})})})};return{batch:s=>{let l;t++;try{l=s()}finally{t--,t||i()}return l},batchCalls:s=>(...l)=>{o(()=>{s(...l)})},schedule:o,setNotifyFunction:s=>{n=s},setBatchNotifyFunction:s=>{r=s},setScheduler:s=>{a=s}}}var Mt=Vie(),ao,J2,PO=(J2=class{constructor(){me(this,ao)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Rie(this.gcTime)&&ae(this,ao,setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Hd?1/0:5*60*1e3))}clearGcTimeout(){B(this,ao)&&(clearTimeout(B(this,ao)),ae(this,ao,void 0))}},ao=new WeakMap,J2),Pi,oo,fn,io,Ot,Su,so,Tn,br,e5,Kie=(e5=class extends PO{constructor(t){super();me(this,Tn);me(this,Pi);me(this,oo);me(this,fn);me(this,io);me(this,Ot);me(this,Su);me(this,so);ae(this,so,!1),ae(this,Su,t.defaultOptions),this.setOptions(t.options),this.observers=[],ae(this,io,t.client),ae(this,fn,B(this,io).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,ae(this,Pi,Yie(this.options)),this.state=t.state??B(this,Pi),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var t;return(t=B(this,Ot))==null?void 0:t.promise}setOptions(t){this.options={...B(this,Su),...t},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&B(this,fn).remove(this)}setData(t,n){const r=Fie(this.state.data,t,this.options);return wt(this,Tn,br).call(this,{data:r,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),r}setState(t,n){wt(this,Tn,br).call(this,{type:"setState",state:t,setStateOptions:n})}cancel(t){var r,a;const n=(r=B(this,Ot))==null?void 0:r.promise;return(a=B(this,Ot))==null||a.cancel(t),n?n.then(En).catch(En):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(B(this,Pi))}isActive(){return this.observers.some(t=>Die(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===o1||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>Lv(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!Iie(this.state.dataUpdatedAt,t)}onFocus(){var n;const t=this.observers.find(r=>r.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(n=B(this,Ot))==null||n.continue()}onOnline(){var n;const t=this.observers.find(r=>r.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(n=B(this,Ot))==null||n.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),B(this,fn).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(n=>n!==t),this.observers.length||(B(this,Ot)&&(B(this,so)?B(this,Ot).cancel({revert:!0}):B(this,Ot).cancelRetry()),this.scheduleGc()),B(this,fn).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||wt(this,Tn,br).call(this,{type:"invalidate"})}fetch(t,n){var u,p,c;if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&(n!=null&&n.cancelRefetch))this.cancel({silent:!0});else if(B(this,Ot))return B(this,Ot).continueRetry(),B(this,Ot).promise}if(t&&this.setOptions(t),!this.options.queryFn){const f=this.observers.find(d=>d.options.queryFn);f&&this.setOptions(f.options)}const r=new AbortController,a=f=>{Object.defineProperty(f,"signal",{enumerable:!0,get:()=>(ae(this,so,!0),r.signal)})},o=()=>{const f=yO(this.options,n),h=(()=>{const m={client:B(this,io),queryKey:this.queryKey,meta:this.meta};return a(m),m})();return ae(this,so,!1),this.options.persister?this.options.persister(f,h,this):f(h)},s=(()=>{const f={fetchOptions:n,options:this.options,queryKey:this.queryKey,client:B(this,io),state:this.state,fetchFn:o};return a(f),f})();(u=this.options.behavior)==null||u.onFetch(s,this),ae(this,oo,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((p=s.fetchOptions)==null?void 0:p.meta))&&wt(this,Tn,br).call(this,{type:"fetch",meta:(c=s.fetchOptions)==null?void 0:c.meta});const l=f=>{var d,h,m,g;ah(f)&&f.silent||wt(this,Tn,br).call(this,{type:"error",error:f}),ah(f)||((h=(d=B(this,fn).config).onError)==null||h.call(d,f,this),(g=(m=B(this,fn).config).onSettled)==null||g.call(m,this.state.data,f,this)),this.scheduleGc()};return ae(this,Ot,bO({initialPromise:n==null?void 0:n.initialPromise,fn:s.fetchFn,abort:r.abort.bind(r),onSuccess:f=>{var d,h,m,g;if(f===void 0){l(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(f)}catch(v){l(v);return}(h=(d=B(this,fn).config).onSuccess)==null||h.call(d,f,this),(g=(m=B(this,fn).config).onSettled)==null||g.call(m,f,this.state.error,this),this.scheduleGc()},onError:l,onFail:(f,d)=>{wt(this,Tn,br).call(this,{type:"failed",failureCount:f,error:d})},onPause:()=>{wt(this,Tn,br).call(this,{type:"pause"})},onContinue:()=>{wt(this,Tn,br).call(this,{type:"continue"})},retry:s.options.retry,retryDelay:s.options.retryDelay,networkMode:s.options.networkMode,canRun:()=>!0})),B(this,Ot).start()}},Pi=new WeakMap,oo=new WeakMap,fn=new WeakMap,io=new WeakMap,Ot=new WeakMap,Su=new WeakMap,so=new WeakMap,Tn=new WeakSet,br=function(t){const n=r=>{switch(t.type){case"failed":return{...r,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...Xie(r.data,this.options),fetchMeta:t.meta??null};case"success":return ae(this,oo,void 0),{...r,data:t.data,dataUpdateCount:r.dataUpdateCount+1,dataUpdatedAt:t.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const a=t.error;return ah(a)&&a.revert&&B(this,oo)?{...B(this,oo),fetchStatus:"idle"}:{...r,error:a,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:a,fetchStatus:"idle",status:"error"};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...t.state}}};this.state=n(this.state),Mt.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),B(this,fn).notify({query:this,type:"updated",action:t})})},e5);function Xie(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:xO(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function Yie(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var Jn,t5,Qie=(t5=class extends Bd{constructor(t={}){super();me(this,Jn);this.config=t,ae(this,Jn,new Map)}build(t,n,r){const a=n.queryKey,o=n.queryHash??a1(a,n);let i=this.get(o);return i||(i=new Kie({client:t,queryKey:a,queryHash:o,options:t.defaultQueryOptions(n),state:r,defaultOptions:t.getQueryDefaults(a)}),this.add(i)),i}add(t){B(this,Jn).has(t.queryHash)||(B(this,Jn).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const n=B(this,Jn).get(t.queryHash);n&&(t.destroy(),n===t&&B(this,Jn).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){Mt.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return B(this,Jn).get(t)}getAll(){return[...B(this,Jn).values()]}find(t){const n={exact:!0,...t};return this.getAll().find(r=>G2(n,r))}findAll(t={}){const n=this.getAll();return Object.keys(t).length>0?n.filter(r=>G2(t,r)):n}notify(t){Mt.batch(()=>{this.listeners.forEach(n=>{n(t)})})}onFocus(){Mt.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){Mt.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},Jn=new WeakMap,t5),er,$t,lo,tr,Jr,n5,Zie=(n5=class extends PO{constructor(t){super();me(this,tr);me(this,er);me(this,$t);me(this,lo);this.mutationId=t.mutationId,ae(this,$t,t.mutationCache),ae(this,er,[]),this.state=t.state||Jie(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){B(this,er).includes(t)||(B(this,er).push(t),this.clearGcTimeout(),B(this,$t).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){ae(this,er,B(this,er).filter(n=>n!==t)),this.scheduleGc(),B(this,$t).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){B(this,er).length||(this.state.status==="pending"?this.scheduleGc():B(this,$t).remove(this))}continue(){var t;return((t=B(this,lo))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var o,i,s,l,u,p,c,f,d,h,m,g,v,y,x,P,w,S,O,_;const n=()=>{wt(this,tr,Jr).call(this,{type:"continue"})};ae(this,lo,bO({fn:()=>this.options.mutationFn?this.options.mutationFn(t):Promise.reject(new Error("No mutationFn found")),onFail:(C,j)=>{wt(this,tr,Jr).call(this,{type:"failed",failureCount:C,error:j})},onPause:()=>{wt(this,tr,Jr).call(this,{type:"pause"})},onContinue:n,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>B(this,$t).canRun(this)}));const r=this.state.status==="pending",a=!B(this,lo).canStart();try{if(r)n();else{wt(this,tr,Jr).call(this,{type:"pending",variables:t,isPaused:a}),await((i=(o=B(this,$t).config).onMutate)==null?void 0:i.call(o,t,this));const j=await((l=(s=this.options).onMutate)==null?void 0:l.call(s,t));j!==this.state.context&&wt(this,tr,Jr).call(this,{type:"pending",context:j,variables:t,isPaused:a})}const C=await B(this,lo).start();return await((p=(u=B(this,$t).config).onSuccess)==null?void 0:p.call(u,C,t,this.state.context,this)),await((f=(c=this.options).onSuccess)==null?void 0:f.call(c,C,t,this.state.context)),await((h=(d=B(this,$t).config).onSettled)==null?void 0:h.call(d,C,null,this.state.variables,this.state.context,this)),await((g=(m=this.options).onSettled)==null?void 0:g.call(m,C,null,t,this.state.context)),wt(this,tr,Jr).call(this,{type:"success",data:C}),C}catch(C){try{throw await((y=(v=B(this,$t).config).onError)==null?void 0:y.call(v,C,t,this.state.context,this)),await((P=(x=this.options).onError)==null?void 0:P.call(x,C,t,this.state.context)),await((S=(w=B(this,$t).config).onSettled)==null?void 0:S.call(w,void 0,C,this.state.variables,this.state.context,this)),await((_=(O=this.options).onSettled)==null?void 0:_.call(O,void 0,C,t,this.state.context)),C}finally{wt(this,tr,Jr).call(this,{type:"error",error:C})}}finally{B(this,$t).runNext(this)}}},er=new WeakMap,$t=new WeakMap,lo=new WeakMap,tr=new WeakSet,Jr=function(t){const n=r=>{switch(t.type){case"failed":return{...r,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...r,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:t.error,failureCount:r.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=n(this.state),Mt.batch(()=>{B(this,er).forEach(r=>{r.onMutationUpdate(t)}),B(this,$t).notify({mutation:this,type:"updated",action:t})})},n5);function Jie(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Or,jn,Ou,r5,ese=(r5=class extends Bd{constructor(t={}){super();me(this,Or);me(this,jn);me(this,Ou);this.config=t,ae(this,Or,new Set),ae(this,jn,new Map),ae(this,Ou,0)}build(t,n,r){const a=new Zie({mutationCache:this,mutationId:++zu(this,Ou)._,options:t.defaultMutationOptions(n),state:r});return this.add(a),a}add(t){B(this,Or).add(t);const n=kc(t);if(typeof n=="string"){const r=B(this,jn).get(n);r?r.push(t):B(this,jn).set(n,[t])}this.notify({type:"added",mutation:t})}remove(t){if(B(this,Or).delete(t)){const n=kc(t);if(typeof n=="string"){const r=B(this,jn).get(n);if(r)if(r.length>1){const a=r.indexOf(t);a!==-1&&r.splice(a,1)}else r[0]===t&&B(this,jn).delete(n)}}this.notify({type:"removed",mutation:t})}canRun(t){const n=kc(t);if(typeof n=="string"){const r=B(this,jn).get(n),a=r==null?void 0:r.find(o=>o.state.status==="pending");return!a||a===t}else return!0}runNext(t){var r;const n=kc(t);if(typeof n=="string"){const a=(r=B(this,jn).get(n))==null?void 0:r.find(o=>o!==t&&o.state.isPaused);return(a==null?void 0:a.continue())??Promise.resolve()}else return Promise.resolve()}clear(){Mt.batch(()=>{B(this,Or).forEach(t=>{this.notify({type:"removed",mutation:t})}),B(this,Or).clear(),B(this,jn).clear()})}getAll(){return Array.from(B(this,Or))}find(t){const n={exact:!0,...t};return this.getAll().find(r=>U2(n,r))}findAll(t={}){return this.getAll().filter(n=>U2(t,n))}notify(t){Mt.batch(()=>{this.listeners.forEach(n=>{n(t)})})}resumePausedMutations(){const t=this.getAll().filter(n=>n.state.isPaused);return Mt.batch(()=>Promise.all(t.map(n=>n.continue().catch(En))))}},Or=new WeakMap,jn=new WeakMap,Ou=new WeakMap,r5);function kc(e){var t;return(t=e.options.scope)==null?void 0:t.id}function V2(e){return{onFetch:(t,n)=>{var p,c,f,d,h;const r=t.options,a=(f=(c=(p=t.fetchOptions)==null?void 0:p.meta)==null?void 0:c.fetchMore)==null?void 0:f.direction,o=((d=t.state.data)==null?void 0:d.pages)||[],i=((h=t.state.data)==null?void 0:h.pageParams)||[];let s={pages:[],pageParams:[]},l=0;const u=async()=>{let m=!1;const g=x=>{Object.defineProperty(x,"signal",{enumerable:!0,get:()=>(t.signal.aborted?m=!0:t.signal.addEventListener("abort",()=>{m=!0}),t.signal)})},v=yO(t.options,t.fetchOptions),y=async(x,P,w)=>{if(m)return Promise.reject();if(P==null&&x.pages.length)return Promise.resolve(x);const O=(()=>{const E={client:t.client,queryKey:t.queryKey,pageParam:P,direction:w?"backward":"forward",meta:t.options.meta};return g(E),E})(),_=await v(O),{maxPages:C}=t.options,j=w?Bie:zie;return{pages:j(x.pages,_,C),pageParams:j(x.pageParams,P,C)}};if(a&&o.length){const x=a==="backward",P=x?tse:K2,w={pages:o,pageParams:i},S=P(r,w);s=await y(w,S,x)}else{const x=e??o.length;do{const P=l===0?i[0]??r.initialPageParam:K2(r,s);if(l>0&&P==null)break;s=await y(s,P),l++}while(l<x)}return s};t.options.persister?t.fetchFn=()=>{var m,g;return(g=(m=t.options).persister)==null?void 0:g.call(m,u,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n)}:t.fetchFn=u}}}function K2(e,{pages:t,pageParams:n}){const r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function tse(e,{pages:t,pageParams:n}){var r;return t.length>0?(r=e.getPreviousPageParam)==null?void 0:r.call(e,t[0],t,n[0],n):void 0}var We,la,ua,Si,Oi,ca,ki,_i,a5,nse=(a5=class{constructor(e={}){me(this,We);me(this,la);me(this,ua);me(this,Si);me(this,Oi);me(this,ca);me(this,ki);me(this,_i);ae(this,We,e.queryCache||new Qie),ae(this,la,e.mutationCache||new ese),ae(this,ua,e.defaultOptions||{}),ae(this,Si,new Map),ae(this,Oi,new Map),ae(this,ca,0)}mount(){zu(this,ca)._++,B(this,ca)===1&&(ae(this,ki,gO.subscribe(async e=>{e&&(await this.resumePausedMutations(),B(this,We).onFocus())})),ae(this,_i,Of.subscribe(async e=>{e&&(await this.resumePausedMutations(),B(this,We).onOnline())})))}unmount(){var e,t;zu(this,ca)._--,B(this,ca)===0&&((e=B(this,ki))==null||e.call(this),ae(this,ki,void 0),(t=B(this,_i))==null||t.call(this),ae(this,_i,void 0))}isFetching(e){return B(this,We).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return B(this,la).findAll({...e,status:"pending"}).length}getQueryData(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=B(this,We).get(t.queryHash))==null?void 0:n.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),n=B(this,We).build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(Lv(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return B(this,We).findAll(e).map(({queryKey:t,state:n})=>{const r=n.data;return[t,r]})}setQueryData(e,t,n){const r=this.defaultQueryOptions({queryKey:e}),a=B(this,We).get(r.queryHash),o=a==null?void 0:a.state.data,i=Mie(t,o);if(i!==void 0)return B(this,We).build(this,r).setData(i,{...n,manual:!0})}setQueriesData(e,t,n){return Mt.batch(()=>B(this,We).findAll(e).map(({queryKey:r})=>[r,this.setQueryData(r,t,n)]))}getQueryState(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=B(this,We).get(t.queryHash))==null?void 0:n.state}removeQueries(e){const t=B(this,We);Mt.batch(()=>{t.findAll(e).forEach(n=>{t.remove(n)})})}resetQueries(e,t){const n=B(this,We);return Mt.batch(()=>(n.findAll(e).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const n={revert:!0,...t},r=Mt.batch(()=>B(this,We).findAll(e).map(a=>a.cancel(n)));return Promise.all(r).then(En).catch(En)}invalidateQueries(e,t={}){return Mt.batch(()=>(B(this,We).findAll(e).forEach(n=>{n.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const n={...t,cancelRefetch:t.cancelRefetch??!0},r=Mt.batch(()=>B(this,We).findAll(e).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let o=a.fetch(void 0,n);return n.throwOnError||(o=o.catch(En)),a.state.fetchStatus==="paused"?Promise.resolve():o}));return Promise.all(r).then(En)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const n=B(this,We).build(this,t);return n.isStaleByTime(Lv(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(En).catch(En)}fetchInfiniteQuery(e){return e.behavior=V2(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(En).catch(En)}ensureInfiniteQueryData(e){return e.behavior=V2(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return Of.isOnline()?B(this,la).resumePausedMutations():Promise.resolve()}getQueryCache(){return B(this,We)}getMutationCache(){return B(this,la)}getDefaultOptions(){return B(this,ua)}setDefaultOptions(e){ae(this,ua,e)}setQueryDefaults(e,t){B(this,Si).set(bu(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...B(this,Si).values()],n={};return t.forEach(r=>{Pu(e,r.queryKey)&&Object.assign(n,r.defaultOptions)}),n}setMutationDefaults(e,t){B(this,Oi).set(bu(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...B(this,Oi).values()],n={};return t.forEach(r=>{Pu(e,r.mutationKey)&&Object.assign(n,r.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;const t={...B(this,ua).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=a1(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===o1&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...B(this,ua).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){B(this,We).clear(),B(this,la).clear()}},We=new WeakMap,la=new WeakMap,ua=new WeakMap,Si=new WeakMap,Oi=new WeakMap,ca=new WeakMap,ki=new WeakMap,_i=new WeakMap,a5),rse=k.createContext(void 0),ase=({client:e,children:t})=>(k.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),b.jsx(rse.Provider,{value:e,children:t})),[Gd,Ese]=fs("Tooltip",[Uf]),i1=Uf(),SO="TooltipProvider",ose=700,X2="tooltip.open",[ise,OO]=Gd(SO),kO=e=>{const{__scopeTooltip:t,delayDuration:n=ose,skipDelayDuration:r=300,disableHoverableContent:a=!1,children:o}=e,i=k.useRef(!0),s=k.useRef(!1),l=k.useRef(0);return k.useEffect(()=>{const u=l.current;return()=>window.clearTimeout(u)},[]),b.jsx(ise,{scope:t,isOpenDelayedRef:i,delayDuration:n,onOpen:k.useCallback(()=>{window.clearTimeout(l.current),i.current=!1},[]),onClose:k.useCallback(()=>{window.clearTimeout(l.current),l.current=window.setTimeout(()=>i.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:k.useCallback(u=>{s.current=u},[]),disableHoverableContent:a,children:o})};kO.displayName=SO;var _O="Tooltip",[Tse,Ud]=Gd(_O),zv="TooltipTrigger",sse=k.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,a=Ud(zv,n),o=OO(zv,n),i=i1(n),s=k.useRef(null),l=Ye(t,s,a.onTriggerChange),u=k.useRef(!1),p=k.useRef(!1),c=k.useCallback(()=>u.current=!1,[]);return k.useEffect(()=>()=>document.removeEventListener("pointerup",c),[c]),b.jsx(q6,{asChild:!0,...i,children:b.jsx(Ee.button,{"aria-describedby":a.open?a.contentId:void 0,"data-state":a.stateAttribute,...r,ref:l,onPointerMove:fe(e.onPointerMove,f=>{f.pointerType!=="touch"&&!p.current&&!o.isPointerInTransitRef.current&&(a.onTriggerEnter(),p.current=!0)}),onPointerLeave:fe(e.onPointerLeave,()=>{a.onTriggerLeave(),p.current=!1}),onPointerDown:fe(e.onPointerDown,()=>{a.open&&a.onClose(),u.current=!0,document.addEventListener("pointerup",c,{once:!0})}),onFocus:fe(e.onFocus,()=>{u.current||a.onOpen()}),onBlur:fe(e.onBlur,a.onClose),onClick:fe(e.onClick,a.onClose)})})});sse.displayName=zv;var lse="TooltipPortal",[jse,use]=Gd(lse,{forceMount:void 0}),ss="TooltipContent",CO=k.forwardRef((e,t)=>{const n=use(ss,e.__scopeTooltip),{forceMount:r=n.forceMount,side:a="top",...o}=e,i=Ud(ss,e.__scopeTooltip);return b.jsx(t1,{present:r||i.open,children:i.disableHoverableContent?b.jsx(AO,{side:a,...o,ref:t}):b.jsx(cse,{side:a,...o,ref:t})})}),cse=k.forwardRef((e,t)=>{const n=Ud(ss,e.__scopeTooltip),r=OO(ss,e.__scopeTooltip),a=k.useRef(null),o=Ye(t,a),[i,s]=k.useState(null),{trigger:l,onClose:u}=n,p=a.current,{onPointerInTransitChange:c}=r,f=k.useCallback(()=>{s(null),c(!1)},[c]),d=k.useCallback((h,m)=>{const g=h.currentTarget,v={x:h.clientX,y:h.clientY},y=hse(v,g.getBoundingClientRect()),x=vse(v,y),P=yse(m.getBoundingClientRect()),w=xse([...x,...P]);s(w),c(!0)},[c]);return k.useEffect(()=>()=>f(),[f]),k.useEffect(()=>{if(l&&p){const h=g=>d(g,p),m=g=>d(g,l);return l.addEventListener("pointerleave",h),p.addEventListener("pointerleave",m),()=>{l.removeEventListener("pointerleave",h),p.removeEventListener("pointerleave",m)}}},[l,p,d,f]),k.useEffect(()=>{if(i){const h=m=>{const g=m.target,v={x:m.clientX,y:m.clientY},y=(l==null?void 0:l.contains(g))||(p==null?void 0:p.contains(g)),x=!gse(v,i);y?f():x&&(f(),u())};return document.addEventListener("pointermove",h),()=>document.removeEventListener("pointermove",h)}},[l,p,i,u,f]),b.jsx(AO,{...e,ref:o})}),[pse,fse]=Gd(_O,{isInside:!1}),dse=uC("TooltipContent"),AO=k.forwardRef((e,t)=>{const{__scopeTooltip:n,children:r,"aria-label":a,onEscapeKeyDown:o,onPointerDownOutside:i,...s}=e,l=Ud(ss,n),u=i1(n),{onClose:p}=l;return k.useEffect(()=>(document.addEventListener(X2,p),()=>document.removeEventListener(X2,p)),[p]),k.useEffect(()=>{if(l.trigger){const c=f=>{const d=f.target;d!=null&&d.contains(l.trigger)&&p()};return window.addEventListener("scroll",c,{capture:!0}),()=>window.removeEventListener("scroll",c,{capture:!0})}},[l.trigger,p]),b.jsx(Iy,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:i,onFocusOutside:c=>c.preventDefault(),onDismiss:p,children:b.jsxs(V6,{"data-state":l.stateAttribute,...u,...s,ref:t,style:{...s.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[b.jsx(dse,{children:r}),b.jsx(pse,{scope:n,isInside:!0,children:b.jsx(iE,{id:l.contentId,role:"tooltip",children:a||r})})]})})});CO.displayName=ss;var EO="TooltipArrow",mse=k.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,a=i1(n);return fse(EO,n).isInside?null:b.jsx(K6,{...a,...r,ref:t})});mse.displayName=EO;function hse(e,t){const n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),a=Math.abs(t.right-e.x),o=Math.abs(t.left-e.x);switch(Math.min(n,r,a,o)){case o:return"left";case a:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}function vse(e,t,n=5){const r=[];switch(t){case"top":r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case"bottom":r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case"left":r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case"right":r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function yse(e){const{top:t,right:n,bottom:r,left:a}=e;return[{x:a,y:t},{x:n,y:t},{x:n,y:r},{x:a,y:r}]}function gse(e,t){const{x:n,y:r}=e;let a=!1;for(let o=0,i=t.length-1;o<t.length;i=o++){const s=t[o],l=t[i],u=s.x,p=s.y,c=l.x,f=l.y;p>r!=f>r&&n<(c-u)*(r-p)/(f-p)+u&&(a=!a)}return a}function xse(e){const t=e.slice();return t.sort((n,r)=>n.x<r.x?-1:n.x>r.x?1:n.y<r.y?-1:n.y>r.y?1:0),wse(t)}function wse(e){if(e.length<=1)return e.slice();const t=[];for(let r=0;r<e.length;r++){const a=e[r];for(;t.length>=2;){const o=t[t.length-1],i=t[t.length-2];if((o.x-i.x)*(a.y-i.y)>=(o.y-i.y)*(a.x-i.x))t.pop();else break}t.push(a)}t.pop();const n=[];for(let r=e.length-1;r>=0;r--){const a=e[r];for(;n.length>=2;){const o=n[n.length-1],i=n[n.length-2];if((o.x-i.x)*(a.y-i.y)>=(o.y-i.y)*(a.x-i.x))n.pop();else break}n.push(a)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var bse=kO,TO=CO;const Pse=bse,Sse=k.forwardRef(({className:e,sideOffset:t=4,...n},r)=>b.jsx(TO,{ref:r,sideOffset:t,className:Oe("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...n}));Sse.displayName=TO.displayName;const Ose=e=>{const t=k.useRef(null),n=k.useRef(null),r=k.useRef(null);return k.useEffect(()=>{if(t.current){try{const a=t.current.attachShadow({mode:"open"});n.current=a;const o=document.createElement("div");o.id="shadow-root",o.className="benchmark-dashboard",a.appendChild(o),hO.getAllCSS().then(i=>{const s=document.createElement("style");s.textContent=i,a.insertBefore(s,o);const l=Gc.createRoot(o);r.current=l,l.render(b.jsx(A.StrictMode,{children:b.jsx(ase,{client:new nse,children:b.jsx(Pse,{children:b.jsx(Nie,{...e})})})}))}).catch(i=>{console.error("Failed to inject CSS into Shadow DOM:",i)})}catch(a){console.error("Failed to create Shadow DOM:",a)}return()=>{r.current&&r.current.unmount()}}},[]),b.jsx("div",{ref:t,style:{width:"100%",minHeight:"400px"}})},kse=`*, ::before, ::after {
   --tw-border-spacing-x: 0;
   --tw-border-spacing-y: 0;
   --tw-translate-x: 0;
@@ -4425,4 +4425,4 @@ body {
 [data-side=right] .\\[\\[data-side\\=right\\]_\\&\\]\\:cursor-e-resize {
   cursor: e-resize;
 }
-`;window.__BENCHMARK_CSS__=cse;function s1(){try{if(typeof window>"u")return;const e=document.querySelectorAll('[data-react-component="benchmark-dashboard"]');if(e.length===0)return;e.forEach((t,n)=>{var r;try{const a=t;if(a.dataset.reactInitialized==="true")return;const o={apiBase:a.dataset.apiBase,initialVersion:a.dataset.version,theme:a.dataset.theme||"light",containerClassName:a.dataset.containerClass||"",containerId:`benchmark-dashboard-${n}`,features:{header:a.dataset.showHeader==="true",versionSelector:a.dataset.showVersionSelector!=="false",summaryCards:a.dataset.showSummaryCards!=="false",tabs:((r=a.dataset.tabs)==null?void 0:r.split(",").map(s=>s.trim()))||["overview","latency","resources"]}};Gc.createRoot(a).render(b.jsx(C.StrictMode,{children:b.jsx(use,{...o})})),a.dataset.reactInitialized="true"}catch(a){console.error(`Error initializing benchmark dashboard ${n+1}:`,a)}})}catch(e){console.error("Error in benchmark dashboard initialization:",e)}}function K2(){setTimeout(()=>{s1()},100)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",K2):K2();window.addEventListener("load",()=>{setTimeout(s1,200)});window.initializeBenchmarkDashboardShadow=s1;
+`;window.__BENCHMARK_CSS__=kse;function s1(){try{if(typeof window>"u")return;const e=document.querySelectorAll('[data-react-component="benchmark-dashboard"]');if(e.length===0)return;e.forEach((t,n)=>{var r;try{const a=t;if(a.dataset.reactInitialized==="true")return;const o={apiBase:a.dataset.apiBase,initialVersion:a.dataset.version,theme:a.dataset.theme||"light",containerClassName:a.dataset.containerClass||"",containerId:`benchmark-dashboard-${n}`,features:{header:a.dataset.showHeader==="true",versionSelector:a.dataset.showVersionSelector!=="false",summaryCards:a.dataset.showSummaryCards!=="false",tabs:((r=a.dataset.tabs)==null?void 0:r.split(",").map(s=>s.trim()))||["overview","latency","resources"]}};Gc.createRoot(a).render(b.jsx(A.StrictMode,{children:b.jsx(Ose,{...o})})),a.dataset.reactInitialized="true"}catch(a){console.error(`Error initializing benchmark dashboard ${n+1}:`,a)}})}catch(e){console.error("Error in benchmark dashboard initialization:",e)}}function Y2(){setTimeout(()=>{s1()},100)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Y2):Y2();window.addEventListener("load",()=>{setTimeout(s1,200)});window.initializeBenchmarkDashboardShadow=s1;
diff --git a/site/static/logos/keda.svg b/site/static/logos/keda.svg
new file mode 100644
index 000000000..2dba5f8fd
--- /dev/null
+++ b/site/static/logos/keda.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Warstwa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 906.2 906.2" style="enable-background:new 0 0 906.2 906.2;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#326DE6;}
+	.st1{fill:#FFFFFF;}
+</style>
+<title>keda-word</title>
+<g id="Warstwa_1-2">
+	<g id="Wordmark">
+		<path id="KEDA" class="st0" d="M207.5,492.8l-47.2-84.5L146,422.8v70h-37V308h37v59.7l54.1-59.7H250l-64.7,72.3l66.3,112.5H207.5z
+			 M412.9,308v37H289.7v-37H412.9z M289.7,416.2v-37h102.1v37H289.7z M289.7,493.1v-37h122.5v37H289.7z M450.9,308h52.3
+			c24.5-0.2,48,9.6,65.2,26.9c8.5,8.4,15.3,18.5,19.8,29.6c9.9,23,9.9,49.1,0,72.1c-4.5,11.1-11.2,21-19.8,29.3
+			c-17.3,17.3-40.7,27.1-65.2,27.2H466v-0.3h-15.1V308z M487.9,456.1h15.3c30.7-0.4,55.2-25.6,54.8-56.3
+			c-0.4-30.1-24.7-54.4-54.8-54.8h-15.3V456.1z M698.9,308h10.8l87.4,185.1h-41l-52.8-112.4l-57.3,112.4h-41.5L698.9,308z"/>
+
+			<image style="overflow:visible;opacity:0.95;enable-background:new    ;" width="126" height="231" xlink:href="A04350A68EF731DF.png"  transform="matrix(0.9921 0 0 0.9921 625.9449 369.0308)">
+		</image>
+		<polygon class="st1" points="723.6,485.3 733.6,467.4 694.8,467.4 706.4,387.1 705.8,386 644.6,497 644.6,497 642.7,500.3
+			682.1,499.9 671.6,578.9 671.9,580 719.3,493 719.3,493 719.3,493 		"/>
+		<path id="Combined-Shape" class="st0" d="M719.3,493.1l14.1-25.6h-38.7l12.1-83.3l-60.1,108.9h-13.3l69.8-131l69.8,131H719.3z"/>
+	</g>
+</g>
+</svg>
diff --git a/site/tools/benchmark-dashboard/src/components/BenchmarkTakeaways.tsx b/site/tools/benchmark-dashboard/src/components/BenchmarkTakeaways.tsx
index 14645ac50..8686fc317 100644
--- a/site/tools/benchmark-dashboard/src/components/BenchmarkTakeaways.tsx
+++ b/site/tools/benchmark-dashboard/src/components/BenchmarkTakeaways.tsx
@@ -26,7 +26,7 @@ interface BenchmarkTakeawaysProps {
 }
 
 export const BenchmarkTakeaways: React.FC<BenchmarkTakeawaysProps> = ({
-  version = '1.4.1'
+  version = '1.4.2'
 }) => {
   const performanceInsights = [
     {
diff --git a/site/tools/benchmark-dashboard/src/components/LatencyTab.tsx b/site/tools/benchmark-dashboard/src/components/LatencyTab.tsx
index 483f1a731..f486b5a88 100644
--- a/site/tools/benchmark-dashboard/src/components/LatencyTab.tsx
+++ b/site/tools/benchmark-dashboard/src/components/LatencyTab.tsx
@@ -246,30 +246,27 @@ const LatencyTab = ({ latencyPercentileComparison, benchmarkResults }: LatencyTa
                     />
                     <Area
                       dataKey="p99"
-                      stackId="latency"
                       type="monotone"
                       fill="#4f46e5"
-                      fillOpacity={0.3}
+                      fillOpacity={0.2}
                       stroke="#4f46e5"
-                      strokeWidth={1}
+                      strokeWidth={2}
                     />
                     <Area
                       dataKey="p95"
-                      stackId="latency"
                       type="monotone"
                       fill="#6366f1"
-                      fillOpacity={0.4}
+                      fillOpacity={0.3}
                       stroke="#6366f1"
                       strokeWidth={2}
                     />
                     <Area
                       dataKey="p50"
-                      stackId="latency"
                       type="monotone"
                       fill="#8b5cf6"
-                      fillOpacity={0.6}
+                      fillOpacity={0.4}
                       stroke="#8b5cf6"
-                      strokeWidth={3}
+                      strokeWidth={2}
                     />
                   </AreaChart>
                 </ChartContainer>
diff --git a/site/tools/benchmark-dashboard/src/components/OverviewTab.tsx b/site/tools/benchmark-dashboard/src/components/OverviewTab.tsx
index 10c393918..89ef48ea6 100644
--- a/site/tools/benchmark-dashboard/src/components/OverviewTab.tsx
+++ b/site/tools/benchmark-dashboard/src/components/OverviewTab.tsx
@@ -287,17 +287,19 @@ const OverviewTab = ({
                     />
                     <Area
                       dataKey="gateway"
-                      stackId="memory"
                       type="monotone"
                       fill="#a855f7"
+                      fillOpacity={0.4}
                       stroke="#a855f7"
+                      strokeWidth={2}
                     />
                     <Area
                       dataKey="proxy"
-                      stackId="memory"
                       type="monotone"
                       fill="#4f46e5"
+                      fillOpacity={0.4}
                       stroke="#4f46e5"
+                      strokeWidth={2}
                     />
                   </AreaChart>
                 </ChartContainer>
diff --git a/site/tools/benchmark-dashboard/src/components/ResourcesTab.tsx b/site/tools/benchmark-dashboard/src/components/ResourcesTab.tsx
index 60230f640..a4021e0d7 100644
--- a/site/tools/benchmark-dashboard/src/components/ResourcesTab.tsx
+++ b/site/tools/benchmark-dashboard/src/components/ResourcesTab.tsx
@@ -315,19 +315,17 @@ const ResourcesTab = ({ resourceTrends, benchmarkResults }: ResourcesTabProps) =
                   />
                   <Area
                     dataKey="gateway"
-                    stackId="memory"
                     type="monotone"
                     fill="#a855f7"
-                    fillOpacity={0.6}
+                    fillOpacity={0.4}
                     stroke="#a855f7"
                     strokeWidth={2}
                   />
                   <Area
                     dataKey="proxy"
-                    stackId="memory"
                     type="monotone"
                     fill="#4f46e5"
-                    fillOpacity={0.6}
+                    fillOpacity={0.4}
                     stroke="#4f46e5"
                     strokeWidth={2}
                   />
diff --git a/site/tools/benchmark-dashboard/src/data/index.ts b/site/tools/benchmark-dashboard/src/data/index.ts
index 44e91d302..d749252fa 100644
--- a/site/tools/benchmark-dashboard/src/data/index.ts
+++ b/site/tools/benchmark-dashboard/src/data/index.ts
@@ -6,9 +6,10 @@ import {
   LatencyComparison,
   ResourceComparison
 } from './types';
-import { benchmarkData as v133TestSuite } from './versions/v1.3.3';
-import { benchmarkData as v140TestSuite } from './versions/v1.4.0';
+import { benchmarkData as v142TestSuite } from './versions/v1.4.2';
 import { benchmarkData as v141TestSuite } from './versions/v1.4.1';
+import { benchmarkData as v140TestSuite } from './versions/v1.4.0';
+import { benchmarkData as v133TestSuite } from './versions/v1.3.3';
 import { benchmarkData as v132TestSuite } from './versions/v1.3.2';
 import { benchmarkData as v131TestSuite } from './versions/v1.3.1';
 import { benchmarkData as v130TestSuite } from './versions/v1.3.0';
@@ -29,6 +30,7 @@ import { benchmarkData as v110TestSuite } from './versions/v1.1.0';
 
 // Import all version data
 export const allTestSuites: TestSuite[] = [
+  v142TestSuite,
   v141TestSuite,
   v140TestSuite,
   v133TestSuite,
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.4.2.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.4.2.ts
new file mode 100644
index 000000000..50d3f3bcc
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.4.2.ts
@@ -0,0 +1,586 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.4.2
+// Generated on 2025-07-18T02:23:12.475Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.4.2",
+    "runId": "1.4.2-1752805392474",
+    "date": "2025-07-18T02:23:12.474Z",
+    "environment": "production",
+    "description": "Benchmark results for version 1.4.2",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scaling up httproutes to 10 with 2 routes per hostname",
+      "routes": 10,
+      "routesPerHostname": 2,
+      "phase": "scaling-up",
+      "throughput": 5153.92,
+      "totalRequests": 154618,
+      "latency": {
+        "min": 383,
+        "mean": 7923,
+        "max": 80375,
+        "pstdev": 13254,
+        "percentiles": {
+          "p50": 3722,
+          "p75": 6072,
+          "p80": 6915,
+          "p90": 11685,
+          "p95": 49872,
+          "p99": 56281,
+          "p999": 62722
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 131.64,
+            "max": 158.27,
+            "mean": 153.65
+          },
+          "cpu": {
+            "min": 0.13,
+            "max": 1,
+            "mean": 0.43
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 0,
+            "max": 27.04,
+            "mean": 24.5
+          },
+          "cpu": {
+            "min": 0,
+            "max": 92.27,
+            "mean": 13.11
+          }
+        }
+      },
+      "poolOverflow": 357,
+      "upstreamConnections": 43
+    },
+    {
+      "testName": "scaling up httproutes to 50 with 10 routes per hostname",
+      "routes": 50,
+      "routesPerHostname": 10,
+      "phase": "scaling-up",
+      "throughput": 5214.96,
+      "totalRequests": 156456,
+      "latency": {
+        "min": 392,
+        "mean": 6917,
+        "max": 94703,
+        "pstdev": 12289,
+        "percentiles": {
+          "p50": 3265,
+          "p75": 5168,
+          "p80": 5850,
+          "p90": 9014,
+          "p95": 48109,
+          "p99": 54501,
+          "p999": 61138
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 151.75,
+            "max": 162.37,
+            "mean": 156.16
+          },
+          "cpu": {
+            "min": 0.27,
+            "max": 4.07,
+            "mean": 0.93
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 26.85,
+            "max": 33.23,
+            "mean": 31.93
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.8,
+            "mean": 2.75
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling up httproutes to 100 with 20 routes per hostname",
+      "routes": 100,
+      "routesPerHostname": 20,
+      "phase": "scaling-up",
+      "throughput": 5286.96,
+      "totalRequests": 158609,
+      "latency": {
+        "min": 368,
+        "mean": 7734,
+        "max": 92332,
+        "pstdev": 12933,
+        "percentiles": {
+          "p50": 3787,
+          "p75": 5897,
+          "p80": 6637,
+          "p90": 10518,
+          "p95": 49209,
+          "p99": 55494,
+          "p999": 62668
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 154.29,
+            "max": 162.45,
+            "mean": 160.12
+          },
+          "cpu": {
+            "min": 0.4,
+            "max": 8.13,
+            "mean": 1.15
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 33.08,
+            "max": 37.43,
+            "mean": 36.96
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.94,
+            "mean": 12.84
+          }
+        }
+      },
+      "poolOverflow": 357,
+      "upstreamConnections": 43
+    },
+    {
+      "testName": "scaling up httproutes to 300 with 60 routes per hostname",
+      "routes": 300,
+      "routesPerHostname": 60,
+      "phase": "scaling-up",
+      "throughput": 5071.92,
+      "totalRequests": 152158,
+      "latency": {
+        "min": 367,
+        "mean": 7108,
+        "max": 96673,
+        "pstdev": 12611,
+        "percentiles": {
+          "p50": 3259,
+          "p75": 5273,
+          "p80": 5983,
+          "p90": 9540,
+          "p95": 48895,
+          "p99": 55816,
+          "p999": 64583
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 178.72,
+            "max": 189.43,
+            "mean": 185.02
+          },
+          "cpu": {
+            "min": 0.53,
+            "max": 49.47,
+            "mean": 4.51
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 53.3,
+            "max": 57.54,
+            "mean": 57.04
+          },
+          "cpu": {
+            "min": 0,
+            "max": 100.16,
+            "mean": 15
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling up httproutes to 500 with 100 routes per hostname",
+      "routes": 500,
+      "routesPerHostname": 100,
+      "phase": "scaling-up",
+      "throughput": 4987.92,
+      "totalRequests": 149640,
+      "latency": {
+        "min": 394,
+        "mean": 7071,
+        "max": 108810,
+        "pstdev": 12666,
+        "percentiles": {
+          "p50": 3283,
+          "p75": 5167,
+          "p80": 5821,
+          "p90": 9217,
+          "p95": 48912,
+          "p99": 56031,
+          "p999": 68722
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 187.59,
+            "max": 203.43,
+            "mean": 199.65
+          },
+          "cpu": {
+            "min": 0.27,
+            "max": 48.25,
+            "mean": 1.88
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 73.41,
+            "max": 79.6,
+            "mean": 79.35
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.91,
+            "mean": 11.81
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scaling up httproutes to 1000 with 200 routes per hostname",
+      "routes": 1000,
+      "routesPerHostname": 200,
+      "phase": "scaling-up",
+      "throughput": 4945.69,
+      "totalRequests": 148373,
+      "latency": {
+        "min": 411,
+        "mean": 7306,
+        "max": 101023,
+        "pstdev": 12990,
+        "percentiles": {
+          "p50": 3249,
+          "p75": 5440,
+          "p80": 6223,
+          "p90": 10246,
+          "p95": 49207,
+          "p99": 57444,
+          "p999": 69570
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 231.85,
+            "max": 243.1,
+            "mean": 237.75
+          },
+          "cpu": {
+            "min": 0.2,
+            "max": 1.2,
+            "mean": 0.84
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.84,
+            "max": 130.36,
+            "mean": 129.96
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.89,
+            "mean": 11.78
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling down httproutes to 10 with 2 routes per hostname",
+      "routes": 10,
+      "routesPerHostname": 2,
+      "phase": "scaling-down",
+      "throughput": 5200.02,
+      "totalRequests": 156013,
+      "latency": {
+        "min": 397,
+        "mean": 7832,
+        "max": 75223,
+        "pstdev": 13154,
+        "percentiles": {
+          "p50": 3651,
+          "p75": 5953,
+          "p80": 6758,
+          "p90": 11656,
+          "p95": 49915,
+          "p99": 56150,
+          "p999": 62173
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 262.52,
+            "max": 266.5,
+            "mean": 263.99
+          },
+          "cpu": {
+            "min": 0.67,
+            "max": 3.53,
+            "mean": 1.15
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 123.49,
+            "max": 123.65,
+            "mean": 123.54
+          },
+          "cpu": {
+            "min": 0,
+            "max": 100.22,
+            "mean": 7.55
+          }
+        }
+      },
+      "poolOverflow": 357,
+      "upstreamConnections": 43
+    },
+    {
+      "testName": "scaling down httproutes to 50 with 10 routes per hostname",
+      "routes": 50,
+      "routesPerHostname": 10,
+      "phase": "scaling-down",
+      "throughput": 5116.68,
+      "totalRequests": 153503,
+      "latency": {
+        "min": 404,
+        "mean": 7069,
+        "max": 71688,
+        "pstdev": 12498,
+        "percentiles": {
+          "p50": 3313,
+          "p75": 5203,
+          "p80": 5888,
+          "p90": 9173,
+          "p95": 48934,
+          "p99": 55580,
+          "p999": 61552
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 266.25,
+            "max": 277.75,
+            "mean": 267.54
+          },
+          "cpu": {
+            "min": 0.67,
+            "max": 7.13,
+            "mean": 1.51
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 123.47,
+            "max": 123.67,
+            "mean": 123.53
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.78,
+            "mean": 4.47
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling down httproutes to 100 with 20 routes per hostname",
+      "routes": 100,
+      "routesPerHostname": 20,
+      "phase": "scaling-down",
+      "throughput": 5153.5,
+      "totalRequests": 154605,
+      "latency": {
+        "min": 376,
+        "mean": 6989,
+        "max": 80056,
+        "pstdev": 12394,
+        "percentiles": {
+          "p50": 3284,
+          "p75": 5189,
+          "p80": 5871,
+          "p90": 9047,
+          "p95": 48644,
+          "p99": 55019,
+          "p999": 61106
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 170.85,
+            "max": 277.75,
+            "mean": 210.44
+          },
+          "cpu": {
+            "min": 0.67,
+            "max": 68.27,
+            "mean": 7.39
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 123.46,
+            "max": 123.75,
+            "mean": 123.55
+          },
+          "cpu": {
+            "min": 0,
+            "max": 100.02,
+            "mean": 16.06
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling down httproutes to 300 with 60 routes per hostname",
+      "routes": 300,
+      "routesPerHostname": 60,
+      "phase": "scaling-down",
+      "throughput": 5125.52,
+      "totalRequests": 153766,
+      "latency": {
+        "min": 369,
+        "mean": 6827,
+        "max": 85323,
+        "pstdev": 12196,
+        "percentiles": {
+          "p50": 3193,
+          "p75": 5036,
+          "p80": 5699,
+          "p90": 8862,
+          "p95": 47597,
+          "p99": 54747,
+          "p999": 64284
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 181.68,
+            "max": 196.62,
+            "mean": 192.08
+          },
+          "cpu": {
+            "min": 0.4,
+            "max": 72.6,
+            "mean": 3.62
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.86,
+            "max": 130.06,
+            "mean": 129.95
+          },
+          "cpu": {
+            "min": 0,
+            "max": 100.07,
+            "mean": 13.11
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scaling down httproutes to 500 with 100 routes per hostname",
+      "routes": 500,
+      "routesPerHostname": 100,
+      "phase": "scaling-down",
+      "throughput": 5130.15,
+      "totalRequests": 153916,
+      "latency": {
+        "min": 389,
+        "mean": 7004,
+        "max": 103731,
+        "pstdev": 12505,
+        "percentiles": {
+          "p50": 3244,
+          "p75": 5247,
+          "p80": 5944,
+          "p90": 9184,
+          "p95": 48279,
+          "p99": 55420,
+          "p999": 66549
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 205.04,
+            "max": 208.2,
+            "mean": 206.96
+          },
+          "cpu": {
+            "min": 0.33,
+            "max": 54.27,
+            "mean": 2.52
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.85,
+            "max": 130.02,
+            "mean": 129.9
+          },
+          "cpu": {
+            "min": 0,
+            "max": 91.79,
+            "mean": 22.69
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/tools/hack/manage-mac-net-connect.sh b/tools/hack/manage-mac-net-connect.sh
new file mode 100755
index 000000000..cc3d1aa32
--- /dev/null
+++ b/tools/hack/manage-mac-net-connect.sh
@@ -0,0 +1,53 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+MODE="${1:-setup}"  # setup | cleanup
+DOCKER_MAC_NET_CONNECT=${DOCKER_MAC_NET_CONNECT:-}
+HOMEBREW_GOPROXY=${HOMEBREW_GOPROXY:-}
+
+is_macos() {
+    [[ "$(uname -s)" == "Darwin" ]]
+}
+
+is_installed() {
+    [[ "$(brew list --formula | grep -Fx "docker-mac-net-connect")" == "docker-mac-net-connect" ]]
+}
+
+is_running() {
+    brew services info docker-mac-net-connect --json 2>/dev/null | \
+        jq -e '.[] | .user != null' >/dev/null
+}
+
+setup() {
+    if ! is_macos || [[ "$DOCKER_MAC_NET_CONNECT" == "false" ]]; then
+        return
+    fi
+
+    if is_installed && is_running; then
+        echo "Docker Mac Net Connect is already installed and running."
+        return
+    fi
+
+    echo "Docker Mac Net Connect is recommended on macOS to ensure Docker networking works properly."
+    read -rp "Install and start Docker Mac Net Connect? [y/N]: " input
+    case "$(echo "$input" | tr '[:upper:]' '[:lower:]')" in
+        y|yes) ;;
+        *) return ;;
+    esac
+
+    if ! is_installed; then
+        [ -n "$HOMEBREW_GOPROXY" ] && export HOMEBREW_GOPROXY="$HOMEBREW_GOPROXY"
+        brew install chipmk/tap/docker-mac-net-connect
+    fi
+
+    if ! is_running; then
+        sudo brew services start chipmk/tap/docker-mac-net-connect
+        sleep 5
+    fi
+}
+
+case "$MODE" in
+    setup) setup ;;
+    cleanup) cleanup ;;
+    *) echo "Usage: $0 [setup]"; exit 1 ;;
+esac
diff --git a/tools/helm-docs/readme.gateway-addons-helm.gotmpl b/tools/helm-docs/readme.gateway-addons-helm.gotmpl
index b12c57079..54d78e42e 100644
--- a/tools/helm-docs/readme.gateway-addons-helm.gotmpl
+++ b/tools/helm-docs/readme.gateway-addons-helm.gotmpl
@@ -25,7 +25,7 @@ The Envoy Gateway must be installed before installing this chart.
 Once Helm has been set up correctly, install the chart from dockerhub:
 
 ``` shell
-    helm install eg-addons oci://docker.io/envoyproxy/gateway-addons-helm --version v0.0.0-latest -n monitoring --create-namespace
+helm install eg-addons oci://docker.io/envoyproxy/gateway-addons-helm --version v0.0.0-latest -n monitoring --create-namespace
 ```
 
 You can find all helm chart release in [Dockerhub](https://hub.docker.com/r/envoyproxy/gateway-addons-helm/tags)
@@ -33,7 +33,7 @@ You can find all helm chart release in [Dockerhub](https://hub.docker.com/r/envo
 To uninstall the chart:
 
 ``` shell
-    helm uninstall eg-addons -n monitoring
+helm uninstall eg-addons -n monitoring
 ```
 
 {{ template "chart.valuesSection" . }}
diff --git a/tools/helm-docs/readme.gateway-crds-helm.gotmpl b/tools/helm-docs/readme.gateway-crds-helm.gotmpl
index 603c905b4..39d446663 100644
--- a/tools/helm-docs/readme.gateway-crds-helm.gotmpl
+++ b/tools/helm-docs/readme.gateway-crds-helm.gotmpl
@@ -26,15 +26,20 @@ If you do, make sure that you don't install the CRDs again when installing the E
 Once Helm has been set up correctly, install the chart from dockerhub:
 
 ``` shell
-    helm install gateway-crds oci://docker.io/envoyproxy/gateway-crds-helm --version v0.0.0-latest -n envoy-gateway-system --create-namespace
+helm template eg-crds oci://docker.io/envoyproxy/gateway-crds-helm \
+    --version v0.0.0-latest | kubectl apply --server-side -f -
 ```
 
+**Note**: We're using `helm template` piped into `kubectl apply` instead of `helm install` due to a [known Helm limitation](https://github.com/helm/helm/pull/12277)
+related to large CRDs in the `templates/` directory.
+
 You can find all helm chart release in [Dockerhub](https://hub.docker.com/r/envoyproxy/gateway-crds-helm/tags)
 
 To uninstall the chart:
 
 ``` shell
-    helm uninstall gateway-crds -n envoy-gateway-system
+helm template eg-crds oci://docker.io/envoyproxy/gateway-crds-helm \
+    --version v0.0.0-latest | kubectl delete --server-side -f -
 ```
 
 {{ template "chart.valuesSection" . }}
diff --git a/tools/helm-docs/readme.gateway-helm.gotmpl b/tools/helm-docs/readme.gateway-helm.gotmpl
index 6fcd19197..bc631c9b8 100644
--- a/tools/helm-docs/readme.gateway-helm.gotmpl
+++ b/tools/helm-docs/readme.gateway-helm.gotmpl
@@ -23,7 +23,7 @@ Please refer to Helm's [documentation](https://helm.sh/docs) to get started.
 Once Helm has been set up correctly, install the chart from dockerhub:
 
 ``` shell
-    helm install eg oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --create-namespace
+helm install eg oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --create-namespace
 ```
 You can find all helm chart release in [Dockerhub](https://hub.docker.com/r/envoyproxy/gateway-helm/tags)
 
@@ -34,7 +34,7 @@ You can also install the helm chart from the source code:
 To install the eg chart along with Gateway API CRDs and Envoy Gateway CRDs:
 
 ``` shell
-    make kube-deploy TAG=latest
+make kube-deploy TAG=latest
 ```
 
 ### Skip install CRDs
@@ -42,13 +42,13 @@ To install the eg chart along with Gateway API CRDs and Envoy Gateway CRDs:
 You can install the eg chart along without Gateway API CRDs and Envoy Gateway CRDs, make sure CRDs exist in Cluster first if you want to skip to install them, otherwise EG may fail to start:
 
 ``` shell
-    helm install eg --create-namespace oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --skip-crds
+helm install eg --create-namespace oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --skip-crds
 ```
 
 To uninstall the chart:
 
 ``` shell
-    helm uninstall eg -n envoy-gateway-system
+helm uninstall eg -n envoy-gateway-system
 ```
 
 {{ template "chart.valuesSection" . }}
diff --git a/tools/make/docs.mk b/tools/make/docs.mk
index f2a1909fc..a78f05ac1 100644
--- a/tools/make/docs.mk
+++ b/tools/make/docs.mk
@@ -174,7 +174,7 @@ docs-release-gen:
 .PHONY: docs-check-links
 docs-check-links: # Check for broken links in the docs
 	@$(LOG_TARGET)
-	linkinator site/public/ -r --concurrency 25 --skip $(LINKINATOR_IGNORE) --verbosity error
+	linkinator site/public/ -r --concurrency 25 --retry-errors --retry --retry-errors-jitter --retry-errors-count 5 --skip $(LINKINATOR_IGNORE) --verbosity error
 
 docs-markdown-lint:
 	markdownlint -c .github/markdown_lint_config.json site/content/*
diff --git a/tools/make/kube.mk b/tools/make/kube.mk
index 74bcf5b55..2cd3aacd5 100644
--- a/tools/make/kube.mk
+++ b/tools/make/kube.mk
@@ -34,6 +34,9 @@ E2E_TIMEOUT ?= 20m
 E2E_REDIRECT ?=
 E2E_TEST_ARGS ?= -v -tags e2e -timeout $(E2E_TIMEOUT)
 
+DOCKER_MAC_NET_CONNECT ?= true
+HOMEBREW_GOPROXY ?=
+
 KUBE_DEPLOY_PROFILE ?= default
 KUBE_DEPLOY_HELM_VALUES_FILE = $(ROOT_DIR)/test/config/helm/$(KUBE_DEPLOY_PROFILE).yaml
 KUBE_DEPLOY_EG_CONFIG_FILE = $(ROOT_DIR)/test/config/envoy-gateaway-config/$(KUBE_DEPLOY_PROFILE).yaml
@@ -190,7 +193,7 @@ resilience: create-cluster kube-install-image kube-install-examples-image kube-d
 .PHONY: e2e
 e2e: create-cluster kube-install-image kube-deploy \
 	install-ratelimit install-eg-addons kube-install-examples-image \
-	e2e-prepare run-e2e delete-cluster
+	e2e-prepare setup-mac-net-connect run-e2e delete-cluster
 
 .PHONY: install-ratelimit
 install-ratelimit:
@@ -215,6 +218,11 @@ e2e-prepare: prepare-ip-family ## Prepare the environment for running e2e tests
 	kubectl apply -f $(KUBE_DEPLOY_EG_CONFIG_FILE)
 	kubectl apply -f test/config/gatewayclass.yaml
 
+.PHONY: setup-mac-net-connect
+setup-mac-net-connect:
+	@$(LOG_TARGET)
+	DOCKER_MAC_NET_CONNECT=$(DOCKER_MAC_NET_CONNECT) HOMEBREW_GOPROXY=$(HOMEBREW_GOPROXY) tools/hack/manage-mac-net-connect.sh setup
+
 .PHONY: run-e2e
 run-e2e: ## Run e2e tests
 	@$(LOG_TARGET)



Test patch:
diff --git a/internal/admin/server_test.go b/internal/admin/server_test.go
index 7a2b3ede8..325af7e7c 100644
--- a/internal/admin/server_test.go
+++ b/internal/admin/server_test.go
@@ -6,6 +6,7 @@
 package admin
 
 import (
+	"context"
 	"os"
 	"testing"
 
@@ -24,6 +25,11 @@ func TestInitAdminServer(t *testing.T) {
 	}
 
 	svrConfig.Logger = logging.NewLogger(os.Stdout, egv1a1.DefaultEnvoyGatewayLogging())
-	err := Init(svrConfig)
+	runner := New(svrConfig)
+	err := runner.Start(context.Background())
+	require.NoError(t, err)
+
+	// Clean up
+	err = runner.Close()
 	require.NoError(t, err)
 }
diff --git a/internal/cmd/egctl/testdata/translate/out/backend-endpoint.all.yaml b/internal/cmd/egctl/testdata/translate/out/backend-endpoint.all.yaml
index 1e913ac3d..2ea765f6c 100644
--- a/internal/cmd/egctl/testdata/translate/out/backend-endpoint.all.yaml
+++ b/internal/cmd/egctl/testdata/translate/out/backend-endpoint.all.yaml
@@ -60,6 +60,7 @@ envoyExtensionPolicies:
         kind: Service
         name: grpc-ext-proc
         port: 9002
+      failOpen: false
       processingMode:
         request: {}
         response:
diff --git a/internal/cmd/egctl/testdata/translate/out/default-resources.all.yaml b/internal/cmd/egctl/testdata/translate/out/default-resources.all.yaml
index 3a504865c..31b11eb1a 100644
--- a/internal/cmd/egctl/testdata/translate/out/default-resources.all.yaml
+++ b/internal/cmd/egctl/testdata/translate/out/default-resources.all.yaml
@@ -815,8 +815,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -826,6 +825,14 @@ xds:
             serviceName: httproute/default/backend/rule/0
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
@@ -842,8 +849,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -853,6 +859,14 @@ xds:
             serviceName: grpcroute/default/backend/rule/0
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
@@ -875,8 +889,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -886,6 +899,14 @@ xds:
             serviceName: tcproute/default/backend/rule/-1
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
@@ -901,8 +922,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -912,6 +932,14 @@ xds:
             serviceName: tlsroute/default/backend/rule/-1
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
@@ -927,8 +955,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -938,6 +965,14 @@ xds:
             serviceName: udproute/default/backend/rule/-1
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
diff --git a/internal/cmd/egctl/testdata/translate/out/echo-gateway-api.cluster.yaml b/internal/cmd/egctl/testdata/translate/out/echo-gateway-api.cluster.yaml
index 1fa83bfd3..8326b7ec7 100644
--- a/internal/cmd/egctl/testdata/translate/out/echo-gateway-api.cluster.yaml
+++ b/internal/cmd/egctl/testdata/translate/out/echo-gateway-api.cluster.yaml
@@ -106,8 +106,7 @@ xds:
         circuitBreakers:
           thresholds:
           - maxRetries: 1024
-        commonLbConfig:
-          localityWeightedLbConfig: {}
+        commonLbConfig: {}
         connectTimeout: 10s
         dnsLookupFamily: V4_PREFERRED
         edsClusterConfig:
@@ -117,6 +116,14 @@ xds:
           serviceName: httproute/envoy-gateway-system/backend/rule/0
         ignoreHealthOnHostRemoval: true
         lbPolicy: LEAST_REQUEST
+        loadBalancingPolicy:
+          policies:
+          - typedExtensionConfig:
+              name: envoy.load_balancing_policies.least_request
+              typedConfig:
+                '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                localityLbConfig:
+                  localityWeightedLbConfig: {}
         metadata:
           filterMetadata:
             envoy-gateway:
diff --git a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.json b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.json
index d055a12ef..b592bd3e6 100644
--- a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.json
+++ b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.json
@@ -491,9 +491,7 @@
                     }
                   ]
                 },
-                "commonLbConfig": {
-                  "localityWeightedLbConfig": {}
-                },
+                "commonLbConfig": {},
                 "connectTimeout": "10s",
                 "dnsLookupFamily": "V4_PREFERRED",
                 "edsClusterConfig": {
@@ -505,6 +503,21 @@
                 },
                 "ignoreHealthOnHostRemoval": true,
                 "lbPolicy": "LEAST_REQUEST",
+                "loadBalancingPolicy": {
+                  "policies": [
+                    {
+                      "typedExtensionConfig": {
+                        "name": "envoy.load_balancing_policies.least_request",
+                        "typedConfig": {
+                          "@type": "type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest",
+                          "localityLbConfig": {
+                            "localityWeightedLbConfig": {}
+                          }
+                        }
+                      }
+                    }
+                  ]
+                },
                 "metadata": {
                   "filterMetadata": {
                     "envoy-gateway": {
@@ -533,9 +546,7 @@
                     }
                   ]
                 },
-                "commonLbConfig": {
-                  "localityWeightedLbConfig": {}
-                },
+                "commonLbConfig": {},
                 "connectTimeout": "10s",
                 "dnsLookupFamily": "V4_PREFERRED",
                 "edsClusterConfig": {
@@ -547,6 +558,21 @@
                 },
                 "ignoreHealthOnHostRemoval": true,
                 "lbPolicy": "LEAST_REQUEST",
+                "loadBalancingPolicy": {
+                  "policies": [
+                    {
+                      "typedExtensionConfig": {
+                        "name": "envoy.load_balancing_policies.least_request",
+                        "typedConfig": {
+                          "@type": "type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest",
+                          "localityLbConfig": {
+                            "localityWeightedLbConfig": {}
+                          }
+                        }
+                      }
+                    }
+                  ]
+                },
                 "metadata": {
                   "filterMetadata": {
                     "envoy-gateway": {
@@ -586,9 +612,7 @@
                     }
                   ]
                 },
-                "commonLbConfig": {
-                  "localityWeightedLbConfig": {}
-                },
+                "commonLbConfig": {},
                 "connectTimeout": "10s",
                 "dnsLookupFamily": "V4_PREFERRED",
                 "edsClusterConfig": {
@@ -600,6 +624,21 @@
                 },
                 "ignoreHealthOnHostRemoval": true,
                 "lbPolicy": "LEAST_REQUEST",
+                "loadBalancingPolicy": {
+                  "policies": [
+                    {
+                      "typedExtensionConfig": {
+                        "name": "envoy.load_balancing_policies.least_request",
+                        "typedConfig": {
+                          "@type": "type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest",
+                          "localityLbConfig": {
+                            "localityWeightedLbConfig": {}
+                          }
+                        }
+                      }
+                    }
+                  ]
+                },
                 "metadata": {
                   "filterMetadata": {
                     "envoy-gateway": {
@@ -628,9 +667,7 @@
                     }
                   ]
                 },
-                "commonLbConfig": {
-                  "localityWeightedLbConfig": {}
-                },
+                "commonLbConfig": {},
                 "connectTimeout": "10s",
                 "dnsLookupFamily": "V4_PREFERRED",
                 "edsClusterConfig": {
@@ -642,6 +679,21 @@
                 },
                 "ignoreHealthOnHostRemoval": true,
                 "lbPolicy": "LEAST_REQUEST",
+                "loadBalancingPolicy": {
+                  "policies": [
+                    {
+                      "typedExtensionConfig": {
+                        "name": "envoy.load_balancing_policies.least_request",
+                        "typedConfig": {
+                          "@type": "type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest",
+                          "localityLbConfig": {
+                            "localityWeightedLbConfig": {}
+                          }
+                        }
+                      }
+                    }
+                  ]
+                },
                 "metadata": {
                   "filterMetadata": {
                     "envoy-gateway": {
@@ -670,9 +722,7 @@
                     }
                   ]
                 },
-                "commonLbConfig": {
-                  "localityWeightedLbConfig": {}
-                },
+                "commonLbConfig": {},
                 "connectTimeout": "10s",
                 "dnsLookupFamily": "V4_PREFERRED",
                 "edsClusterConfig": {
@@ -684,6 +734,21 @@
                 },
                 "ignoreHealthOnHostRemoval": true,
                 "lbPolicy": "LEAST_REQUEST",
+                "loadBalancingPolicy": {
+                  "policies": [
+                    {
+                      "typedExtensionConfig": {
+                        "name": "envoy.load_balancing_policies.least_request",
+                        "typedConfig": {
+                          "@type": "type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest",
+                          "localityLbConfig": {
+                            "localityWeightedLbConfig": {}
+                          }
+                        }
+                      }
+                    }
+                  ]
+                },
                 "metadata": {
                   "filterMetadata": {
                     "envoy-gateway": {
diff --git a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.yaml b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.yaml
index de52ee5e6..0ce878805 100644
--- a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.yaml
+++ b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.all.yaml
@@ -269,8 +269,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -280,6 +279,14 @@ xds:
             serviceName: httproute/default/backend/rule/0
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
@@ -295,8 +302,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -306,6 +312,14 @@ xds:
             serviceName: grpcroute/default/backend/rule/0
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
@@ -328,8 +342,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -339,6 +352,14 @@ xds:
             serviceName: tcproute/default/backend/rule/-1
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
@@ -354,8 +375,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -365,6 +385,14 @@ xds:
             serviceName: tlsroute/default/backend/rule/-1
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
@@ -380,8 +408,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -391,6 +418,14 @@ xds:
             serviceName: udproute/default/backend/rule/-1
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
diff --git a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.cluster.yaml b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.cluster.yaml
index 64b13a388..be145680d 100644
--- a/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.cluster.yaml
+++ b/internal/cmd/egctl/testdata/translate/out/from-gateway-api-to-xds.cluster.yaml
@@ -7,8 +7,7 @@ xds:
         circuitBreakers:
           thresholds:
           - maxRetries: 1024
-        commonLbConfig:
-          localityWeightedLbConfig: {}
+        commonLbConfig: {}
         connectTimeout: 10s
         dnsLookupFamily: V4_PREFERRED
         edsClusterConfig:
@@ -18,6 +17,14 @@ xds:
           serviceName: httproute/default/backend/rule/0
         ignoreHealthOnHostRemoval: true
         lbPolicy: LEAST_REQUEST
+        loadBalancingPolicy:
+          policies:
+          - typedExtensionConfig:
+              name: envoy.load_balancing_policies.least_request
+              typedConfig:
+                '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                localityLbConfig:
+                  localityWeightedLbConfig: {}
         metadata:
           filterMetadata:
             envoy-gateway:
@@ -33,8 +40,7 @@ xds:
         circuitBreakers:
           thresholds:
           - maxRetries: 1024
-        commonLbConfig:
-          localityWeightedLbConfig: {}
+        commonLbConfig: {}
         connectTimeout: 10s
         dnsLookupFamily: V4_PREFERRED
         edsClusterConfig:
@@ -44,6 +50,14 @@ xds:
           serviceName: grpcroute/default/backend/rule/0
         ignoreHealthOnHostRemoval: true
         lbPolicy: LEAST_REQUEST
+        loadBalancingPolicy:
+          policies:
+          - typedExtensionConfig:
+              name: envoy.load_balancing_policies.least_request
+              typedConfig:
+                '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                localityLbConfig:
+                  localityWeightedLbConfig: {}
         metadata:
           filterMetadata:
             envoy-gateway:
@@ -66,8 +80,7 @@ xds:
         circuitBreakers:
           thresholds:
           - maxRetries: 1024
-        commonLbConfig:
-          localityWeightedLbConfig: {}
+        commonLbConfig: {}
         connectTimeout: 10s
         dnsLookupFamily: V4_PREFERRED
         edsClusterConfig:
@@ -77,6 +90,14 @@ xds:
           serviceName: tcproute/default/backend/rule/-1
         ignoreHealthOnHostRemoval: true
         lbPolicy: LEAST_REQUEST
+        loadBalancingPolicy:
+          policies:
+          - typedExtensionConfig:
+              name: envoy.load_balancing_policies.least_request
+              typedConfig:
+                '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                localityLbConfig:
+                  localityWeightedLbConfig: {}
         metadata:
           filterMetadata:
             envoy-gateway:
@@ -92,8 +113,7 @@ xds:
         circuitBreakers:
           thresholds:
           - maxRetries: 1024
-        commonLbConfig:
-          localityWeightedLbConfig: {}
+        commonLbConfig: {}
         connectTimeout: 10s
         dnsLookupFamily: V4_PREFERRED
         edsClusterConfig:
@@ -103,6 +123,14 @@ xds:
           serviceName: tlsroute/default/backend/rule/-1
         ignoreHealthOnHostRemoval: true
         lbPolicy: LEAST_REQUEST
+        loadBalancingPolicy:
+          policies:
+          - typedExtensionConfig:
+              name: envoy.load_balancing_policies.least_request
+              typedConfig:
+                '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                localityLbConfig:
+                  localityWeightedLbConfig: {}
         metadata:
           filterMetadata:
             envoy-gateway:
@@ -118,8 +146,7 @@ xds:
         circuitBreakers:
           thresholds:
           - maxRetries: 1024
-        commonLbConfig:
-          localityWeightedLbConfig: {}
+        commonLbConfig: {}
         connectTimeout: 10s
         dnsLookupFamily: V4_PREFERRED
         edsClusterConfig:
@@ -129,6 +156,14 @@ xds:
           serviceName: udproute/default/backend/rule/-1
         ignoreHealthOnHostRemoval: true
         lbPolicy: LEAST_REQUEST
+        loadBalancingPolicy:
+          policies:
+          - typedExtensionConfig:
+              name: envoy.load_balancing_policies.least_request
+              typedConfig:
+                '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                localityLbConfig:
+                  localityWeightedLbConfig: {}
         metadata:
           filterMetadata:
             envoy-gateway:
diff --git a/internal/cmd/egctl/testdata/translate/out/invalid-envoyproxy.all.yaml b/internal/cmd/egctl/testdata/translate/out/invalid-envoyproxy.all.yaml
index ba0e000f3..7fe4d6837 100644
--- a/internal/cmd/egctl/testdata/translate/out/invalid-envoyproxy.all.yaml
+++ b/internal/cmd/egctl/testdata/translate/out/invalid-envoyproxy.all.yaml
@@ -19,7 +19,6 @@ envoyProxyForGatewayClass:
             socket_address:
               address: 127.0.0.1
               port_value: 19000
-    disableLuaValidation: false
     logging:
       level:
         default: warn
diff --git a/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.all.json b/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.all.json
index 28ecacdd2..c696b0700 100644
--- a/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.all.json
+++ b/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.all.json
@@ -327,9 +327,7 @@
                     }
                   ]
                 },
-                "commonLbConfig": {
-                  "localityWeightedLbConfig": {}
-                },
+                "commonLbConfig": {},
                 "connectTimeout": "10s",
                 "dnsLookupFamily": "V4_PREFERRED",
                 "edsClusterConfig": {
@@ -341,6 +339,21 @@
                 },
                 "ignoreHealthOnHostRemoval": true,
                 "lbPolicy": "LEAST_REQUEST",
+                "loadBalancingPolicy": {
+                  "policies": [
+                    {
+                      "typedExtensionConfig": {
+                        "name": "envoy.load_balancing_policies.least_request",
+                        "typedConfig": {
+                          "@type": "type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest",
+                          "localityLbConfig": {
+                            "localityWeightedLbConfig": {}
+                          }
+                        }
+                      }
+                    }
+                  ]
+                },
                 "metadata": {
                   "filterMetadata": {
                     "envoy-gateway": {
@@ -369,12 +382,11 @@
                     }
                   ]
                 },
-                "commonLbConfig": {
-                  "localityWeightedLbConfig": {}
-                },
+                "commonLbConfig": {},
                 "connectTimeout": "10s",
                 "dnsLookupFamily": "V4_PREFERRED",
                 "dnsRefreshRate": "30s",
+                "ignoreHealthOnHostRemoval": true,
                 "lbPolicy": "LEAST_REQUEST",
                 "loadAssignment": {
                   "clusterName": "raw_githubusercontent_com_443",
@@ -400,6 +412,21 @@
                     }
                   ]
                 },
+                "loadBalancingPolicy": {
+                  "policies": [
+                    {
+                      "typedExtensionConfig": {
+                        "name": "envoy.load_balancing_policies.least_request",
+                        "typedConfig": {
+                          "@type": "type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest",
+                          "localityLbConfig": {
+                            "localityWeightedLbConfig": {}
+                          }
+                        }
+                      }
+                    }
+                  ]
+                },
                 "name": "raw_githubusercontent_com_443",
                 "perConnectionBufferLimitBytes": 32768,
                 "respectDnsTtl": true,
diff --git a/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.all.yaml b/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.all.yaml
index dae303a9f..7c62e3366 100644
--- a/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.all.yaml
+++ b/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.all.yaml
@@ -181,8 +181,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -192,6 +191,14 @@ xds:
             serviceName: httproute/envoy-gateway-system/backend/rule/0
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
@@ -207,11 +214,11 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           dnsRefreshRate: 30s
+          ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
           loadAssignment:
             clusterName: raw_githubusercontent_com_443
@@ -226,6 +233,14 @@ xds:
               loadBalancingWeight: 1
               locality:
                 region: raw_githubusercontent_com_443/backend/-1
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           name: raw_githubusercontent_com_443
           perConnectionBufferLimitBytes: 32768
           respectDnsTtl: true
diff --git a/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.cluster.yaml b/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.cluster.yaml
index e84d41dca..09a796c66 100644
--- a/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.cluster.yaml
+++ b/internal/cmd/egctl/testdata/translate/out/jwt-single-route-single-match-to-xds.cluster.yaml
@@ -7,8 +7,7 @@ xds:
         circuitBreakers:
           thresholds:
           - maxRetries: 1024
-        commonLbConfig:
-          localityWeightedLbConfig: {}
+        commonLbConfig: {}
         connectTimeout: 10s
         dnsLookupFamily: V4_PREFERRED
         edsClusterConfig:
@@ -18,6 +17,14 @@ xds:
           serviceName: httproute/envoy-gateway-system/backend/rule/0
         ignoreHealthOnHostRemoval: true
         lbPolicy: LEAST_REQUEST
+        loadBalancingPolicy:
+          policies:
+          - typedExtensionConfig:
+              name: envoy.load_balancing_policies.least_request
+              typedConfig:
+                '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                localityLbConfig:
+                  localityWeightedLbConfig: {}
         metadata:
           filterMetadata:
             envoy-gateway:
@@ -33,11 +40,11 @@ xds:
         circuitBreakers:
           thresholds:
           - maxRetries: 1024
-        commonLbConfig:
-          localityWeightedLbConfig: {}
+        commonLbConfig: {}
         connectTimeout: 10s
         dnsLookupFamily: V4_PREFERRED
         dnsRefreshRate: 30s
+        ignoreHealthOnHostRemoval: true
         lbPolicy: LEAST_REQUEST
         loadAssignment:
           clusterName: raw_githubusercontent_com_443
@@ -52,6 +59,14 @@ xds:
             loadBalancingWeight: 1
             locality:
               region: raw_githubusercontent_com_443/backend/-1
+        loadBalancingPolicy:
+          policies:
+          - typedExtensionConfig:
+              name: envoy.load_balancing_policies.least_request
+              typedConfig:
+                '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                localityLbConfig:
+                  localityWeightedLbConfig: {}
         name: raw_githubusercontent_com_443
         perConnectionBufferLimitBytes: 32768
         respectDnsTtl: true
diff --git a/internal/cmd/egctl/testdata/translate/out/no-service-cluster-ip.all.yaml b/internal/cmd/egctl/testdata/translate/out/no-service-cluster-ip.all.yaml
index 9d138baa5..0553585ed 100644
--- a/internal/cmd/egctl/testdata/translate/out/no-service-cluster-ip.all.yaml
+++ b/internal/cmd/egctl/testdata/translate/out/no-service-cluster-ip.all.yaml
@@ -181,8 +181,7 @@ xds:
           circuitBreakers:
             thresholds:
             - maxRetries: 1024
-          commonLbConfig:
-            localityWeightedLbConfig: {}
+          commonLbConfig: {}
           connectTimeout: 10s
           dnsLookupFamily: V4_PREFERRED
           edsClusterConfig:
@@ -192,6 +191,14 @@ xds:
             serviceName: httproute/envoy-gateway-system/routes/rule/0
           ignoreHealthOnHostRemoval: true
           lbPolicy: LEAST_REQUEST
+          loadBalancingPolicy:
+            policies:
+            - typedExtensionConfig:
+                name: envoy.load_balancing_policies.least_request
+                typedConfig:
+                  '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+                  localityLbConfig:
+                    localityWeightedLbConfig: {}
           metadata:
             filterMetadata:
               envoy-gateway:
diff --git a/internal/cmd/egctl/testdata/translate/out/valid-envoyproxy.all.yaml b/internal/cmd/egctl/testdata/translate/out/valid-envoyproxy.all.yaml
index 090c62945..c79870233 100644
--- a/internal/cmd/egctl/testdata/translate/out/valid-envoyproxy.all.yaml
+++ b/internal/cmd/egctl/testdata/translate/out/valid-envoyproxy.all.yaml
@@ -6,7 +6,6 @@ envoyProxyForGatewayClass:
     name: example
     namespace: default
   spec:
-    disableLuaValidation: false
     logging:
       level:
         default: warn
diff --git a/internal/extension/registry/extension_manager_test.go b/internal/extension/registry/extension_manager_test.go
index c11bb3929..5c328e690 100644
--- a/internal/extension/registry/extension_manager_test.go
+++ b/internal/extension/registry/extension_manager_test.go
@@ -19,7 +19,9 @@ import (
 	"testing"
 
 	clusterv3 "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3"
-	v3 "github.com/envoyproxy/go-control-plane/envoy/config/route/v3"
+	listenerv3 "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3"
+	routev3 "github.com/envoyproxy/go-control-plane/envoy/config/route/v3"
+	tlsv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/transport_sockets/tls/v3"
 	"github.com/stretchr/testify/require"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/codes"
@@ -35,6 +37,7 @@ import (
 
 	egv1a1 "github.com/envoyproxy/gateway/api/v1alpha1"
 	"github.com/envoyproxy/gateway/internal/envoygateway"
+	extTypes "github.com/envoyproxy/gateway/internal/extension/types"
 	"github.com/envoyproxy/gateway/internal/ir"
 	"github.com/envoyproxy/gateway/proto/extension"
 )
@@ -205,6 +208,15 @@ func (s *testServer) PostRouteModify(ctx context.Context, req *extension.PostRou
 	}, nil
 }
 
+func (s *testServer) PostTranslateModify(ctx context.Context, req *extension.PostTranslateModifyRequest) (*extension.PostTranslateModifyResponse, error) {
+	return &extension.PostTranslateModifyResponse{
+		Clusters:  req.Clusters,
+		Secrets:   req.Secrets,
+		Listeners: req.Listeners,
+		Routes:    req.Routes,
+	}, nil
+}
+
 func Test_TLS(t *testing.T) {
 	testDir := "testdata"
 	caFile := testDir + "/ca.pem"
@@ -280,7 +292,7 @@ func Test_TLS(t *testing.T) {
 	require.NotNil(t, client)
 
 	response, err := client.PostRouteModify(context.Background(), &extension.PostRouteModifyRequest{
-		Route: &v3.Route{
+		Route: &routev3.Route{
 			Name: "test-route",
 		},
 	})
@@ -539,7 +551,7 @@ func Test_Integration_RetryPolicy_MaxAttempts(t *testing.T) {
 			require.NotNil(t, hook)
 
 			_, err = hook.PostRouteModifyHook(
-				&v3.Route{
+				&routev3.Route{
 					Name: "test-route",
 				}, nil, nil)
 
@@ -573,15 +585,19 @@ func (s *clusterUpdateTestServer) PostTranslateModify(ctx context.Context, req *
 	clusters := req.GetClusters()
 	if clusters == nil {
 		return &extension.PostTranslateModifyResponse{
-			Clusters: clusters,
-			Secrets:  req.GetSecrets(),
+			Clusters:  clusters,
+			Secrets:   req.GetSecrets(),
+			Listeners: req.GetListeners(),
+			Routes:    req.GetRoutes(),
 		}, errors.New("No clusters found")
 	}
 
 	if len(req.PostTranslateContext.ExtensionResources) == 0 {
 		return &extension.PostTranslateModifyResponse{
-			Clusters: clusters,
-			Secrets:  req.GetSecrets(),
+			Clusters:  clusters,
+			Secrets:   req.GetSecrets(),
+			Listeners: req.GetListeners(),
+			Routes:    req.GetRoutes(),
 		}, errors.New("No policy found")
 	}
 
@@ -589,23 +605,29 @@ func (s *clusterUpdateTestServer) PostTranslateModify(ctx context.Context, req *
 		extensionResource := unstructured.Unstructured{}
 		if err := extensionResource.UnmarshalJSON(extensionResourceBytes.UnstructuredBytes); err != nil {
 			return &extension.PostTranslateModifyResponse{
-				Clusters: clusters,
-				Secrets:  req.GetSecrets(),
+				Clusters:  clusters,
+				Secrets:   req.GetSecrets(),
+				Listeners: req.GetListeners(),
+				Routes:    req.GetRoutes(),
 			}, err
 		}
 
 		targetKind, err := getTargetRefKind(&extensionResource)
 		if err != nil || extensionResource.GetObjectKind().GroupVersionKind().Kind != "ExampleExtPolicy" || targetKind != "Gateway" {
 			return &extension.PostTranslateModifyResponse{
-				Clusters: clusters,
-				Secrets:  req.GetSecrets(),
+				Clusters:  clusters,
+				Secrets:   req.GetSecrets(),
+				Listeners: req.GetListeners(),
+				Routes:    req.GetRoutes(),
 			}, errors.New("No matching policy found")
 		}
 	}
 
 	ret := &extension.PostTranslateModifyResponse{
-		Clusters: clusters,
-		Secrets:  req.GetSecrets(),
+		Clusters:  clusters,
+		Secrets:   req.GetSecrets(),
+		Listeners: req.GetListeners(),
+		Routes:    req.GetRoutes(),
 	}
 
 	return ret, nil
@@ -712,12 +734,46 @@ func Test_Integration_ClusterUpdateExtensionServer(t *testing.T) {
 			require.NoError(t, err)
 			require.NotNil(t, hook)
 
-			_, _, err = hook.PostTranslateModifyHook(
+			clusters, secrets, listeners, routes, err := hook.PostTranslateModifyHook(
 				[]*clusterv3.Cluster{
 					{
 						Name: "test-cluster",
 					},
-				}, nil, tt.extensionPolicies)
+				},
+				[]*tlsv3.Secret{
+					{
+						Name: "test-secret",
+					},
+				},
+				[]*listenerv3.Listener{
+					{
+						Name: "test-listener",
+					},
+				},
+				[]*routev3.RouteConfiguration{
+					{
+						Name: "test-route",
+					},
+				},
+				tt.extensionPolicies)
+
+			// Verify that all resource types are returned when successful
+			if err == nil && !tt.errorExpected {
+				require.NotNil(t, clusters, "clusters should not be nil")
+				require.NotNil(t, secrets, "secrets should not be nil")
+				require.NotNil(t, listeners, "listeners should not be nil")
+				require.NotNil(t, routes, "routes should not be nil")
+
+				// Verify basic functionality - resources should be passed through
+				require.Len(t, clusters, 1, "should have 1 cluster")
+				require.Equal(t, "test-cluster", clusters[0].Name)
+				require.Len(t, secrets, 1, "should have 1 secret")
+				require.Equal(t, "test-secret", secrets[0].Name)
+				require.Len(t, listeners, 1, "should have 1 listener")
+				require.Equal(t, "test-listener", listeners[0].Name)
+				require.Len(t, routes, 1, "should have 1 route")
+				require.Equal(t, "test-route", routes[0].Name)
+			}
 
 			if (err != nil) != tt.errorExpected {
 				t.Errorf("PostRouteModifyHook() error = %v, errorExpected %v", err, tt.errorExpected)
@@ -726,3 +782,165 @@ func Test_Integration_ClusterUpdateExtensionServer(t *testing.T) {
 		})
 	}
 }
+
+// TestPostTranslateModifyHookWithListenersAndRoutes tests the new functionality
+// of PostTranslateModifyHook that supports listeners and routes in addition to clusters and secrets
+func TestPostTranslateModifyHookWithListenersAndRoutes(t *testing.T) {
+	extManager := egv1a1.ExtensionManager{
+		Hooks: &egv1a1.ExtensionHooks{
+			XDSTranslator: &egv1a1.XDSTranslatorHooks{
+				Post: []egv1a1.XDSTranslatorHook{
+					egv1a1.XDSTranslation,
+				},
+			},
+		},
+		Service: &egv1a1.ExtensionService{
+			BackendEndpoint: egv1a1.BackendEndpoint{
+				FQDN: &egv1a1.FQDNEndpoint{
+					Hostname: "foo.bar",
+					Port:     44344,
+				},
+			},
+		},
+	}
+
+	mgr, _, err := NewInMemoryManager(extManager, &testServer{})
+	require.NoError(t, err)
+
+	hook, err := mgr.GetPostXDSHookClient(egv1a1.XDSTranslation)
+	require.NoError(t, err)
+	require.NotNil(t, hook)
+
+	// Test with all resource types
+	inputClusters := []*clusterv3.Cluster{
+		{Name: "cluster-1"},
+		{Name: "cluster-2"},
+	}
+	inputSecrets := []*tlsv3.Secret{
+		{Name: "secret-1"},
+		{Name: "secret-2"},
+	}
+	inputListeners := []*listenerv3.Listener{
+		{Name: "listener-1"},
+		{Name: "listener-2"},
+	}
+	inputRoutes := []*routev3.RouteConfiguration{
+		{Name: "route-1"},
+		{Name: "route-2"},
+	}
+
+	clusters, secrets, listeners, routes, err := hook.PostTranslateModifyHook(
+		inputClusters, inputSecrets, inputListeners, inputRoutes, nil)
+
+	require.NoError(t, err)
+
+	// Verify all resource types are returned
+	require.NotNil(t, clusters)
+	require.NotNil(t, secrets)
+	require.NotNil(t, listeners)
+	require.NotNil(t, routes)
+
+	// Verify the resources are passed through correctly
+	require.Len(t, clusters, 2)
+	require.Equal(t, "cluster-1", clusters[0].Name)
+	require.Equal(t, "cluster-2", clusters[1].Name)
+
+	require.Len(t, secrets, 2)
+	require.Equal(t, "secret-1", secrets[0].Name)
+	require.Equal(t, "secret-2", secrets[1].Name)
+
+	require.Len(t, listeners, 2)
+	require.Equal(t, "listener-1", listeners[0].Name)
+	require.Equal(t, "listener-2", listeners[1].Name)
+
+	require.Len(t, routes, 2)
+	require.Equal(t, "route-1", routes[0].Name)
+	require.Equal(t, "route-2", routes[1].Name)
+}
+
+// TestGetTranslationHookConfig tests the configuration option
+func TestGetTranslationHookConfig(t *testing.T) {
+	tests := []struct {
+		name     string
+		config   *egv1a1.ExtensionManager
+		expected *egv1a1.TranslationConfig
+	}{
+		{
+			name:     "default behavior when config is nil",
+			config:   nil,
+			expected: nil,
+		},
+		{
+			name: "default behavior when hooks is nil",
+			config: &egv1a1.ExtensionManager{
+				Hooks: nil,
+			},
+			expected: nil,
+		},
+		{
+			name: "default behavior when field is nil",
+			config: &egv1a1.ExtensionManager{
+				Hooks: &egv1a1.ExtensionHooks{
+					XDSTranslator: &egv1a1.XDSTranslatorHooks{
+						Translation: &egv1a1.TranslationConfig{},
+					},
+				},
+			},
+			expected: &egv1a1.TranslationConfig{},
+		},
+		{
+			name: "explicitly configured with listeners enabled",
+			config: &egv1a1.ExtensionManager{
+				Hooks: &egv1a1.ExtensionHooks{
+					XDSTranslator: &egv1a1.XDSTranslatorHooks{
+						Translation: &egv1a1.TranslationConfig{
+							Listener: &egv1a1.ListenerTranslationConfig{
+								IncludeAll: ptr.To(true),
+							},
+						},
+					},
+				},
+			},
+			expected: &egv1a1.TranslationConfig{
+				Listener: &egv1a1.ListenerTranslationConfig{
+					IncludeAll: ptr.To(true),
+				},
+			},
+		},
+		{
+			name: "explicitly configured with routes enabled",
+			config: &egv1a1.ExtensionManager{
+				Hooks: &egv1a1.ExtensionHooks{
+					XDSTranslator: &egv1a1.XDSTranslatorHooks{
+						Translation: &egv1a1.TranslationConfig{
+							Route: &egv1a1.RouteTranslationConfig{
+								IncludeAll: ptr.To(true),
+							},
+						},
+					},
+				},
+			},
+			expected: &egv1a1.TranslationConfig{
+				Route: &egv1a1.RouteTranslationConfig{
+					IncludeAll: ptr.To(true),
+				},
+			},
+		},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			var mgr extTypes.Manager
+			var err error
+
+			if tt.config == nil {
+				mgr, _, err = NewInMemoryManager(egv1a1.ExtensionManager{}, &testServer{})
+			} else {
+				mgr, _, err = NewInMemoryManager(*tt.config, &testServer{})
+			}
+
+			require.NoError(t, err)
+			require.Equal(t, tt.expected, mgr.GetTranslationHookConfig())
+		})
+	}
+}
diff --git a/internal/gatewayapi/luavalidator/lua_validator_test.go b/internal/gatewayapi/luavalidator/lua_validator_test.go
index cb3ba7548..fb5ca5604 100644
--- a/internal/gatewayapi/luavalidator/lua_validator_test.go
+++ b/internal/gatewayapi/luavalidator/lua_validator_test.go
@@ -8,12 +8,15 @@ package luavalidator
 import (
 	"strings"
 	"testing"
+
+	egv1a1 "github.com/envoyproxy/gateway/api/v1alpha1"
 )
 
 func Test_Validate(t *testing.T) {
 	type args struct {
 		name                 string
 		code                 string
+		validation           egv1a1.LuaValidation
 		expectedErrSubstring string
 	}
 	tests := []args{
@@ -55,72 +58,90 @@ func Test_Validate(t *testing.T) {
 			code: `function envoy_on_request(request_handle)
                      for key, value in pairs(request_handle:metadata()) do
                        print(key, value)
-					 end
+                     end
                    end`,
 			expectedErrSubstring: "",
 		},
 		{
 			name: "stream:httpCall",
 			code: `function envoy_on_request(request_handle)
-			  -- Make an HTTP call.
-			  local headers, body = request_handle:httpCall(
-			  "lua_cluster",
-			  {
-				[":method"] = "POST",
-				[":path"] = "/",
-				[":authority"] = "lua_cluster",
-				["set-cookie"] = { "lang=lua; Path=/", "type=binding; Path=/" }
-			  },
-			  "hello world",
-			  5000)
-			
-			  -- Response directly and set a header from the HTTP call. No further filter iteration
-			  -- occurs.
-			  request_handle:respond(
-				{[":status"] = "403",
-				 ["upstream_foo"] = headers["foo"]},
-				"nope")
-			end`,
+                     -- Make an HTTP call.
+                     local headers, body = request_handle:httpCall(
+                     "lua_cluster",
+                     {
+                         [":method"] = "POST",
+                         [":path"] = "/",
+                         [":authority"] = "lua_cluster",
+                         ["set-cookie"] = { "lang=lua; Path=/", "type=binding; Path=/" }
+                     },
+                     "hello world",
+                     5000)
+
+                     -- Response directly and set a header from the HTTP call. No further filter iteration
+                     -- occurs.
+                     request_handle:respond(
+                         {[":status"] = "403",
+                          ["upstream_foo"] = headers["foo"]},
+                         "nope")
+                   end`,
 			expectedErrSubstring: "",
 		},
 		{
 			name: "stream:httpPostCall unsupported api",
 			code: `function envoy_on_request(request_handle)
-			  -- Make an HTTP call.
-			  local headers, body = request_handle:httpPostCall(
-			  "lua_cluster",
-			  {
-				[":method"] = "POST",
-				[":path"] = "/",
-				[":authority"] = "lua_cluster",
-				["set-cookie"] = { "lang=lua; Path=/", "type=binding; Path=/" }
-			  },
-			  "hello world",
-			  5000)
-			
-			  -- Response directly and set a header from the HTTP call. No further filter iteration
-			  -- occurs.
-			  request_handle:respond(
-				{[":status"] = "403",
-				 ["upstream_foo"] = headers["foo"]},
-				"nope")
-			end`,
+                     -- Make an HTTP call.
+                     local headers, body = request_handle:httpPostCall(
+                     "lua_cluster",
+                     {
+                         [":method"] = "POST",
+                         [":path"] = "/",
+                         [":authority"] = "lua_cluster",
+                         ["set-cookie"] = { "lang=lua; Path=/", "type=binding; Path=/" }
+                     },
+                     "hello world",
+                     5000)
+
+                     -- Response directly and set a header from the HTTP call. No further filter iteration
+                     -- occurs.
+                     request_handle:respond(
+                         {[":status"] = "403",
+                          ["upstream_foo"] = headers["foo"]},
+                         "nope")
+                   end`,
 			expectedErrSubstring: "attempt to call a non-function object",
 		},
 		{
 			name: "stream:bodyChunks",
 			code: `function envoy_on_response(response_handle)
-			  -- Sets the content-type.
-			  response_handle:headers():replace("content-type", "text/html")
-			  local last
-			  for chunk in response_handle:bodyChunks() do
-				-- Clears each received chunk.
-				chunk:setBytes("")
-				last = chunk
-			  end
-			
-			  last:setBytes("<html><b>Not Found<b></html>")
-            end`,
+                     -- Sets the content-type.
+                     response_handle:headers():replace("content-type", "text/html")
+                     local last
+                     for chunk in response_handle:bodyChunks() do
+                         -- Clears each received chunk.
+                         chunk:setBytes("")
+                         last = chunk
+                     end
+
+                     last:setBytes("<html><b>Not Found<b></html>")
+                   end`,
+			expectedErrSubstring: "",
+		},
+		{
+			name: "stream:body:getBytes",
+			code: `function envoy_on_request(request_handle)
+                     local body = request_handle:body(true):getBytes(0, request_handle:body():length())
+                     request_handle:logErr("Request body: " .. body)
+                   end`,
+			expectedErrSubstring: "",
+		},
+		{
+			name: "stream:bodyChunks:getBytes",
+			code: `function envoy_on_request(request_handle)
+                     for chunk in request_handle:bodyChunks() do
+                         local bytes = chunk:getBytes(0, chunk:length())
+                         request_handle:logErr("Chunk bytes: " .. bytes)
+                     end
+                   end`,
 			expectedErrSubstring: "",
 		},
 		{
@@ -130,10 +151,52 @@ func Test_Validate(t *testing.T) {
                    end`,
 			expectedErrSubstring: "attempt to call a non-function object",
 		},
+		{
+			name: "unsupported api",
+			code: `function envoy_on_request(request_handle)
+                     request_handle:unknownApi()
+                   end`,
+			validation:           egv1a1.LuaValidationSyntax,
+			expectedErrSubstring: "",
+		},
+		{
+			name: "unsupported api",
+			code: `function envoy_on_response(response_handle)
+                     -- Sets the content-type.
+                     response_handle:headers():replace("content-type", "text/html")
+                     local last
+                     for chunk in response_handle:bodyChunks() do
+                         -- Clears each received chunk.
+                         chunk:setBytes("")
+                         last = chunk
+                     -- invalid syntax as there is no end for the for loop
+
+                     last:setBytes("<html><b>Not Found<b></html>")
+                   end`,
+			validation:           egv1a1.LuaValidationSyntax,
+			expectedErrSubstring: "<string> at EOF:   syntax error",
+		},
+		{
+			name: "unsupported api",
+			code: `function envoy_on_response(response_handle)
+                     -- Sets the content-type.
+                     response_handle:headers():replace("content-type", "text/html")
+                     local last
+                     for chunk in response_handle:bodyChunks() do
+                         -- Clears each received chunk.
+                         chunk:setBytes("")
+                         last = chunk
+                     -- invalid syntax as there is no end for the for loop
+
+                     last:setBytes("<html><b>Not Found<b></html>")
+                   end`,
+			validation:           egv1a1.LuaValidationDisabled,
+			expectedErrSubstring: "",
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			l := NewLuaValidator(tt.code)
+			l := NewLuaValidator(tt.code, tt.validation)
 			if err := l.Validate(); err != nil && tt.expectedErrSubstring == "" {
 				t.Errorf("Unexpected error: %v", err)
 			} else if err != nil && !strings.Contains(err.Error(), tt.expectedErrSubstring) {
diff --git a/internal/gatewayapi/resource/testdata/all-resources.out.yaml b/internal/gatewayapi/resource/testdata/all-resources.out.yaml
index ae5b2eaec..f6acba05d 100644
--- a/internal/gatewayapi/resource/testdata/all-resources.out.yaml
+++ b/internal/gatewayapi/resource/testdata/all-resources.out.yaml
@@ -118,6 +118,7 @@ envoyExtensionPolicies:
         kind: Service
         name: grpc-ext-proc
         port: 9002
+      failOpen: false
       processingMode:
         request: {}
         response:
@@ -169,7 +170,6 @@ envoyProxyForGatewayClass:
     name: example
     namespace: default
   spec:
-    disableLuaValidation: false
     logging:
       level:
         default: warn
diff --git a/internal/gatewayapi/route_test.go b/internal/gatewayapi/route_test.go
index 131e67879..31de02fd1 100644
--- a/internal/gatewayapi/route_test.go
+++ b/internal/gatewayapi/route_test.go
@@ -232,6 +232,7 @@ func TestGetIREndpointsFromEndpointSlices(t *testing.T) {
 
 func TestValidateDestinationSettings(t *testing.T) {
 	svcKind := gwapiv1.Kind(resource.KindService)
+	hostname := "www.gateway-test.com"
 
 	tests := []struct {
 		name                    string
@@ -262,6 +263,16 @@ func TestValidateDestinationSettings(t *testing.T) {
 			kind:                    &svcKind,
 			wantErr:                 false,
 		},
+		{
+			name: "normal service allowed with hostname",
+			ds: &ir.DestinationSetting{
+				Name:      "normal with hostname",
+				Endpoints: []*ir.DestinationEndpoint{{Hostname: &hostname, Host: "10.0.0.1"}},
+			},
+			endpointRoutingDisabled: true,
+			kind:                    &svcKind,
+			wantErr:                 false,
+		},
 		{
 			name: "mixed address type rejected when EndpointSlice routing",
 			ds: &ir.DestinationSetting{
diff --git a/internal/gatewayapi/status/gateway_test.go b/internal/gatewayapi/status/gateway_test.go
index 0dcb550a1..fb6fa0faa 100644
--- a/internal/gatewayapi/status/gateway_test.go
+++ b/internal/gatewayapi/status/gateway_test.go
@@ -27,7 +27,7 @@ func TestUpdateGatewayStatusProgrammedCondition(t *testing.T) {
 		gw            *gwapiv1.Gateway
 		svc           *corev1.Service
 		deployment    *appsv1.Deployment
-		nodeAddresses []string
+		nodeAddresses NodeAddresses
 	}
 	tests := []struct {
 		name          string
@@ -52,6 +52,9 @@ func TestUpdateGatewayStatusProgrammedCondition(t *testing.T) {
 					Spec: corev1.ServiceSpec{
 						ClusterIPs: []string{"127.0.0.1"},
 						Type:       corev1.ServiceTypeLoadBalancer,
+						IPFamilies: []corev1.IPFamily{
+							corev1.IPv4Protocol,
+						},
 					},
 					Status: corev1.ServiceStatus{
 						LoadBalancer: corev1.LoadBalancerStatus{
@@ -81,6 +84,9 @@ func TestUpdateGatewayStatusProgrammedCondition(t *testing.T) {
 					Spec: corev1.ServiceSpec{
 						ClusterIPs: []string{"127.0.0.1"},
 						Type:       corev1.ServiceTypeLoadBalancer,
+						IPFamilies: []corev1.IPFamily{
+							corev1.IPv4Protocol,
+						},
 					},
 					Status: corev1.ServiceStatus{
 						LoadBalancer: corev1.LoadBalancerStatus{
@@ -114,6 +120,9 @@ func TestUpdateGatewayStatusProgrammedCondition(t *testing.T) {
 					Spec: corev1.ServiceSpec{
 						ClusterIPs: []string{"127.0.0.1"},
 						Type:       corev1.ServiceTypeClusterIP,
+						IPFamilies: []corev1.IPFamily{
+							corev1.IPv4Protocol,
+						},
 					},
 				},
 			},
@@ -127,13 +136,18 @@ func TestUpdateGatewayStatusProgrammedCondition(t *testing.T) {
 		{
 			name: "Nodeport svc",
 			args: args{
-				gw:            &gwapiv1.Gateway{},
-				nodeAddresses: []string{"1", "2"},
+				gw: &gwapiv1.Gateway{},
+				nodeAddresses: NodeAddresses{
+					IPv4: []string{"1", "2"},
+				},
 				svc: &corev1.Service{
 					TypeMeta:   metav1.TypeMeta{},
 					ObjectMeta: metav1.ObjectMeta{},
 					Spec: corev1.ServiceSpec{
 						Type: corev1.ServiceTypeNodePort,
+						IPFamilies: []corev1.IPFamily{
+							corev1.IPv4Protocol,
+						},
 					},
 				},
 			},
@@ -153,9 +167,9 @@ func TestUpdateGatewayStatusProgrammedCondition(t *testing.T) {
 			args: args{
 				gw: &gwapiv1.Gateway{},
 				// 20 node addresses
-				nodeAddresses: func() (addr []string) {
+				nodeAddresses: func() (addr NodeAddresses) {
 					for i := 0; i < 20; i++ {
-						addr = append(addr, strconv.Itoa(i))
+						addr.IPv4 = append(addr.IPv4, strconv.Itoa(i))
 					}
 					return
 				}(),
@@ -164,6 +178,9 @@ func TestUpdateGatewayStatusProgrammedCondition(t *testing.T) {
 					ObjectMeta: metav1.ObjectMeta{},
 					Spec: corev1.ServiceSpec{
 						Type: corev1.ServiceTypeNodePort,
+						IPFamilies: []corev1.IPFamily{
+							corev1.IPv4Protocol,
+						},
 					},
 				},
 			},
@@ -185,6 +202,9 @@ func TestUpdateGatewayStatusProgrammedCondition(t *testing.T) {
 				svc: &corev1.Service{
 					Spec: corev1.ServiceSpec{
 						Type: corev1.ServiceTypeLoadBalancer,
+						IPFamilies: []corev1.IPFamily{
+							corev1.IPv6Protocol,
+						},
 					},
 					Status: corev1.ServiceStatus{
 						LoadBalancer: corev1.LoadBalancerStatus{
@@ -210,6 +230,9 @@ func TestUpdateGatewayStatusProgrammedCondition(t *testing.T) {
 					Spec: corev1.ServiceSpec{
 						ClusterIPs: []string{"2001:db8::2"},
 						Type:       corev1.ServiceTypeClusterIP,
+						IPFamilies: []corev1.IPFamily{
+							corev1.IPv6Protocol,
+						},
 					},
 				},
 			},
@@ -223,11 +246,16 @@ func TestUpdateGatewayStatusProgrammedCondition(t *testing.T) {
 		{
 			name: "Nodeport svc with IPv6 node addresses",
 			args: args{
-				gw:            &gwapiv1.Gateway{},
-				nodeAddresses: []string{"2001:db8::3", "2001:db8::4"},
+				gw: &gwapiv1.Gateway{},
+				nodeAddresses: NodeAddresses{
+					IPv6: []string{"2001:db8::3", "2001:db8::4"},
+				},
 				svc: &corev1.Service{
 					Spec: corev1.ServiceSpec{
 						Type: corev1.ServiceTypeNodePort,
+						IPFamilies: []corev1.IPFamily{
+							corev1.IPv6Protocol,
+						},
 					},
 				},
 			},
@@ -281,10 +309,34 @@ func TestUpdateGatewayStatusProgrammedCondition(t *testing.T) {
 			},
 			wantAddresses: []gwapiv1.GatewayStatusAddress{},
 		},
+		{
+			name: "Nodeport svc Ipv6 with dual stack node addresses",
+			args: args{
+				gw: &gwapiv1.Gateway{},
+				nodeAddresses: NodeAddresses{
+					IPv4: []string{"10.0.0.1"},
+					IPv6: []string{"2001:db8::4"},
+				},
+				svc: &corev1.Service{
+					Spec: corev1.ServiceSpec{
+						Type: corev1.ServiceTypeNodePort,
+						IPFamilies: []corev1.IPFamily{
+							corev1.IPv6Protocol,
+						},
+					},
+				},
+			},
+			wantAddresses: []gwapiv1.GatewayStatusAddress{
+				{
+					Type:  ptr.To(gwapiv1.IPAddressType),
+					Value: "2001:db8::4",
+				},
+			},
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			UpdateGatewayStatusProgrammedCondition(tt.args.gw, tt.args.svc, tt.args.deployment, tt.args.nodeAddresses...)
+			UpdateGatewayStatusProgrammedCondition(tt.args.gw, tt.args.svc, tt.args.deployment, tt.args.nodeAddresses)
 			assert.True(t, reflect.DeepEqual(tt.wantAddresses, tt.args.gw.Status.Addresses))
 		})
 	}
diff --git a/internal/gatewayapi/testdata/accesslog-als-grpc.in.yaml b/internal/gatewayapi/testdata/accesslog-als-grpc.in.yaml
new file mode 100644
index 000000000..2c354193a
--- /dev/null
+++ b/internal/gatewayapi/testdata/accesslog-als-grpc.in.yaml
@@ -0,0 +1,46 @@
+envoyProxyForGatewayClass:
+  apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyProxy
+  metadata:
+    namespace: envoy-gateway-system
+    name: als-backend
+  spec:
+    telemetry:
+      accessLog:
+        settings:
+          - sinks:
+              - type: ALS
+                als:
+                  backendRefs:
+                    - name: access-logger
+                      namespace: default
+                      port: 50051
+                  type: HTTP
+gateways:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: Gateway
+    metadata:
+      namespace: envoy-gateway
+      name: gateway-1
+    spec:
+      gatewayClassName: envoy-gateway-class
+      listeners:
+        - name: http
+          protocol: HTTP
+          port: 80
+          allowedRoutes:
+            namespaces:
+              from: Same
+services:
+  - apiVersion: v1
+    kind: Service
+    metadata:
+      name: access-logger
+      namespace: default
+    spec:
+      clusterIP: 10.11.12.13
+      ports:
+        - port: 50051
+          name: grpc
+          protocol: TCP
+          targetPort: 50051
diff --git a/internal/gatewayapi/testdata/accesslog-als-grpc.out.yaml b/internal/gatewayapi/testdata/accesslog-als-grpc.out.yaml
new file mode 100644
index 000000000..efe420cc8
--- /dev/null
+++ b/internal/gatewayapi/testdata/accesslog-als-grpc.out.yaml
@@ -0,0 +1,122 @@
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+infraIR:
+  envoy-gateway/gateway-1:
+    proxy:
+      config:
+        apiVersion: gateway.envoyproxy.io/v1alpha1
+        kind: EnvoyProxy
+        metadata:
+          creationTimestamp: null
+          name: als-backend
+          namespace: envoy-gateway-system
+        spec:
+          logging: {}
+          telemetry:
+            accessLog:
+              settings:
+              - sinks:
+                - als:
+                    backendRefs:
+                    - name: access-logger
+                      namespace: default
+                      port: 50051
+                    type: HTTP
+                  type: ALS
+        status: {}
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-1
+      namespace: envoy-gateway-system
+xdsIR:
+  envoy-gateway/gateway-1:
+    accessLog:
+      als:
+      - destination:
+          metadata:
+            kind: EnvoyProxy
+            name: als-backend
+            namespace: envoy-gateway-system
+          name: accesslog_als_0_0
+          settings:
+          - metadata:
+              kind: Service
+              name: access-logger
+              namespace: default
+              sectionName: "50051"
+            name: accesslog_als_0_0/backend/-1
+            protocol: GRPC
+        name: envoy-gateway-system/als-backend
+        type: HTTP
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/backend-with-hostname.in.yaml b/internal/gatewayapi/testdata/backend-with-hostname.in.yaml
new file mode 100644
index 000000000..df2e8cfff
--- /dev/null
+++ b/internal/gatewayapi/testdata/backend-with-hostname.in.yaml
@@ -0,0 +1,60 @@
+gateways:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: Gateway
+    metadata:
+      namespace: envoy-gateway
+      name: gateway-1
+    spec:
+      gatewayClassName: envoy-gateway-class
+      listeners:
+        - name: http
+          protocol: HTTP
+          port: 80
+          allowedRoutes:
+            namespaces:
+              from: All
+httpRoutes:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-1
+    spec:
+      parentRefs:
+        - namespace: envoy-gateway
+          name: gateway-1
+      rules:
+        - matches:
+            - path:
+                value: "/"
+          backendRefs:
+            - group: gateway.envoyproxy.io
+              kind: Backend
+              name: backend-1
+            - group: gateway.envoyproxy.io
+              kind: Backend
+              name: backend-2
+backends:
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: Backend
+    metadata:
+      name: backend-1
+      namespace: default
+    spec:
+      endpoints:
+        - hostname: "example.com"
+          ip:
+            address: 1.1.1.1
+            port: 3001
+          zone: zone1
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: Backend
+    metadata:
+      name: backend-2
+      namespace: default
+    spec:
+      endpoints:
+        - ip:
+            address: 2.2.2.2
+            port: 3001
+          zone: zone2
diff --git a/internal/gatewayapi/testdata/backend-with-hostname.out.yaml b/internal/gatewayapi/testdata/backend-with-hostname.out.yaml
new file mode 100644
index 000000000..de6179b09
--- /dev/null
+++ b/internal/gatewayapi/testdata/backend-with-hostname.out.yaml
@@ -0,0 +1,209 @@
+backends:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: Backend
+  metadata:
+    creationTimestamp: null
+    name: backend-1
+    namespace: default
+  spec:
+    endpoints:
+    - hostname: example.com
+      ip:
+        address: 1.1.1.1
+        port: 3001
+      zone: zone1
+  status:
+    conditions:
+    - lastTransitionTime: null
+      message: The Backend was accepted
+      reason: Accepted
+      status: "True"
+      type: Accepted
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: Backend
+  metadata:
+    creationTimestamp: null
+    name: backend-2
+    namespace: default
+  spec:
+    endpoints:
+    - ip:
+        address: 2.2.2.2
+        port: 3001
+      zone: zone2
+  status:
+    conditions:
+    - lastTransitionTime: null
+      message: The Backend was accepted
+      reason: Accepted
+      status: "True"
+      type: Accepted
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 1
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: default
+  spec:
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+    rules:
+    - backendRefs:
+      - group: gateway.envoyproxy.io
+        kind: Backend
+        name: backend-1
+      - group: gateway.envoyproxy.io
+        kind: Backend
+        name: backend-2
+      matches:
+      - path:
+          value: /
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+infraIR:
+  envoy-gateway/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-1
+      namespace: envoy-gateway-system
+xdsIR:
+  envoy-gateway/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 1.1.1.1
+              hostname: example.com
+              port: 3001
+              zone: zone1
+            metadata:
+              kind: Backend
+              name: backend-1
+              namespace: default
+            name: httproute/default/httproute-1/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+          - addressType: IP
+            endpoints:
+            - host: 2.2.2.2
+              port: 3001
+              zone: zone2
+            metadata:
+              kind: Backend
+              name: backend-2
+              namespace: default
+            name: httproute/default/httproute-1/rule/0/backend/1
+            protocol: HTTP
+            weight: 1
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/backendtlspolicy-status-conditions-truncated.in.yaml b/internal/gatewayapi/testdata/backendtlspolicy-status-conditions-truncated.in.yaml
new file mode 100644
index 000000000..9bb97f989
--- /dev/null
+++ b/internal/gatewayapi/testdata/backendtlspolicy-status-conditions-truncated.in.yaml
@@ -0,0 +1,439 @@
+configMaps:
+- apiVersion: v1
+  kind: ConfigMap
+  metadata:
+    name: ca-cmap
+    namespace: envoy-gateway
+  data:
+    ca.crt: |
+      -----BEGIN CERTIFICATE-----
+      MIIDJzCCAg+gAwIBAgIUAl6UKIuKmzte81cllz5PfdN2IlIwDQYJKoZIhvcNAQEL
+      BQAwIzEQMA4GA1UEAwwHbXljaWVudDEPMA0GA1UECgwGa3ViZWRiMB4XDTIzMTAw
+      MjA1NDE1N1oXDTI0MTAwMTA1NDE1N1owIzEQMA4GA1UEAwwHbXljaWVudDEPMA0G
+      A1UECgwGa3ViZWRiMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwSTc
+      1yj8HW62nynkFbXo4VXKv2jC0PM7dPVky87FweZcTKLoWQVPQE2p2kLDK6OEszmM
+      yyr+xxWtyiveremrWqnKkNTYhLfYPhgQkczib7eUalmFjUbhWdLvHakbEgCodn3b
+      kz57mInX2VpiDOKg4kyHfiuXWpiBqrCx0KNLpxo3DEQcFcsQTeTHzh4752GV04RU
+      Ti/GEWyzIsl4Rg7tGtAwmcIPgUNUfY2Q390FGqdH4ahn+mw/6aFbW31W63d9YJVq
+      ioyOVcaMIpM5B/c7Qc8SuhCI1YGhUyg4cRHLEw5VtikioyE3X04kna3jQAj54YbR
+      bpEhc35apKLB21HOUQIDAQABo1MwUTAdBgNVHQ4EFgQUyvl0VI5vJVSuYFXu7B48
+      6PbMEAowHwYDVR0jBBgwFoAUyvl0VI5vJVSuYFXu7B486PbMEAowDwYDVR0TAQH/
+      BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAMLxrgFVMuNRq2wAwcBt7SnNR5Cfz
+      2MvXq5EUmuawIUi9kaYjwdViDREGSjk7JW17vl576HjDkdfRwi4E28SydRInZf6J
+      i8HZcZ7caH6DxR335fgHVzLi5NiTce/OjNBQzQ2MJXVDd8DBmG5fyatJiOJQ4bWE
+      A7FlP0RdP3CO3GWE0M5iXOB2m1qWkE2eyO4UHvwTqNQLdrdAXgDQlbam9e4BG3Gg
+      d/6thAkWDbt/QNT+EJHDCvhDRKh1RuGHyg+Y+/nebTWWrFWsktRrbOoHCZiCpXI1
+      3eXE6nt0YkgtDxG22KqnhpAg9gUSs2hlhoxyvkzyF0mu6NhPlwAgnq7+/Q==
+      -----END CERTIFICATE-----
+backendTLSPolicies:
+- apiVersion: gateway.networking.k8s.io/v1alpha2
+  kind: BackendTLSPolicy
+  metadata:
+    name: policy-btls
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: ""
+      kind: Service
+      name: http-backend
+      sectionName: https
+    validation:
+      caCertificateRefs:
+      - name: ca-cmap
+        group: ""
+        kind: ConfigMap
+      hostname: example.com
+- apiVersion: gateway.networking.k8s.io/v1alpha2
+  kind: BackendTLSPolicy
+  metadata:
+    name: policy-btls-invalid
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: ""
+      kind: Service
+      name: http-backend-2
+      sectionName: https
+    validation:
+      caCertificateRefs:
+      - name: ca-not-found
+        group: ""
+        kind: ConfigMap
+      hostname: example.com
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    namespace: envoy-gateway
+    name: httproute-1
+  spec:
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+    - namespace: envoy-gateway
+      name: gateway-2
+    - namespace: envoy-gateway
+      name: gateway-3
+    - namespace: envoy-gateway
+      name: gateway-4
+    - namespace: envoy-gateway
+      name: gateway-5
+    - namespace: envoy-gateway
+      name: gateway-6
+    - namespace: envoy-gateway
+      name: gateway-7
+    - namespace: envoy-gateway
+      name: gateway-8
+    - namespace: envoy-gateway
+      name: gateway-9
+    - namespace: envoy-gateway
+      name: gateway-10
+    - namespace: envoy-gateway
+      name: gateway-11
+    - namespace: envoy-gateway
+      name: gateway-12
+    - namespace: envoy-gateway
+      name: gateway-13
+    - namespace: envoy-gateway
+      name: gateway-14
+    - namespace: envoy-gateway
+      name: gateway-15
+    - namespace: envoy-gateway
+      name: gateway-16
+    - namespace: envoy-gateway
+      name: gateway-17
+    - namespace: envoy-gateway
+      name: gateway-18
+    rules:
+    - matches:
+      - path:
+          value: "/"
+      backendRefs:
+      - name: http-backend
+        port: 8443
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    namespace: envoy-gateway
+    name: httproute-2
+  spec:
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+    - namespace: envoy-gateway
+      name: gateway-2
+    - namespace: envoy-gateway
+      name: gateway-3
+    - namespace: envoy-gateway
+      name: gateway-4
+    - namespace: envoy-gateway
+      name: gateway-5
+    - namespace: envoy-gateway
+      name: gateway-6
+    - namespace: envoy-gateway
+      name: gateway-7
+    - namespace: envoy-gateway
+      name: gateway-8
+    - namespace: envoy-gateway
+      name: gateway-9
+    - namespace: envoy-gateway
+      name: gateway-10
+    - namespace: envoy-gateway
+      name: gateway-11
+    - namespace: envoy-gateway
+      name: gateway-12
+    - namespace: envoy-gateway
+      name: gateway-13
+    - namespace: envoy-gateway
+      name: gateway-14
+    - namespace: envoy-gateway
+      name: gateway-15
+    - namespace: envoy-gateway
+      name: gateway-16
+    - namespace: envoy-gateway
+      name: gateway-17
+    - namespace: envoy-gateway
+      name: gateway-18
+    rules:
+    - matches:
+      - path:
+          value: "/"
+      backendRefs:
+      - name: http-backend-2
+        port: 8443
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-1
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-2
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-3
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-4
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-5
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-6
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-7
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-8
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-9
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-10
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-11
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-12
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-13
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-14
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-15
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-16
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-17
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-18
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+services:
+- apiVersion: v1
+  kind: Service
+  metadata:
+    name: http-backend
+    namespace: envoy-gateway
+  spec:
+    clusterIP: 10.11.12.13
+    ports:
+    - port: 8443
+      name: https
+      protocol: TCP
+- apiVersion: v1
+  kind: Service
+  metadata:
+    name: http-backend-2
+    namespace: envoy-gateway
+  spec:
+    clusterIP: 10.11.12.13
+    ports:
+    - port: 8443
+      name: https
+      protocol: TCP
diff --git a/internal/gatewayapi/testdata/backendtlspolicy-status-conditions-truncated.out.yaml b/internal/gatewayapi/testdata/backendtlspolicy-status-conditions-truncated.out.yaml
new file mode 100644
index 000000000..cb1160f86
--- /dev/null
+++ b/internal/gatewayapi/testdata/backendtlspolicy-status-conditions-truncated.out.yaml
@@ -0,0 +1,3021 @@
+backendTLSPolicies:
+- apiVersion: gateway.networking.k8s.io/v1alpha2
+  kind: BackendTLSPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-btls
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: ""
+      kind: Service
+      name: http-backend
+      sectionName: https
+    validation:
+      caCertificateRefs:
+      - group: ""
+        kind: ConfigMap
+        name: ca-cmap
+      hostname: example.com
+  status:
+    ancestors:
+    - ancestorRef:
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-7
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-8, gateway-9'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.networking.k8s.io/v1alpha2
+  kind: BackendTLSPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-btls-invalid
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: ""
+      kind: Service
+      name: http-backend-2
+      sectionName: https
+    validation:
+      caCertificateRefs:
+      - group: ""
+        kind: ConfigMap
+        name: ca-not-found
+      hostname: example.com
+  status:
+    ancestors:
+    - ancestorRef:
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        name: gateway-7
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Configmap ca-not-found not found in namespace envoy-gateway.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-8, gateway-9'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-2
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-3
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-4
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-5
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-6
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-7
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-8
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-9
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-10
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-11
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-12
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-13
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-14
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-15
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-16
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-17
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-18
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: envoy-gateway
+  spec:
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+    - name: gateway-2
+      namespace: envoy-gateway
+    - name: gateway-3
+      namespace: envoy-gateway
+    - name: gateway-4
+      namespace: envoy-gateway
+    - name: gateway-5
+      namespace: envoy-gateway
+    - name: gateway-6
+      namespace: envoy-gateway
+    - name: gateway-7
+      namespace: envoy-gateway
+    - name: gateway-8
+      namespace: envoy-gateway
+    - name: gateway-9
+      namespace: envoy-gateway
+    - name: gateway-10
+      namespace: envoy-gateway
+    - name: gateway-11
+      namespace: envoy-gateway
+    - name: gateway-12
+      namespace: envoy-gateway
+    - name: gateway-13
+      namespace: envoy-gateway
+    - name: gateway-14
+      namespace: envoy-gateway
+    - name: gateway-15
+      namespace: envoy-gateway
+    - name: gateway-16
+      namespace: envoy-gateway
+    - name: gateway-17
+      namespace: envoy-gateway
+    - name: gateway-18
+      namespace: envoy-gateway
+    rules:
+    - backendRefs:
+      - name: http-backend
+        port: 8443
+      matches:
+      - path:
+          value: /
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-2
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-3
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-4
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-5
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-6
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-7
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-8
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-9
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-10
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-11
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-12
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-13
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-14
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-15
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-16
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-17
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-18
+        namespace: envoy-gateway
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-2
+    namespace: envoy-gateway
+  spec:
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+    - name: gateway-2
+      namespace: envoy-gateway
+    - name: gateway-3
+      namespace: envoy-gateway
+    - name: gateway-4
+      namespace: envoy-gateway
+    - name: gateway-5
+      namespace: envoy-gateway
+    - name: gateway-6
+      namespace: envoy-gateway
+    - name: gateway-7
+      namespace: envoy-gateway
+    - name: gateway-8
+      namespace: envoy-gateway
+    - name: gateway-9
+      namespace: envoy-gateway
+    - name: gateway-10
+      namespace: envoy-gateway
+    - name: gateway-11
+      namespace: envoy-gateway
+    - name: gateway-12
+      namespace: envoy-gateway
+    - name: gateway-13
+      namespace: envoy-gateway
+    - name: gateway-14
+      namespace: envoy-gateway
+    - name: gateway-15
+      namespace: envoy-gateway
+    - name: gateway-16
+      namespace: envoy-gateway
+    - name: gateway-17
+      namespace: envoy-gateway
+    - name: gateway-18
+      namespace: envoy-gateway
+    rules:
+    - backendRefs:
+      - name: http-backend-2
+        port: 8443
+      matches:
+      - path:
+          value: /
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-2
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-3
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-4
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-5
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-6
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-7
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-8
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-9
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-10
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-11
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-12
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-13
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-14
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-15
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-16
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-17
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: configmap ca-not-found
+          not found in namespace envoy-gateway.'
+        reason: InvalidBackendTLS
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-18
+        namespace: envoy-gateway
+infraIR:
+  envoy-gateway/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-1
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-2:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-2/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-2
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-2
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-3:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-3/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-3
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-3
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-4:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-4/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-4
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-4
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-5:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-5/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-5
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-5
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-6:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-6/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-6
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-6
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-7:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-7/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-7
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-7
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-8:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-8/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-8
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-8
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-9:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-9/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-9
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-9
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-10:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-10/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-10
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-10
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-11:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-11/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-11
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-11
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-12:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-12/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-12
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-12
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-13:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-13/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-13
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-13
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-14:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-14/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-14
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-14
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-15:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-15/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-15
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-15
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-16:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-16/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-16
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-16
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-17:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-17/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-17
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-17
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-18:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-18/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-18
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-18
+      namespace: envoy-gateway-system
+xdsIR:
+  envoy-gateway/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-2:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-2/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-3:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-3/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-4:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-4/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-5:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-5/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-6:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-6/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-7:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-7/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-8:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-8
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-8/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-9:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-9
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-9/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-10:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-10/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-11:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-11/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-12:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-12/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-13:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-13/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-14:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-14/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-15:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-15/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-16:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-16/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-17:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-17/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-18:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-18/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/backendtrafficpolicy-status-conditions-truncated.in.yaml b/internal/gatewayapi/testdata/backendtrafficpolicy-status-conditions-truncated.in.yaml
new file mode 100644
index 000000000..47077434f
--- /dev/null
+++ b/internal/gatewayapi/testdata/backendtrafficpolicy-status-conditions-truncated.in.yaml
@@ -0,0 +1,388 @@
+backendTrafficPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: BackendTrafficPolicy
+  metadata:
+    namespace: envoy-gateway
+    name: target-gateway-with-route-level-override-truncated-ancestors
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-9
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: BackendTrafficPolicy
+  metadata:
+    namespace: envoy-gateway
+    name: target-httproute-with-attachment-conflict-truncated-ancestors
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: BackendTrafficPolicy
+  metadata:
+    namespace: envoy-gateway
+    name: target-httproute-with-accepted-truncated-ancestors
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    namespace: envoy-gateway
+    name: httproute-1
+  spec:
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+    - namespace: envoy-gateway
+      name: gateway-2
+    - namespace: envoy-gateway
+      name: gateway-3
+    - namespace: envoy-gateway
+      name: gateway-4
+    - namespace: envoy-gateway
+      name: gateway-5
+    - namespace: envoy-gateway
+      name: gateway-6
+    - namespace: envoy-gateway
+      name: gateway-7
+    - namespace: envoy-gateway
+      name: gateway-8
+    - namespace: envoy-gateway
+      name: gateway-9
+    - namespace: envoy-gateway
+      name: gateway-10
+    - namespace: envoy-gateway
+      name: gateway-11
+    - namespace: envoy-gateway
+      name: gateway-12
+    - namespace: envoy-gateway
+      name: gateway-13
+    - namespace: envoy-gateway
+      name: gateway-14
+    - namespace: envoy-gateway
+      name: gateway-15
+    - namespace: envoy-gateway
+      name: gateway-16
+    - namespace: envoy-gateway
+      name: gateway-17
+    - namespace: envoy-gateway
+      name: gateway-18
+    rules:
+    - matches:
+      - path:
+          value: "/"
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    namespace: envoy-gateway
+    name: httproute-2
+  spec:
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+    - namespace: envoy-gateway
+      name: gateway-2
+    - namespace: envoy-gateway
+      name: gateway-3
+    - namespace: envoy-gateway
+      name: gateway-4
+    - namespace: envoy-gateway
+      name: gateway-5
+    - namespace: envoy-gateway
+      name: gateway-6
+    - namespace: envoy-gateway
+      name: gateway-7
+    - namespace: envoy-gateway
+      name: gateway-8
+    - namespace: envoy-gateway
+      name: gateway-9
+    - namespace: envoy-gateway
+      name: gateway-10
+    - namespace: envoy-gateway
+      name: gateway-11
+    - namespace: envoy-gateway
+      name: gateway-12
+    - namespace: envoy-gateway
+      name: gateway-13
+    - namespace: envoy-gateway
+      name: gateway-14
+    - namespace: envoy-gateway
+      name: gateway-15
+    - namespace: envoy-gateway
+      name: gateway-16
+    - namespace: envoy-gateway
+      name: gateway-17
+    - namespace: envoy-gateway
+      name: gateway-18
+    rules:
+    - matches:
+      - path:
+          value: "/route-2"
+      backendRefs:
+      - name: service-1
+        port: 8080
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-1
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-2
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-3
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-4
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-5
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-6
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-7
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-8
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-9
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-10
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-11
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-12
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-13
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-14
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-15
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-16
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-17
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-18
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
diff --git a/internal/gatewayapi/testdata/backendtrafficpolicy-status-conditions-truncated.out.yaml b/internal/gatewayapi/testdata/backendtrafficpolicy-status-conditions-truncated.out.yaml
new file mode 100644
index 000000000..4858c51cc
--- /dev/null
+++ b/internal/gatewayapi/testdata/backendtrafficpolicy-status-conditions-truncated.out.yaml
@@ -0,0 +1,3361 @@
+backendTrafficPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: BackendTrafficPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-gateway-with-route-level-override-truncated-ancestors
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-9
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-9
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'This policy is being overridden by other backendTrafficPolicies
+          for these routes: [envoy-gateway/httproute-1 envoy-gateway/httproute-2]'
+        reason: Overridden
+        status: "True"
+        type: Overridden
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-7, gateway-8'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: BackendTrafficPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-httproute-with-attachment-conflict-truncated-ancestors
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another BackendTrafficPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-8, gateway-9'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: BackendTrafficPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-httproute-with-accepted-truncated-ancestors
+    namespace: envoy-gateway
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-8, gateway-9'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-2
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-3
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-4
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-5
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-6
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-7
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-8
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-9
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-10
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-11
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-12
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-13
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-14
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-15
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-16
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-17
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-18
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: envoy-gateway
+  spec:
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+    - name: gateway-2
+      namespace: envoy-gateway
+    - name: gateway-3
+      namespace: envoy-gateway
+    - name: gateway-4
+      namespace: envoy-gateway
+    - name: gateway-5
+      namespace: envoy-gateway
+    - name: gateway-6
+      namespace: envoy-gateway
+    - name: gateway-7
+      namespace: envoy-gateway
+    - name: gateway-8
+      namespace: envoy-gateway
+    - name: gateway-9
+      namespace: envoy-gateway
+    - name: gateway-10
+      namespace: envoy-gateway
+    - name: gateway-11
+      namespace: envoy-gateway
+    - name: gateway-12
+      namespace: envoy-gateway
+    - name: gateway-13
+      namespace: envoy-gateway
+    - name: gateway-14
+      namespace: envoy-gateway
+    - name: gateway-15
+      namespace: envoy-gateway
+    - name: gateway-16
+      namespace: envoy-gateway
+    - name: gateway-17
+      namespace: envoy-gateway
+    - name: gateway-18
+      namespace: envoy-gateway
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-2
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-3
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-4
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-5
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-6
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-7
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-8
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-9
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-10
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-11
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-12
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-13
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-14
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-15
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-16
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-17
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-18
+        namespace: envoy-gateway
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-2
+    namespace: envoy-gateway
+  spec:
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+    - name: gateway-2
+      namespace: envoy-gateway
+    - name: gateway-3
+      namespace: envoy-gateway
+    - name: gateway-4
+      namespace: envoy-gateway
+    - name: gateway-5
+      namespace: envoy-gateway
+    - name: gateway-6
+      namespace: envoy-gateway
+    - name: gateway-7
+      namespace: envoy-gateway
+    - name: gateway-8
+      namespace: envoy-gateway
+    - name: gateway-9
+      namespace: envoy-gateway
+    - name: gateway-10
+      namespace: envoy-gateway
+    - name: gateway-11
+      namespace: envoy-gateway
+    - name: gateway-12
+      namespace: envoy-gateway
+    - name: gateway-13
+      namespace: envoy-gateway
+    - name: gateway-14
+      namespace: envoy-gateway
+    - name: gateway-15
+      namespace: envoy-gateway
+    - name: gateway-16
+      namespace: envoy-gateway
+    - name: gateway-17
+      namespace: envoy-gateway
+    - name: gateway-18
+      namespace: envoy-gateway
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /route-2
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-2
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-3
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-4
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-5
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-6
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-7
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-8
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-9
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-10
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-11
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-12
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-13
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-14
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-15
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-16
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-17
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-18
+        namespace: envoy-gateway
+infraIR:
+  envoy-gateway/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-1
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-2:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-2/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-2
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-2
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-3:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-3/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-3
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-3
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-4:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-4/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-4
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-4
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-5:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-5/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-5
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-5
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-6:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-6/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-6
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-6
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-7:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-7/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-7
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-7
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-8:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-8/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-8
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-8
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-9:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-9/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-9
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-9
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-10:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-10/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-10
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-10
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-11:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-11/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-11
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-11
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-12:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-12/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-12
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-12
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-13:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-13/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-13
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-13
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-14:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-14/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-14
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-14
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-15:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-15/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-15
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-15
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-16:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-16/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-16
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-16
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-17:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-17/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-17
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-17
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-18:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-18/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-18
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-18
+      namespace: envoy-gateway-system
+xdsIR:
+  envoy-gateway/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-2:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-2/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-3:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-3/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-4:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-4/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-5:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-5/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-6:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-6/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-7:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-7/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-8:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-8
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-8/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-9:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-9
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-9/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-10:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-10/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-11:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-11/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-12:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-12/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-13:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-13/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-14:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-14/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-15:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-15/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-16:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-16/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-17:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-17/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-18:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-18/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        traffic: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        traffic: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/backendtrafficpolicy-status-conditions.out.yaml b/internal/gatewayapi/testdata/backendtrafficpolicy-status-conditions.out.yaml
index 839a7ce90..e4f4fed69 100644
--- a/internal/gatewayapi/testdata/backendtrafficpolicy-status-conditions.out.yaml
+++ b/internal/gatewayapi/testdata/backendtrafficpolicy-status-conditions.out.yaml
@@ -398,12 +398,12 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-1
-    namespace: envoy-gateway
+    name: not-same-namespace-httproute
+    namespace: another-namespace
   spec:
     parentRefs:
-    - name: gateway-1
-      namespace: envoy-gateway
+    - name: not-same-namespace-gateway
+      namespace: another-namespace
     rules:
     - backendRefs:
       - name: service-1
@@ -415,9 +415,9 @@ httpRoutes:
     parents:
     - conditions:
       - lastTransitionTime: null
-        message: Route is accepted
-        reason: Accepted
-        status: "True"
+        message: No listeners included by this parent ref allowed this attachment.
+        reason: NotAllowedByListeners
+        status: "False"
         type: Accepted
       - lastTransitionTime: null
         message: Resolved all the Object references for the Route
@@ -426,18 +426,18 @@ httpRoutes:
         type: ResolvedRefs
       controllerName: gateway.envoyproxy.io/gatewayclass-controller
       parentRef:
-        name: gateway-1
-        namespace: envoy-gateway
+        name: not-same-namespace-gateway
+        namespace: another-namespace
 - apiVersion: gateway.networking.k8s.io/v1beta1
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: not-same-namespace-httproute
-    namespace: another-namespace
+    name: httproute-1
+    namespace: envoy-gateway
   spec:
     parentRefs:
-    - name: not-same-namespace-gateway
-      namespace: another-namespace
+    - name: gateway-1
+      namespace: envoy-gateway
     rules:
     - backendRefs:
       - name: service-1
@@ -449,9 +449,9 @@ httpRoutes:
     parents:
     - conditions:
       - lastTransitionTime: null
-        message: No listeners included by this parent ref allowed this attachment.
-        reason: NotAllowedByListeners
-        status: "False"
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
         type: Accepted
       - lastTransitionTime: null
         message: Resolved all the Object references for the Route
@@ -460,8 +460,8 @@ httpRoutes:
         type: ResolvedRefs
       controllerName: gateway.envoyproxy.io/gatewayclass-controller
       parentRef:
-        name: not-same-namespace-gateway
-        namespace: another-namespace
+        name: gateway-1
+        namespace: envoy-gateway
 infraIR:
   another-namespace/not-same-namespace-gateway:
     proxy:
diff --git a/internal/gatewayapi/testdata/backendtrafficpolicy-with-retries.in.yaml b/internal/gatewayapi/testdata/backendtrafficpolicy-with-retries.in.yaml
index 70a004ae6..5ecc975e1 100644
--- a/internal/gatewayapi/testdata/backendtrafficpolicy-with-retries.in.yaml
+++ b/internal/gatewayapi/testdata/backendtrafficpolicy-with-retries.in.yaml
@@ -115,6 +115,7 @@ backendTrafficPolicies:
       retryOn:
         triggers:
         - cancelled
+        - reset-before-request
       perRetry:
         timeout: 250ms
         backoff:
diff --git a/internal/gatewayapi/testdata/backendtrafficpolicy-with-retries.out.yaml b/internal/gatewayapi/testdata/backendtrafficpolicy-with-retries.out.yaml
index 49f939ba5..a3f97660f 100644
--- a/internal/gatewayapi/testdata/backendtrafficpolicy-with-retries.out.yaml
+++ b/internal/gatewayapi/testdata/backendtrafficpolicy-with-retries.out.yaml
@@ -118,6 +118,7 @@ backendTrafficPolicies:
       retryOn:
         triggers:
         - cancelled
+        - reset-before-request
     targetRef:
       group: gateway.networking.k8s.io
       kind: Gateway
@@ -461,6 +462,7 @@ xdsIR:
             retryOn:
               triggers:
               - cancelled
+              - reset-before-request
     readyListener:
       address: 0.0.0.0
       ipFamily: IPv4
diff --git a/internal/gatewayapi/testdata/clienttrafficpolicy-status-conditions-truncated.in.yaml b/internal/gatewayapi/testdata/clienttrafficpolicy-status-conditions-truncated.in.yaml
new file mode 100644
index 000000000..6796c3b95
--- /dev/null
+++ b/internal/gatewayapi/testdata/clienttrafficpolicy-status-conditions-truncated.in.yaml
@@ -0,0 +1,376 @@
+envoyExtensionPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: envoy-gateway
+    name: target-gateway-with-accepted-truncated-ancestors
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-1
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-2
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-3
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-4
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-5
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-6
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-7
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-8
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-9
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-10
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-11
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-12
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-13
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-14
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-15
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-16
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-17
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-18
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: envoy-gateway
+    name: target-gateway-with-attachment-conflict-truncated-ancestors
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-1
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-2
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-3
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-4
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-5
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-6
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-7
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-8
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-9
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-10
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-11
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-12
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-13
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-14
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-15
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-16
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-17
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-18
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-1
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-2
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-3
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-4
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-5
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-6
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-7
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-8
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-9
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-10
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-11
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-12
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-13
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-14
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-15
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-16
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-17
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-18
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
diff --git a/internal/gatewayapi/testdata/clienttrafficpolicy-status-conditions-truncated.out.yaml b/internal/gatewayapi/testdata/clienttrafficpolicy-status-conditions-truncated.out.yaml
new file mode 100644
index 000000000..d16377f34
--- /dev/null
+++ b/internal/gatewayapi/testdata/clienttrafficpolicy-status-conditions-truncated.out.yaml
@@ -0,0 +1,2038 @@
+envoyExtensionPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-gateway-with-accepted-truncated-ancestors
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-1
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-2
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-3
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-4
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-5
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-6
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-7
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-8
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-9
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-10
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-11
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-12
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-13
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-14
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-15
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-16
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-17
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-18
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-8, gateway-9'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-gateway-with-attachment-conflict-truncated-ancestors
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-1
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-2
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-3
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-4
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-5
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-6
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-7
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-8
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-9
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-10
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-11
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-12
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-13
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-14
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-15
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-16
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-17
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-18
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-1, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-10, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-11, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-12, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-13, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-14, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-15, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-16, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-17, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-18, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-3, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-4, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-5, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-6, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target Gateway gateway-7, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-8, gateway-9'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-2
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-3
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-4
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-5
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-6
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-7
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-8
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-9
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-10
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-11
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-12
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-13
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-14
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-15
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-16
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-17
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-18
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+infraIR:
+  envoy-gateway/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-1
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-2:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-2/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-2
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-2
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-3:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-3/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-3
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-3
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-4:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-4/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-4
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-4
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-5:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-5/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-5
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-5
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-6:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-6/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-6
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-6
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-7:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-7/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-7
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-7
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-8:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-8/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-8
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-8
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-9:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-9/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-9
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-9
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-10:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-10/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-10
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-10
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-11:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-11/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-11
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-11
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-12:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-12/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-12
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-12
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-13:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-13/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-13
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-13
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-14:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-14/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-14
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-14
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-15:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-15/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-15
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-15
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-16:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-16/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-16
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-16
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-17:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-17/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-17
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-17
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-18:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-18/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-18
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-18
+      namespace: envoy-gateway-system
+xdsIR:
+  envoy-gateway/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-2:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-2/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-3:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-3/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-4:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-4/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-5:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-5/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-6:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-6/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-7:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-7/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-8:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-8
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-8/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-9:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-9
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-9/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-10:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-10/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-11:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-11/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-12:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-12/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-13:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-13/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-14:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-14/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-15:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-15/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-16:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-16/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-17:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-17/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-18:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-18/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/clienttrafficpolicy-stream-idle-timeout.in.yaml b/internal/gatewayapi/testdata/clienttrafficpolicy-stream-idle-timeout.in.yaml
new file mode 100644
index 000000000..2c6afdc4e
--- /dev/null
+++ b/internal/gatewayapi/testdata/clienttrafficpolicy-stream-idle-timeout.in.yaml
@@ -0,0 +1,38 @@
+clientTrafficPolicies:
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: ClientTrafficPolicy
+    metadata:
+      namespace: envoy-gateway
+      name: target-gateway
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway
+        sectionName: http-1
+      timeout:
+        http:
+          requestReceivedTimeout: "5s"
+          streamIdleTimeout: "1h"
+gateways:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: Gateway
+    metadata:
+      namespace: envoy-gateway
+      name: gateway
+    spec:
+      gatewayClassName: envoy-gateway-class
+      listeners:
+        - name: http-1
+          protocol: HTTP
+          port: 80
+          allowedRoutes:
+            namespaces:
+              from: Same
+        - name: http-2
+          protocol: HTTP
+          port: 8080
+          allowedRoutes:
+            namespaces:
+              from: Same
+
diff --git a/internal/gatewayapi/testdata/clienttrafficpolicy-stream-idle-timeout.out.yaml b/internal/gatewayapi/testdata/clienttrafficpolicy-stream-idle-timeout.out.yaml
new file mode 100644
index 000000000..71ef791bd
--- /dev/null
+++ b/internal/gatewayapi/testdata/clienttrafficpolicy-stream-idle-timeout.out.yaml
@@ -0,0 +1,172 @@
+clientTrafficPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: ClientTrafficPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-gateway
+    namespace: envoy-gateway
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway
+      sectionName: http-1
+    timeout:
+      http:
+        requestReceivedTimeout: 5s
+        streamIdleTimeout: 1h
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway
+        namespace: envoy-gateway
+        sectionName: http-1
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http-1
+      port: 80
+      protocol: HTTP
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http-2
+      port: 8080
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http-1
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+    - attachedRoutes: 0
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http-2
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+infraIR:
+  envoy-gateway/gateway:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway/http-1
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      - address: null
+        name: envoy-gateway/gateway/http-2
+        ports:
+        - containerPort: 8080
+          name: http-8080
+          protocol: HTTP
+          servicePort: 8080
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway
+      namespace: envoy-gateway-system
+xdsIR:
+  envoy-gateway/gateway:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway
+        namespace: envoy-gateway
+        sectionName: http-1
+      name: envoy-gateway/gateway/http-1
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      timeout:
+        http:
+          requestReceivedTimeout: 5s
+          streamIdleTimeout: 1h0m0s
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway
+        namespace: envoy-gateway
+        sectionName: http-2
+      name: envoy-gateway/gateway/http-2
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 8080
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-status-conditions-truncated.in.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-status-conditions-truncated.in.yaml
new file mode 100644
index 000000000..8396fc434
--- /dev/null
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-status-conditions-truncated.in.yaml
@@ -0,0 +1,388 @@
+envoyExtensionPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: envoy-gateway
+    name: target-gateway-with-route-level-override-truncated-ancestors
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-9
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: envoy-gateway
+    name: target-httproute-with-attachment-conflict-truncated-ancestors
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: envoy-gateway
+    name: target-httproute-with-accepted-truncated-ancestors
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    namespace: envoy-gateway
+    name: httproute-1
+  spec:
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+    - namespace: envoy-gateway
+      name: gateway-2
+    - namespace: envoy-gateway
+      name: gateway-3
+    - namespace: envoy-gateway
+      name: gateway-4
+    - namespace: envoy-gateway
+      name: gateway-5
+    - namespace: envoy-gateway
+      name: gateway-6
+    - namespace: envoy-gateway
+      name: gateway-7
+    - namespace: envoy-gateway
+      name: gateway-8
+    - namespace: envoy-gateway
+      name: gateway-9
+    - namespace: envoy-gateway
+      name: gateway-10
+    - namespace: envoy-gateway
+      name: gateway-11
+    - namespace: envoy-gateway
+      name: gateway-12
+    - namespace: envoy-gateway
+      name: gateway-13
+    - namespace: envoy-gateway
+      name: gateway-14
+    - namespace: envoy-gateway
+      name: gateway-15
+    - namespace: envoy-gateway
+      name: gateway-16
+    - namespace: envoy-gateway
+      name: gateway-17
+    - namespace: envoy-gateway
+      name: gateway-18
+    rules:
+    - matches:
+      - path:
+          value: "/"
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    namespace: envoy-gateway
+    name: httproute-2
+  spec:
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+    - namespace: envoy-gateway
+      name: gateway-2
+    - namespace: envoy-gateway
+      name: gateway-3
+    - namespace: envoy-gateway
+      name: gateway-4
+    - namespace: envoy-gateway
+      name: gateway-5
+    - namespace: envoy-gateway
+      name: gateway-6
+    - namespace: envoy-gateway
+      name: gateway-7
+    - namespace: envoy-gateway
+      name: gateway-8
+    - namespace: envoy-gateway
+      name: gateway-9
+    - namespace: envoy-gateway
+      name: gateway-10
+    - namespace: envoy-gateway
+      name: gateway-11
+    - namespace: envoy-gateway
+      name: gateway-12
+    - namespace: envoy-gateway
+      name: gateway-13
+    - namespace: envoy-gateway
+      name: gateway-14
+    - namespace: envoy-gateway
+      name: gateway-15
+    - namespace: envoy-gateway
+      name: gateway-16
+    - namespace: envoy-gateway
+      name: gateway-17
+    - namespace: envoy-gateway
+      name: gateway-18
+    rules:
+    - matches:
+      - path:
+          value: "/route-2"
+      backendRefs:
+      - name: service-1
+        port: 8080
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-1
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-2
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-3
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-4
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-5
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-6
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-7
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-8
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-9
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-10
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-11
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-12
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-13
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-14
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-15
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-16
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-17
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-18
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-status-conditions-truncated.out.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-status-conditions-truncated.out.yaml
new file mode 100644
index 000000000..cb62b14f1
--- /dev/null
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-status-conditions-truncated.out.yaml
@@ -0,0 +1,3361 @@
+envoyExtensionPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-gateway-with-route-level-override-truncated-ancestors
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-9
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-9
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'This policy is being overridden by other envoyExtensionPolicies
+          for these routes: [envoy-gateway/httproute-1 envoy-gateway/httproute-2]'
+        reason: Overridden
+        status: "True"
+        type: Overridden
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-7, gateway-8'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-httproute-with-attachment-conflict-truncated-ancestors
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another EnvoyExtensionPolicy
+          has already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-8, gateway-9'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-httproute-with-accepted-truncated-ancestors
+    namespace: envoy-gateway
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-8, gateway-9'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-2
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-3
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-4
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-5
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-6
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-7
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-8
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-9
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-10
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-11
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-12
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-13
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-14
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-15
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-16
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-17
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-18
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: envoy-gateway
+  spec:
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+    - name: gateway-2
+      namespace: envoy-gateway
+    - name: gateway-3
+      namespace: envoy-gateway
+    - name: gateway-4
+      namespace: envoy-gateway
+    - name: gateway-5
+      namespace: envoy-gateway
+    - name: gateway-6
+      namespace: envoy-gateway
+    - name: gateway-7
+      namespace: envoy-gateway
+    - name: gateway-8
+      namespace: envoy-gateway
+    - name: gateway-9
+      namespace: envoy-gateway
+    - name: gateway-10
+      namespace: envoy-gateway
+    - name: gateway-11
+      namespace: envoy-gateway
+    - name: gateway-12
+      namespace: envoy-gateway
+    - name: gateway-13
+      namespace: envoy-gateway
+    - name: gateway-14
+      namespace: envoy-gateway
+    - name: gateway-15
+      namespace: envoy-gateway
+    - name: gateway-16
+      namespace: envoy-gateway
+    - name: gateway-17
+      namespace: envoy-gateway
+    - name: gateway-18
+      namespace: envoy-gateway
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-2
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-3
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-4
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-5
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-6
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-7
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-8
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-9
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-10
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-11
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-12
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-13
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-14
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-15
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-16
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-17
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-18
+        namespace: envoy-gateway
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-2
+    namespace: envoy-gateway
+  spec:
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+    - name: gateway-2
+      namespace: envoy-gateway
+    - name: gateway-3
+      namespace: envoy-gateway
+    - name: gateway-4
+      namespace: envoy-gateway
+    - name: gateway-5
+      namespace: envoy-gateway
+    - name: gateway-6
+      namespace: envoy-gateway
+    - name: gateway-7
+      namespace: envoy-gateway
+    - name: gateway-8
+      namespace: envoy-gateway
+    - name: gateway-9
+      namespace: envoy-gateway
+    - name: gateway-10
+      namespace: envoy-gateway
+    - name: gateway-11
+      namespace: envoy-gateway
+    - name: gateway-12
+      namespace: envoy-gateway
+    - name: gateway-13
+      namespace: envoy-gateway
+    - name: gateway-14
+      namespace: envoy-gateway
+    - name: gateway-15
+      namespace: envoy-gateway
+    - name: gateway-16
+      namespace: envoy-gateway
+    - name: gateway-17
+      namespace: envoy-gateway
+    - name: gateway-18
+      namespace: envoy-gateway
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /route-2
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-2
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-3
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-4
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-5
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-6
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-7
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-8
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-9
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-10
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-11
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-12
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-13
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-14
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-15
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-16
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-17
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-18
+        namespace: envoy-gateway
+infraIR:
+  envoy-gateway/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-1
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-2:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-2/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-2
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-2
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-3:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-3/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-3
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-3
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-4:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-4/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-4
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-4
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-5:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-5/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-5
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-5
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-6:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-6/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-6
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-6
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-7:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-7/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-7
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-7
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-8:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-8/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-8
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-8
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-9:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-9/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-9
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-9
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-10:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-10/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-10
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-10
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-11:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-11/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-11
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-11
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-12:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-12/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-12
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-12
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-13:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-13/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-13
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-13
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-14:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-14/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-14
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-14
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-15:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-15/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-15
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-15
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-16:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-16/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-16
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-16
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-17:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-17/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-17
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-17
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-18:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-18/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-18
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-18
+      namespace: envoy-gateway-system
+xdsIR:
+  envoy-gateway/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-2:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-2/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-3:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-3/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-4:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-4/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-5:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-5/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-6:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-6/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-7:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-7/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-8:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-8
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-8/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-9:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-9
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-9/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-10:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-10/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-11:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-11/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-12:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-12/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-13:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-13/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-14:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-14/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-15:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-15/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-16:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-16/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-17:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-17/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-18:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-18/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+      - directResponse:
+          statusCode: 500
+        envoyExtensions: {}
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-status-conditions.out.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-status-conditions.out.yaml
index c76c137b0..796677a80 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-status-conditions.out.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-status-conditions.out.yaml
@@ -398,12 +398,12 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-1
-    namespace: envoy-gateway
+    name: not-same-namespace-httproute
+    namespace: another-namespace
   spec:
     parentRefs:
-    - name: gateway-1
-      namespace: envoy-gateway
+    - name: not-same-namespace-gateway
+      namespace: another-namespace
     rules:
     - backendRefs:
       - name: service-1
@@ -415,9 +415,9 @@ httpRoutes:
     parents:
     - conditions:
       - lastTransitionTime: null
-        message: Route is accepted
-        reason: Accepted
-        status: "True"
+        message: No listeners included by this parent ref allowed this attachment.
+        reason: NotAllowedByListeners
+        status: "False"
         type: Accepted
       - lastTransitionTime: null
         message: Resolved all the Object references for the Route
@@ -426,18 +426,18 @@ httpRoutes:
         type: ResolvedRefs
       controllerName: gateway.envoyproxy.io/gatewayclass-controller
       parentRef:
-        name: gateway-1
-        namespace: envoy-gateway
+        name: not-same-namespace-gateway
+        namespace: another-namespace
 - apiVersion: gateway.networking.k8s.io/v1beta1
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: not-same-namespace-httproute
-    namespace: another-namespace
+    name: httproute-1
+    namespace: envoy-gateway
   spec:
     parentRefs:
-    - name: not-same-namespace-gateway
-      namespace: another-namespace
+    - name: gateway-1
+      namespace: envoy-gateway
     rules:
     - backendRefs:
       - name: service-1
@@ -449,9 +449,9 @@ httpRoutes:
     parents:
     - conditions:
       - lastTransitionTime: null
-        message: No listeners included by this parent ref allowed this attachment.
-        reason: NotAllowedByListeners
-        status: "False"
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
         type: Accepted
       - lastTransitionTime: null
         message: Resolved all the Object references for the Route
@@ -460,8 +460,8 @@ httpRoutes:
         type: ResolvedRefs
       controllerName: gateway.envoyproxy.io/gatewayclass-controller
       parentRef:
-        name: not-same-namespace-gateway
-        namespace: another-namespace
+        name: gateway-1
+        namespace: envoy-gateway
 infraIR:
   another-namespace/not-same-namespace-gateway:
     proxy:
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-invalid-no-service.in.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-invalid-no-service.in.yaml
index dc475a1d7..99354eaa1 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-invalid-no-service.in.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-invalid-no-service.in.yaml
@@ -18,7 +18,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     namespace: default
-    name: httproute-1
+    name: httproute-1   # should return 500 because the ext proc in the attached policy is failclose.
   spec:
     hostnames:
     - www.foo.com
@@ -33,19 +33,133 @@ httpRoutes:
       backendRefs:
       - name: service-1
         port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-2    # should not return 500 because the ext proc in the attached policy is failopen.
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - namespace: default
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: /bar
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-3   # should return 500 because there are two ext procs in the attached policy, one failopen and one failclose.
+  spec:
+    hostnames:
+    - www.baz.com
+    parentRefs:
+    - namespace: default
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: /baz
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-4   # should return 500 because there are one invalid ext procs with failopen and one invalid lua in the attached policy.
+  spec:
+    hostnames:
+    - www.qux.com
+    parentRefs:
+    - namespace: default
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: /qux
+      backendRefs:
+      - name: service-1
+        port: 8080
 envoyExtensionPolicies:
 - apiVersion: gateway.envoyproxy.io/v1alpha1
   kind: EnvoyExtensionPolicy
   metadata:
     namespace: default
-    name: policy-for-gateway
+    name: policy-for-httproute-1
   spec:
     targetRef:
       group: gateway.networking.k8s.io
-      kind: Gateway
-      name: gateway-1
+      kind: HTTPRoute
+      name: httproute-1
     extProc:
     - backendRefs:
       - name: grpc-backend
         namespace: envoy-gateway
         port: 9000
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: default
+    name: policy-for-httproute-2
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+    extProc:
+    - failOpen: true
+      backendRefs:
+      - name: grpc-backend
+        namespace: envoy-gateway
+        port: 9000
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: default
+    name: policy-for-httproute-3
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-3
+    extProc:
+    - backendRefs:
+      - name: grpc-backend-1
+        namespace: envoy-gateway
+        port: 9000
+      failOpen: true
+    - backendRefs:
+      - name: grpc-backend-2
+        namespace: envoy-gateway
+        port: 9000
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: default
+    name: policy-for-httproute-4
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-4
+    extProc:
+    - failOpen: true
+      backendRefs:
+      - name: grpc-backend-2
+        namespace: envoy-gateway
+        port: 9000
+    lua:
+    - type: Inline
+      inline: "function envoy_on_response(response_handle)
+    response_handle:UnknownApi()
+    end"
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-invalid-no-service.out.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-invalid-no-service.out.yaml
index 98727d784..4f76df5f3 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-invalid-no-service.out.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-invalid-no-service.out.yaml
@@ -3,7 +3,7 @@ envoyExtensionPolicies:
   kind: EnvoyExtensionPolicy
   metadata:
     creationTimestamp: null
-    name: policy-for-gateway
+    name: policy-for-httproute-1
     namespace: default
   spec:
     extProc:
@@ -13,8 +13,8 @@ envoyExtensionPolicies:
         port: 9000
     targetRef:
       group: gateway.networking.k8s.io
-      kind: Gateway
-      name: gateway-1
+      kind: HTTPRoute
+      name: httproute-1
   status:
     ancestors:
     - ancestorRef:
@@ -22,6 +22,7 @@ envoyExtensionPolicies:
         kind: Gateway
         name: gateway-1
         namespace: default
+        sectionName: http
       conditions:
       - lastTransitionTime: null
         message: 'ExtProc: service envoy-gateway/grpc-backend not found.'
@@ -29,6 +30,116 @@ envoyExtensionPolicies:
         status: "False"
         type: Accepted
       controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-httproute-2
+    namespace: default
+  spec:
+    extProc:
+    - backendRefs:
+      - name: grpc-backend
+        namespace: envoy-gateway
+        port: 9000
+      failOpen: true
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: 'ExtProc: service envoy-gateway/grpc-backend not found.'
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-httproute-3
+    namespace: default
+  spec:
+    extProc:
+    - backendRefs:
+      - name: grpc-backend-1
+        namespace: envoy-gateway
+        port: 9000
+      failOpen: true
+    - backendRefs:
+      - name: grpc-backend-2
+        namespace: envoy-gateway
+        port: 9000
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-3
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: |-
+          ExtProc: service envoy-gateway/grpc-backend-1 not found
+          service envoy-gateway/grpc-backend-2 not found.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-httproute-4
+    namespace: default
+  spec:
+    extProc:
+    - backendRefs:
+      - name: grpc-backend-2
+        namespace: envoy-gateway
+        port: 9000
+      failOpen: true
+    lua:
+    - inline: function envoy_on_response(response_handle) response_handle:UnknownApi()
+        end
+      type: Inline
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-4
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: "Lua: validation failed for lua body in policy with name envoyextensionpolicy/default/policy-for-httproute-4/lua/0:
+          failed to validate with envoy_on_response: <string>:612: attempt to call
+          a non-function object\nstack traceback:\n\t<string>:612: in function 'envoy_on_response'\n\t<string>:613:
+          in main chunk\n\t[G]: ?\nExtProc: service envoy-gateway/grpc-backend-2 not
+          found."
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
 gateways:
 - apiVersion: gateway.networking.k8s.io/v1
   kind: Gateway
@@ -47,7 +158,7 @@ gateways:
       protocol: HTTP
   status:
     listeners:
-    - attachedRoutes: 1
+    - attachedRoutes: 4
       conditions:
       - lastTransitionTime: null
         message: Sending translated listener configuration to the data plane
@@ -109,6 +220,120 @@ httpRoutes:
         name: gateway-1
         namespace: default
         sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-2
+    namespace: default
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /bar
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-3
+    namespace: default
+  spec:
+    hostnames:
+    - www.baz.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /baz
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-4
+    namespace: default
+  spec:
+    hostnames:
+    - www.qux.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /qux
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
 infraIR:
   default/gateway-1:
     proxy:
@@ -181,6 +406,97 @@ xdsIR:
           distinct: false
           name: ""
           prefix: /foo
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-2
+            namespace: default
+          name: httproute/default/httproute-2/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-2/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: www.bar.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: default
+        name: httproute/default/httproute-2/rule/0/match/0/www_bar_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /bar
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-3
+            namespace: default
+          name: httproute/default/httproute-3/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-3/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.baz.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-3
+          namespace: default
+        name: httproute/default/httproute-3/rule/0/match/0/www_baz_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /baz
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-4
+            namespace: default
+          name: httproute/default/httproute-4/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-4/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.qux.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-4
+          namespace: default
+        name: httproute/default/httproute-4/rule/0/match/0/www_qux_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /qux
     readyListener:
       address: 0.0.0.0
       ipFamily: IPv4
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-multiple-backendrefs.in.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-multiple-backendrefs.in.yaml
index b99388294..5e5dc68a3 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-multiple-backendrefs.in.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-multiple-backendrefs.in.yaml
@@ -63,12 +63,15 @@ services:
     - port: 8000
       name: grpc
       protocol: TCP
-- apiVersion: v1
-  kind: Service
+serviceImports:
+- apiVersion: multicluster.x-k8s.io/v1alpha1
+  kind: ServiceImport
   metadata:
     namespace: default
     name: grpc-backend-2
   spec:
+    ips:
+    - 8.8.8.8
     ports:
     - port: 9000
       name: grpc
@@ -97,7 +100,7 @@ endpointSlices:
     name: endpointslice-grpc-backend-2
     namespace: default
     labels:
-      kubernetes.io/service-name: grpc-backend-2
+      multicluster.kubernetes.io/service-name: grpc-backend-2
   addressType: IPv4
   ports:
   - name: grpc
@@ -201,8 +204,10 @@ envoyExtensionPolicies:
       - Name: grpc-backend
         Namespace: envoy-gateway
         Port: 8000
-      - Name: grpc-backend-2
-        Port: 9000
+      - group: multicluster.x-k8s.io
+        kind: ServiceImport
+        name: grpc-backend-2
+        port: 9000
       - Name: backend-ip
         Kind: Backend
         Group: gateway.envoyproxy.io
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-multiple-backendrefs.out.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-multiple-backendrefs.out.yaml
index 56fe0a5f9..ab9ba02fb 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-multiple-backendrefs.out.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-multiple-backendrefs.out.yaml
@@ -112,7 +112,9 @@ envoyExtensionPolicies:
       - name: grpc-backend
         namespace: envoy-gateway
         port: 8000
-      - name: grpc-backend-2
+      - group: multicluster.x-k8s.io
+        kind: ServiceImport
+        name: grpc-backend-2
         port: 9000
       - group: gateway.envoyproxy.io
         kind: Backend
@@ -347,7 +349,7 @@ xdsIR:
                 - host: 8.8.8.8
                   port: 9000
                 metadata:
-                  kind: Service
+                  kind: ServiceImport
                   name: grpc-backend-2
                   namespace: default
                   sectionName: "9000"
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-disabled.in.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-disabled.in.yaml
index 97bd5af0d..ecfffbcfb 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-disabled.in.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-disabled.in.yaml
@@ -5,7 +5,7 @@ envoyProxyForGatewayClass:
     namespace: envoy-gateway-system
     name: test
   spec:
-    disableLuaValidation: true
+    luaValidation: Disabled
 gateways:
 - apiVersion: gateway.networking.k8s.io/v1
   kind: Gateway
@@ -46,14 +46,18 @@ envoyextensionpolicies:
   kind: EnvoyExtensionPolicy
   metadata:
     namespace: default
-    name: policy-for-http-route   # Invalid Lua but still gets accepted
+    name: policy-for-http-route
   spec:
     targetRef:
       group: gateway.networking.k8s.io
       kind: HTTPRoute
       name: httproute-1
     lua:
-    - type: Inline
-      inline: "function envoy_on_response(response_handle)
-    response_handle:UnknownApi()
-    end"
+    - type: Inline  # Invalid Lua syntax (missing then keyword in if statement) but should be accepted
+      inline: |
+        function envoy_on_response(response_handle)
+          local value = 10
+          if value > 5
+            print("Value is greater than 5")
+          end
+        end
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-disabled.out.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-disabled.out.yaml
index c825c8f25..b73d1a359 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-disabled.out.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-disabled.out.yaml
@@ -7,7 +7,12 @@ envoyExtensionPolicies:
     namespace: default
   spec:
     lua:
-    - inline: function envoy_on_response(response_handle) response_handle:UnknownApi()
+    - inline: |
+        function envoy_on_response(response_handle)
+          local value = 10
+          if value > 5
+            print("Value is greater than 5")
+          end
         end
       type: Inline
     targetRef:
@@ -120,8 +125,8 @@ infraIR:
           name: test
           namespace: envoy-gateway-system
         spec:
-          disableLuaValidation: true
           logging: {}
+          luaValidation: Disabled
         status: {}
       listeners:
       - address: null
@@ -181,7 +186,12 @@ xdsIR:
             weight: 1
         envoyExtensions:
           luas:
-          - Code: function envoy_on_response(response_handle) response_handle:UnknownApi()
+          - Code: |
+              function envoy_on_response(response_handle)
+                local value = 10
+                if value > 5
+                  print("Value is greater than 5")
+                end
               end
             Name: envoyextensionpolicy/default/policy-for-http-route/lua/0
         hostname: www.example.com
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-syntax.in.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-syntax.in.yaml
new file mode 100644
index 000000000..17fb6fca6
--- /dev/null
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-syntax.in.yaml
@@ -0,0 +1,113 @@
+envoyProxyForGatewayClass:
+  apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyProxy
+  metadata:
+    namespace: envoy-gateway-system
+    name: test
+  spec:
+    luaValidation: Syntax
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-1
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: All
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-1
+  spec:
+    hostnames:
+    - www.example.com
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: "/foo"
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-2
+  spec:
+    hostnames:
+    - www.example.com
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: "/foo"
+      backendRefs:
+      - name: service-1
+        port: 8080
+envoyextensionpolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: default
+    name: policy-for-http-route
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+    lua:
+    - type: Inline  # Lua with external library and UnknownApi() call but correct syntax so should be accepted
+      inline: |
+        local json = require("json")
+        function envoy_on_response(response_handle)
+            local content_type = response_handle:headers():get("content-type")
+            if content_type and string.find(content_type, "application/json", 1, true) then
+                response_handle:body():setBytes(0, response_handle:body():length())
+                response_handle:UnknownApi()
+                local response_body = response_handle:body():getBytes(0, response_handle:body():length())
+                if response_body and #response_body > 0 then
+                    local parsed_json = json.decode(response_body)
+                    if type(parsed_json) == "table" then
+                        response_handle:logInfo("Successfully parsed JSON response.")
+                    else
+                        response_handle:logWarn("Parsed JSON is not a table, or unexpected format.")
+                    end
+                end
+            end
+            return envoy.lua.ResponseStatus.Continue
+        end
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: default
+    name: policy-for-http-route-2
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+    lua:
+    - type: Inline  # Invalid Lua syntax (missing then keyword in if statement) so should be rejected
+      inline: |
+        function envoy_on_response(response_handle)
+          local value = 10
+          if value > 5
+            print("Value is greater than 5")
+          end
+        end
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-syntax.out.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-syntax.out.yaml
new file mode 100644
index 000000000..c9dc01878
--- /dev/null
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua-validation-syntax.out.yaml
@@ -0,0 +1,342 @@
+envoyExtensionPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-http-route
+    namespace: default
+  spec:
+    lua:
+    - inline: |
+        local json = require("json")
+        function envoy_on_response(response_handle)
+            local content_type = response_handle:headers():get("content-type")
+            if content_type and string.find(content_type, "application/json", 1, true) then
+                response_handle:body():setBytes(0, response_handle:body():length())
+                response_handle:UnknownApi()
+                local response_body = response_handle:body():getBytes(0, response_handle:body():length())
+                if response_body and #response_body > 0 then
+                    local parsed_json = json.decode(response_body)
+                    if type(parsed_json) == "table" then
+                        response_handle:logInfo("Successfully parsed JSON response.")
+                    else
+                        response_handle:logWarn("Parsed JSON is not a table, or unexpected format.")
+                    end
+                end
+            end
+            return envoy.lua.ResponseStatus.Continue
+        end
+      type: Inline
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-http-route-2
+    namespace: default
+  spec:
+    lua:
+    - inline: |
+        function envoy_on_response(response_handle)
+          local value = 10
+          if value > 5
+            print("Value is greater than 5")
+          end
+        end
+      type: Inline
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: |-
+          Lua: validation failed for lua body in policy with name envoyextensionpolicy/default/policy-for-http-route-2/lua/0: failed to validate with envoy_on_response: <string> line:615(column:9) near 'print':   syntax error
+          .
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: default
+  spec:
+    hostnames:
+    - www.example.com
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /foo
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-2
+    namespace: default
+  spec:
+    hostnames:
+    - www.example.com
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /foo
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+infraIR:
+  envoy-gateway/gateway-1:
+    proxy:
+      config:
+        apiVersion: gateway.envoyproxy.io/v1alpha1
+        kind: EnvoyProxy
+        metadata:
+          creationTimestamp: null
+          name: test
+          namespace: envoy-gateway-system
+        spec:
+          logging: {}
+          luaValidation: Syntax
+        status: {}
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-1
+      namespace: envoy-gateway-system
+xdsIR:
+  envoy-gateway/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        envoyExtensions:
+          luas:
+          - Code: |
+              local json = require("json")
+              function envoy_on_response(response_handle)
+                  local content_type = response_handle:headers():get("content-type")
+                  if content_type and string.find(content_type, "application/json", 1, true) then
+                      response_handle:body():setBytes(0, response_handle:body():length())
+                      response_handle:UnknownApi()
+                      local response_body = response_handle:body():getBytes(0, response_handle:body():length())
+                      if response_body and #response_body > 0 then
+                          local parsed_json = json.decode(response_body)
+                          if type(parsed_json) == "table" then
+                              response_handle:logInfo("Successfully parsed JSON response.")
+                          else
+                              response_handle:logWarn("Parsed JSON is not a table, or unexpected format.")
+                          end
+                      end
+                  end
+                  return envoy.lua.ResponseStatus.Continue
+              end
+            Name: envoyextensionpolicy/default/policy-for-http-route/lua/0
+        hostname: www.example.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/0/match/0/www_example_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-2
+            namespace: default
+          name: httproute/default/httproute-2/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-2/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.example.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: default
+        name: httproute/default/httproute-2/rule/0/match/0/www_example_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua.in.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua.in.yaml
index e47c317a3..acaf4386c 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua.in.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua.in.yaml
@@ -72,14 +72,29 @@ envoyextensionpolicies:
   kind: EnvoyExtensionPolicy
   metadata:
     namespace: default
-    name: policy-for-http-route   # Invalid Lua
+    name: policy-for-http-route
   spec:
     targetRef:
       group: gateway.networking.k8s.io
       kind: HTTPRoute
       name: httproute-1
     lua:
-    - type: Inline
-      inline: "function envoy_on_response(response_handle)
-    response_handle:UnknownApi()
-    end"
+    - type: Inline  # Lua with external library and UnknownApi() call should be rejected
+      inline: |
+        function envoy_on_response(response_handle)
+            local content_type = response_handle:headers():get("content-type")
+            if content_type and string.find(content_type, "application/json", 1, true) then
+                response_handle:body():setBytes(0, response_handle:body():length())
+                response_handle:UnknownApi()
+                local response_body = response_handle:body():getBytes(0, response_handle:body():length())
+                if response_body and #response_body > 0 then
+                    local parsed_json = json.decode(response_body)
+                    if type(parsed_json) == "table" then
+                        response_handle:logInfo("Successfully parsed JSON response.")
+                    else
+                        response_handle:logWarn("Parsed JSON is not a table, or unexpected format.")
+                    end
+                end
+            end
+            return envoy.lua.ResponseStatus.Continue
+        end
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua.out.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua.out.yaml
index 4747ef8a9..065b52800 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua.out.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-invalid-lua.out.yaml
@@ -7,7 +7,23 @@ envoyExtensionPolicies:
     namespace: default
   spec:
     lua:
-    - inline: function envoy_on_response(response_handle) response_handle:UnknownApi()
+    - inline: |
+        function envoy_on_response(response_handle)
+            local content_type = response_handle:headers():get("content-type")
+            if content_type and string.find(content_type, "application/json", 1, true) then
+                response_handle:body():setBytes(0, response_handle:body():length())
+                response_handle:UnknownApi()
+                local response_body = response_handle:body():getBytes(0, response_handle:body():length())
+                if response_body and #response_body > 0 then
+                    local parsed_json = json.decode(response_body)
+                    if type(parsed_json) == "table" then
+                        response_handle:logInfo("Successfully parsed JSON response.")
+                    else
+                        response_handle:logWarn("Parsed JSON is not a table, or unexpected format.")
+                    end
+                end
+            end
+            return envoy.lua.ResponseStatus.Continue
         end
       type: Inline
     targetRef:
@@ -25,9 +41,9 @@ envoyExtensionPolicies:
       conditions:
       - lastTransitionTime: null
         message: "Lua: validation failed for lua body in policy with name envoyextensionpolicy/default/policy-for-http-route/lua/0:
-          failed to mock run envoy_on_response: <string>:614: attempt to call a non-function
-          object\nstack traceback:\n\t<string>:614: in function 'envoy_on_response'\n\t<string>:615:
-          in main chunk\n\t[G]: ?."
+          failed to validate with envoy_on_response: <string>:627: attempt to index
+          a non-table object(nil) with key 'lua'\nstack traceback:\n\t<string>:627:
+          in function 'envoy_on_response'\n\t<string>:630: in main chunk\n\t[G]: ?."
         reason: Invalid
         status: "False"
         type: Accepted
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-wasm-invalid-configuration.in.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-wasm-invalid-configuration.in.yaml
new file mode 100644
index 000000000..11f01273b
--- /dev/null
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-wasm-invalid-configuration.in.yaml
@@ -0,0 +1,318 @@
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    namespace: default
+    name: gateway-1
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: All
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    namespace: default
+    name: gateway-2
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: All
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    namespace: default
+    name: gateway-3
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: All
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-1   # should return 500 because the Wasm in the attached policy is failclose.
+  spec:
+    hostnames:
+    - www.foo.com
+    parentRefs:
+    - namespace: default
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: /foo
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-2    # should not return 500 because the Wasm in the attached policy is failopen.
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - namespace: default
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: /bar
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-3   # should return 500 because there are two Wasms in the attached policy, one failopen and one failclose.
+  spec:
+    hostnames:
+    - www.baz.com
+    parentRefs:
+    - namespace: default
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: /baz
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-4   # should return 500 because there are one invalid Wasm with failopen and one invalid lua in the attached policy.
+  spec:
+    hostnames:
+    - www.qux.com
+    parentRefs:
+    - namespace: default
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: /qux
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-5   # should not return 500 because the Wasm in the attached policy is failopen.
+  spec:
+    hostnames:
+    - www.foo.com
+    parentRefs:
+    - namespace: default
+      name: gateway-2
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: /foo
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-6   # should not return 500 because the Wasm in the attached policy is failopen.
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - namespace: default
+      name: gateway-2
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: /bar
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-6   # should return 500 because the Wasm in the attached policy is failclose.
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - namespace: default
+      name: gateway-3
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          value: /bar
+      backendRefs:
+      - name: service-1
+        port: 8080
+
+envoyExtensionPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: default
+    name: policy-for-httproute-1
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+    wasm:
+    - name: wasm-filter-1
+      rootID: "my-root-id"
+      code:
+        type: Image
+        image:
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+          pullSecretRef:
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: default
+    name: policy-for-httproute-2
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+    wasm:
+    - name: wasm-filter-1
+      failOpen: true
+      rootID: "my-root-id"
+      code:
+        type: Image
+        image:
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+          pullSecretRef:
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: default
+    name: policy-for-httproute-3
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-3
+    wasm:
+    - name: wasm-filter-1
+      failOpen: true
+      rootID: "my-root-id"
+      code:
+        type: Image
+        image:
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+          pullSecretRef:
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+    - name: wasm-filter-1
+      failOpen: false
+      rootID: "my-root-id"
+      code:
+        type: Image
+        image:
+          url: oci://www.example.com/wasm-filter-2:v1.0.0
+          pullSecretRef:
+            name: my-pull-secret-2
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: default
+    name: policy-for-httproute-4
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-4
+    wasm:
+    - name: wasm-filter-1
+      failOpen: true
+      rootID: "my-root-id"
+      code:
+        type: Image
+        image:
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+          pullSecretRef:
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+    lua:
+    - type: Inline
+      inline: "function envoy_on_response(response_handle)
+    response_handle:UnknownApi()
+    end"
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: default
+    name: policy-for-gateway-2
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-2
+    wasm:
+    - name: wasm-filter-1
+      failOpen: true
+      rootID: "my-root-id"
+      code:
+        type: Image
+        image:
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+          pullSecretRef:
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    namespace: default
+    name: policy-for-gateway-3
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-3
+    wasm:
+    - name: wasm-filter-1
+      rootID: "my-root-id"
+      code:
+        type: Image
+        image:
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+          pullSecretRef:
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-wasm-invalid-configuration.out.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-wasm-invalid-configuration.out.yaml
new file mode 100644
index 000000000..abc0d3fde
--- /dev/null
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-wasm-invalid-configuration.out.yaml
@@ -0,0 +1,986 @@
+envoyExtensionPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-httproute-1
+    namespace: default
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+    wasm:
+    - code:
+        image:
+          pullSecretRef:
+            group: null
+            kind: null
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+        type: Image
+      name: wasm-filter-1
+      rootID: my-root-id
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: 'Wasm: secret default/my-pull-secret-1 does not exist.'
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-httproute-2
+    namespace: default
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+    wasm:
+    - code:
+        image:
+          pullSecretRef:
+            group: null
+            kind: null
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+        type: Image
+      failOpen: true
+      name: wasm-filter-1
+      rootID: my-root-id
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: 'Wasm: secret default/my-pull-secret-1 does not exist.'
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-httproute-3
+    namespace: default
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-3
+    wasm:
+    - code:
+        image:
+          pullSecretRef:
+            group: null
+            kind: null
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+        type: Image
+      failOpen: true
+      name: wasm-filter-1
+      rootID: my-root-id
+    - code:
+        image:
+          pullSecretRef:
+            group: null
+            kind: null
+            name: my-pull-secret-2
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+          url: oci://www.example.com/wasm-filter-2:v1.0.0
+        type: Image
+      failOpen: false
+      name: wasm-filter-1
+      rootID: my-root-id
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: |-
+          Wasm: secret default/my-pull-secret-1 does not exist
+          secret default/my-pull-secret-2 does not exist.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-httproute-4
+    namespace: default
+  spec:
+    lua:
+    - inline: function envoy_on_response(response_handle) response_handle:UnknownApi()
+        end
+      type: Inline
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-4
+    wasm:
+    - code:
+        image:
+          pullSecretRef:
+            group: null
+            kind: null
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+        type: Image
+      failOpen: true
+      name: wasm-filter-1
+      rootID: my-root-id
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: "Wasm: secret default/my-pull-secret-1 does not exist\nLua: validation
+          failed for lua body in policy with name envoyextensionpolicy/default/policy-for-httproute-4/lua/0:
+          failed to validate with envoy_on_response: <string>:612: attempt to call
+          a non-function object\nstack traceback:\n\t<string>:612: in function 'envoy_on_response'\n\t<string>:613:
+          in main chunk\n\t[G]: ?."
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-gateway-2
+    namespace: default
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-2
+    wasm:
+    - code:
+        image:
+          pullSecretRef:
+            group: null
+            kind: null
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+        type: Image
+      failOpen: true
+      name: wasm-filter-1
+      rootID: my-root-id
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: default
+      conditions:
+      - lastTransitionTime: null
+        message: 'Wasm: secret default/my-pull-secret-1 does not exist.'
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: EnvoyExtensionPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-gateway-3
+    namespace: default
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-3
+    wasm:
+    - code:
+        image:
+          pullSecretRef:
+            group: null
+            kind: null
+            name: my-pull-secret-1
+          sha256: 314100af781b98a8ca175d5bf90a8bf76576e20a2f397a88223404edc6ebfd46
+          url: oci://www.example.com/wasm-filter-1:v1.0.0
+        type: Image
+      name: wasm-filter-1
+      rootID: my-root-id
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: default
+      conditions:
+      - lastTransitionTime: null
+        message: 'Wasm: secret default/my-pull-secret-1 does not exist.'
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: default
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 4
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-2
+    namespace: default
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-3
+    namespace: default
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 1
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: default
+  spec:
+    hostnames:
+    - www.foo.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /foo
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-2
+    namespace: default
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /bar
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-3
+    namespace: default
+  spec:
+    hostnames:
+    - www.baz.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /baz
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-4
+    namespace: default
+  spec:
+    hostnames:
+    - www.qux.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /qux
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-5
+    namespace: default
+  spec:
+    hostnames:
+    - www.foo.com
+    parentRefs:
+    - name: gateway-2
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /foo
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-2
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-6
+    namespace: default
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - name: gateway-2
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /bar
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-2
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-6
+    namespace: default
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - name: gateway-3
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /bar
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-3
+        namespace: default
+        sectionName: http
+infraIR:
+  default/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: default/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: default
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: default/gateway-1
+      namespace: envoy-gateway-system
+  default/gateway-2:
+    proxy:
+      listeners:
+      - address: null
+        name: default/gateway-2/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-2
+          gateway.envoyproxy.io/owning-gateway-namespace: default
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: default/gateway-2
+      namespace: envoy-gateway-system
+  default/gateway-3:
+    proxy:
+      listeners:
+      - address: null
+        name: default/gateway-3/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-3
+          gateway.envoyproxy.io/owning-gateway-namespace: default
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: default/gateway-3
+      namespace: envoy-gateway-system
+xdsIR:
+  default/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      name: default/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.foo.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/0/match/0/www_foo_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-2
+            namespace: default
+          name: httproute/default/httproute-2/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-2/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: www.bar.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: default
+        name: httproute/default/httproute-2/rule/0/match/0/www_bar_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /bar
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-3
+            namespace: default
+          name: httproute/default/httproute-3/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-3/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.baz.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-3
+          namespace: default
+        name: httproute/default/httproute-3/rule/0/match/0/www_baz_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /baz
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-4
+            namespace: default
+          name: httproute/default/httproute-4/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-4/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.qux.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-4
+          namespace: default
+        name: httproute/default/httproute-4/rule/0/match/0/www_qux_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /qux
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  default/gateway-2:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-2
+        namespace: default
+        sectionName: http
+      name: default/gateway-2/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-5
+            namespace: default
+          name: httproute/default/httproute-5/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-5/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: www.foo.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-5
+          namespace: default
+        name: httproute/default/httproute-5/rule/0/match/0/www_foo_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-6
+            namespace: default
+          name: httproute/default/httproute-6/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-6/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: www.bar.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-6
+          namespace: default
+        name: httproute/default/httproute-6/rule/0/match/0/www_bar_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /bar
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  default/gateway-3:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-3
+        namespace: default
+        sectionName: http
+      name: default/gateway-3/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-6
+            namespace: default
+          name: httproute/default/httproute-6/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-6/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.bar.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-6
+          namespace: default
+        name: httproute/default/httproute-6/rule/0/match/0/www_bar_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /bar
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-and-core-backendrefs.out.yaml b/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-and-core-backendrefs.out.yaml
index 6d76ad7e0..541452911 100644
--- a/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-and-core-backendrefs.out.yaml
+++ b/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-and-core-backendrefs.out.yaml
@@ -98,7 +98,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-static
+    name: httproute-fqdn
     namespace: default
   spec:
     parentRefs:
@@ -109,16 +109,16 @@ httpRoutes:
     - backendRefs:
       - group: gateway.envoyproxy.io
         kind: Backend
-        name: backend-ip
-      - name: service-ip
+        name: backend-fqdn
+      - name: service-fqdn
         port: 8080
       - group: multicluster.x-k8s.io
         kind: ServiceImport
-        name: service-import-ip
+        name: service-import-fqdn
         port: 8081
       matches:
       - path:
-          value: /1
+          value: /2
   status:
     parents:
     - conditions:
@@ -141,7 +141,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-fqdn
+    name: httproute-static
     namespace: default
   spec:
     parentRefs:
@@ -152,16 +152,16 @@ httpRoutes:
     - backendRefs:
       - group: gateway.envoyproxy.io
         kind: Backend
-        name: backend-fqdn
-      - name: service-fqdn
+        name: backend-ip
+      - name: service-ip
         port: 8080
       - group: multicluster.x-k8s.io
         kind: ServiceImport
-        name: service-import-fqdn
+        name: service-import-ip
         port: 8081
       matches:
       - path:
-          value: /2
+          value: /1
   status:
     parents:
     - conditions:
@@ -224,109 +224,109 @@ xdsIR:
       - destination:
           metadata:
             kind: HTTPRoute
-            name: httproute-static
+            name: httproute-fqdn
             namespace: default
-          name: httproute/default/httproute-static/rule/0
+          name: httproute/default/httproute-fqdn/rule/0
           settings:
-          - addressType: IP
+          - addressType: FQDN
             endpoints:
-            - host: 1.1.1.1
-              port: 3001
+            - host: primary.foo.com
+              port: 3000
             metadata:
               kind: Backend
-              name: backend-ip
+              name: backend-fqdn
               namespace: default
-            name: httproute/default/httproute-static/rule/0/backend/0
+            name: httproute/default/httproute-fqdn/rule/0/backend/0
             protocol: HTTP
             weight: 1
-          - addressType: IP
+          - addressType: FQDN
             endpoints:
-            - host: 4.3.2.1
+            - host: bar.foo
               port: 8080
             metadata:
               kind: Service
-              name: service-ip
+              name: service-fqdn
               namespace: default
               sectionName: "8080"
-            name: httproute/default/httproute-static/rule/0/backend/1
+            name: httproute/default/httproute-fqdn/rule/0/backend/1
             protocol: HTTP
             weight: 1
-          - addressType: IP
+          - addressType: FQDN
             endpoints:
-            - host: 1.2.3.4
-              port: 8081
+            - host: foo.bar
+              port: 8080
             metadata:
               kind: ServiceImport
-              name: service-import-ip
+              name: service-import-fqdn
               namespace: default
               sectionName: "8081"
-            name: httproute/default/httproute-static/rule/0/backend/2
+            name: httproute/default/httproute-fqdn/rule/0/backend/2
             protocol: HTTP
             weight: 1
         hostname: '*'
         isHTTP2: false
         metadata:
           kind: HTTPRoute
-          name: httproute-static
+          name: httproute-fqdn
           namespace: default
-        name: httproute/default/httproute-static/rule/0/match/0/*
+        name: httproute/default/httproute-fqdn/rule/0/match/0/*
         pathMatch:
           distinct: false
           name: ""
-          prefix: /1
+          prefix: /2
       - destination:
           metadata:
             kind: HTTPRoute
-            name: httproute-fqdn
+            name: httproute-static
             namespace: default
-          name: httproute/default/httproute-fqdn/rule/0
+          name: httproute/default/httproute-static/rule/0
           settings:
-          - addressType: FQDN
+          - addressType: IP
             endpoints:
-            - host: primary.foo.com
-              port: 3000
+            - host: 1.1.1.1
+              port: 3001
             metadata:
               kind: Backend
-              name: backend-fqdn
+              name: backend-ip
               namespace: default
-            name: httproute/default/httproute-fqdn/rule/0/backend/0
+            name: httproute/default/httproute-static/rule/0/backend/0
             protocol: HTTP
             weight: 1
-          - addressType: FQDN
+          - addressType: IP
             endpoints:
-            - host: bar.foo
+            - host: 4.3.2.1
               port: 8080
             metadata:
               kind: Service
-              name: service-fqdn
+              name: service-ip
               namespace: default
               sectionName: "8080"
-            name: httproute/default/httproute-fqdn/rule/0/backend/1
+            name: httproute/default/httproute-static/rule/0/backend/1
             protocol: HTTP
             weight: 1
-          - addressType: FQDN
+          - addressType: IP
             endpoints:
-            - host: foo.bar
-              port: 8080
+            - host: 1.2.3.4
+              port: 8081
             metadata:
               kind: ServiceImport
-              name: service-import-fqdn
+              name: service-import-ip
               namespace: default
               sectionName: "8081"
-            name: httproute/default/httproute-fqdn/rule/0/backend/2
+            name: httproute/default/httproute-static/rule/0/backend/2
             protocol: HTTP
             weight: 1
         hostname: '*'
         isHTTP2: false
         metadata:
           kind: HTTPRoute
-          name: httproute-fqdn
+          name: httproute-static
           namespace: default
-        name: httproute/default/httproute-fqdn/rule/0/match/0/*
+        name: httproute/default/httproute-static/rule/0/match/0/*
         pathMatch:
           distinct: false
           name: ""
-          prefix: /2
+          prefix: /1
     readyListener:
       address: 0.0.0.0
       ipFamily: IPv4
diff --git a/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-backendref-mixed-address-type.out.yaml b/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-backendref-mixed-address-type.out.yaml
index 27901e7b9..2516e49c3 100644
--- a/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-backendref-mixed-address-type.out.yaml
+++ b/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-backendref-mixed-address-type.out.yaml
@@ -165,7 +165,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-3
+    name: httproute-2
     namespace: default
   spec:
     parentRefs:
@@ -176,10 +176,10 @@ httpRoutes:
     - backendRefs:
       - group: gateway.envoyproxy.io
         kind: Backend
-        name: backend-mixed-ip-fqdn
+        name: backend-mixed-uds-fqdn
       matches:
       - path:
-          value: /3
+          value: /2
   status:
     parents:
     - conditions:
@@ -203,7 +203,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-2
+    name: httproute-3
     namespace: default
   spec:
     parentRefs:
@@ -214,10 +214,10 @@ httpRoutes:
     - backendRefs:
       - group: gateway.envoyproxy.io
         kind: Backend
-        name: backend-mixed-uds-fqdn
+        name: backend-mixed-ip-fqdn
       matches:
       - path:
-          value: /2
+          value: /3
   status:
     parents:
     - conditions:
@@ -297,26 +297,26 @@ xdsIR:
         isHTTP2: false
         metadata:
           kind: HTTPRoute
-          name: httproute-3
+          name: httproute-2
           namespace: default
-        name: httproute/default/httproute-3/rule/0/match/0/*
+        name: httproute/default/httproute-2/rule/0/match/0/*
         pathMatch:
           distinct: false
           name: ""
-          prefix: /3
+          prefix: /2
       - directResponse:
           statusCode: 500
         hostname: '*'
         isHTTP2: false
         metadata:
           kind: HTTPRoute
-          name: httproute-2
+          name: httproute-3
           namespace: default
-        name: httproute/default/httproute-2/rule/0/match/0/*
+        name: httproute/default/httproute-3/rule/0/match/0/*
         pathMatch:
           distinct: false
           name: ""
-          prefix: /2
+          prefix: /3
     readyListener:
       address: 0.0.0.0
       ipFamily: IPv4
diff --git a/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-backendref.out.yaml b/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-backendref.out.yaml
index 3eb53ee7f..4731f586b 100644
--- a/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-backendref.out.yaml
+++ b/internal/gatewayapi/testdata/httproute-attaching-to-listener-with-backend-backendref.out.yaml
@@ -174,7 +174,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-3
+    name: httproute-2
     namespace: default
   spec:
     parentRefs:
@@ -185,10 +185,10 @@ httpRoutes:
     - backendRefs:
       - group: gateway.envoyproxy.io
         kind: Backend
-        name: backend-fqdn
+        name: backend-ip
       matches:
       - path:
-          value: /3
+          value: /2
   status:
     parents:
     - conditions:
@@ -211,7 +211,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-2
+    name: httproute-3
     namespace: default
   spec:
     parentRefs:
@@ -222,10 +222,10 @@ httpRoutes:
     - backendRefs:
       - group: gateway.envoyproxy.io
         kind: Backend
-        name: backend-ip
+        name: backend-fqdn
       matches:
       - path:
-          value: /2
+          value: /3
   status:
     parents:
     - conditions:
@@ -377,61 +377,61 @@ xdsIR:
       - destination:
           metadata:
             kind: HTTPRoute
-            name: httproute-3
+            name: httproute-2
             namespace: default
-          name: httproute/default/httproute-3/rule/0
+          name: httproute/default/httproute-2/rule/0
           settings:
-          - addressType: FQDN
+          - addressType: IP
             endpoints:
-            - host: primary.foo.com
-              port: 3000
+            - host: 1.1.1.1
+              port: 3001
             metadata:
               kind: Backend
-              name: backend-fqdn
+              name: backend-ip
               namespace: default
-            name: httproute/default/httproute-3/rule/0/backend/0
+            name: httproute/default/httproute-2/rule/0/backend/0
             protocol: HTTP
             weight: 1
         hostname: '*'
         isHTTP2: false
         metadata:
           kind: HTTPRoute
-          name: httproute-3
+          name: httproute-2
           namespace: default
-        name: httproute/default/httproute-3/rule/0/match/0/*
+        name: httproute/default/httproute-2/rule/0/match/0/*
         pathMatch:
           distinct: false
           name: ""
-          prefix: /3
+          prefix: /2
       - destination:
           metadata:
             kind: HTTPRoute
-            name: httproute-2
+            name: httproute-3
             namespace: default
-          name: httproute/default/httproute-2/rule/0
+          name: httproute/default/httproute-3/rule/0
           settings:
-          - addressType: IP
+          - addressType: FQDN
             endpoints:
-            - host: 1.1.1.1
-              port: 3001
+            - host: primary.foo.com
+              port: 3000
             metadata:
               kind: Backend
-              name: backend-ip
+              name: backend-fqdn
               namespace: default
-            name: httproute/default/httproute-2/rule/0/backend/0
+            name: httproute/default/httproute-3/rule/0/backend/0
             protocol: HTTP
             weight: 1
         hostname: '*'
         isHTTP2: false
         metadata:
           kind: HTTPRoute
-          name: httproute-2
+          name: httproute-3
           namespace: default
-        name: httproute/default/httproute-2/rule/0/match/0/*
+        name: httproute/default/httproute-3/rule/0/match/0/*
         pathMatch:
           distinct: false
           name: ""
-          prefix: /2
+          prefix: /3
       - directResponse:
           statusCode: 500
         hostname: '*'
diff --git a/internal/gatewayapi/testdata/httproute-default-order-by-creation-date-and-route-name.in.yaml b/internal/gatewayapi/testdata/httproute-default-order-by-creation-date-and-route-name.in.yaml
new file mode 100644
index 000000000..f1b9d09ea
--- /dev/null
+++ b/internal/gatewayapi/testdata/httproute-default-order-by-creation-date-and-route-name.in.yaml
@@ -0,0 +1,243 @@
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-1
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      hostname: '*.envoyproxy.io'
+      allowedRoutes:
+        namespaces:
+          from: All
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-default
+    creationTimestamp: 2025-07-12T20:47:53Z
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/'
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-3
+    creationTimestamp: 2025-07-12T20:47:53Z
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/route3'
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-1
+    creationTimestamp: 2025-07-12T20:47:53Z
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/route1'
+      backendRefs:
+      - name: service-1
+        port: 8080
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/foobar'
+      backendRefs:
+      - name: service-2
+        port: 8080
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/bar'
+      backendRefs:
+      - name: service-3
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-5
+    creationTimestamp: 2025-07-10T20:43:53Z
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/route5'
+      backendRefs:
+      - name: service-1
+        port: 8080
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/123'
+      backendRefs:
+      - name: service-2
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: test-ns
+    name: httproute-2
+    creationTimestamp: 2025-07-12T20:47:53Z
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/foo'
+      backendRefs:
+      - name: test-service
+        port: 8080
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/route2'
+      backendRefs:
+      - name: test-service
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: test-ns2
+    name: httproute-4
+    creationTimestamp: 2025-07-12T20:47:53Z
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/456'
+      backendRefs:
+      - name: test-service
+        port: 8080
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/route4'
+      backendRefs:
+      - name: test-service
+        port: 8080
+namespaces:
+- apiVersion: v1
+  kind: Namespace
+  metadata:
+    name: test-ns
+- apiVersion: v1
+  kind: Namespace
+  metadata:
+    name: test-ns2
+services:
+- apiVersion: v1
+  kind: Service
+  metadata:
+    namespace: test-ns2
+    name: test-service
+  spec:
+    ports:
+    - port: 8080
+      name: http
+      protocol: TCP
+- apiVersion: v1
+  kind: Service
+  metadata:
+    namespace: test-ns
+    name: test-service
+  spec:
+    ports:
+    - port: 8080
+      name: http
+      protocol: TCP
+endpointSlices:
+- apiVersion: discovery.k8s.io/v1
+  kind: EndpointSlice
+  metadata:
+    name: endpointslice-test-service
+    namespace: test-ns
+    labels:
+      kubernetes.io/service-name: test-service
+  addressType: IPv4
+  ports:
+  - name: http
+    protocol: TCP
+    port: 8080
+  endpoints:
+  - addresses:
+    - 8.8.8.8
+    conditions:
+      ready: true
+- apiVersion: discovery.k8s.io/v1
+  kind: EndpointSlice
+  metadata:
+    name: endpointslice-test-service
+    namespace: test-ns2
+    labels:
+      kubernetes.io/service-name: test-service
+  addressType: IPv4
+  ports:
+  - name: http
+    protocol: TCP
+    port: 8080
+  endpoints:
+  - addresses:
+    - 8.8.8.8
+    conditions:
+      ready: true
diff --git a/internal/gatewayapi/testdata/httproute-default-order-by-creation-date-and-route-name.out.yaml b/internal/gatewayapi/testdata/httproute-default-order-by-creation-date-and-route-name.out.yaml
new file mode 100644
index 000000000..b6b5eb715
--- /dev/null
+++ b/internal/gatewayapi/testdata/httproute-default-order-by-creation-date-and-route-name.out.yaml
@@ -0,0 +1,681 @@
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      hostname: '*.envoyproxy.io'
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 6
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: "2025-07-10T20:43:53Z"
+    name: httproute-5
+    namespace: default
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /route5
+    - backendRefs:
+      - name: service-2
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /123
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: "2025-07-12T20:47:53Z"
+    name: httproute-1
+    namespace: default
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /route1
+    - backendRefs:
+      - name: service-2
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /foobar
+    - backendRefs:
+      - name: service-3
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /bar
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: "2025-07-12T20:47:53Z"
+    name: httproute-3
+    namespace: default
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /route3
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: "2025-07-12T20:47:53Z"
+    name: httproute-default
+    namespace: default
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: "2025-07-12T20:47:53Z"
+    name: httproute-2
+    namespace: test-ns
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: test-service
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /foo
+    - backendRefs:
+      - name: test-service
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /route2
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: "2025-07-12T20:47:53Z"
+    name: httproute-4
+    namespace: test-ns2
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: test-service
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /456
+    - backendRefs:
+      - name: test-service
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /route4
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+infraIR:
+  envoy-gateway/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-1
+      namespace: envoy-gateway-system
+xdsIR:
+  envoy-gateway/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*.envoyproxy.io'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-5
+            namespace: default
+          name: httproute/default/httproute-5/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-5/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-5
+          namespace: default
+        name: httproute/default/httproute-5/rule/0/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route5
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/0/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route1
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/1
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-2
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/1/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/1/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foobar
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-3
+            namespace: default
+          name: httproute/default/httproute-3/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-3/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-3
+          namespace: default
+        name: httproute/default/httproute-3/rule/0/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route3
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-2
+            namespace: test-ns
+          name: httproute/test-ns/httproute-2/rule/1
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 8.8.8.8
+              port: 8080
+            metadata:
+              kind: Service
+              name: test-service
+              namespace: test-ns
+              sectionName: "8080"
+            name: httproute/test-ns/httproute-2/rule/1/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: test-ns
+        name: httproute/test-ns/httproute-2/rule/1/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route2
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-4
+            namespace: test-ns2
+          name: httproute/test-ns2/httproute-4/rule/1
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 8.8.8.8
+              port: 8080
+            metadata:
+              kind: Service
+              name: test-service
+              namespace: test-ns2
+              sectionName: "8080"
+            name: httproute/test-ns2/httproute-4/rule/1/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-4
+          namespace: test-ns2
+        name: httproute/test-ns2/httproute-4/rule/1/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route4
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-5
+            namespace: default
+          name: httproute/default/httproute-5/rule/1
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-2
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-5/rule/1/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-5
+          namespace: default
+        name: httproute/default/httproute-5/rule/1/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /123
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/2
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-3
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/2/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/2/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /bar
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-2
+            namespace: test-ns
+          name: httproute/test-ns/httproute-2/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 8.8.8.8
+              port: 8080
+            metadata:
+              kind: Service
+              name: test-service
+              namespace: test-ns
+              sectionName: "8080"
+            name: httproute/test-ns/httproute-2/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: test-ns
+        name: httproute/test-ns/httproute-2/rule/0/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-4
+            namespace: test-ns2
+          name: httproute/test-ns2/httproute-4/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 8.8.8.8
+              port: 8080
+            metadata:
+              kind: Service
+              name: test-service
+              namespace: test-ns2
+              sectionName: "8080"
+            name: httproute/test-ns2/httproute-4/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-4
+          namespace: test-ns2
+        name: httproute/test-ns2/httproute-4/rule/0/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /456
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-default
+            namespace: default
+          name: httproute/default/httproute-default/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-default/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-default
+          namespace: default
+        name: httproute/default/httproute-default/rule/0/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/httproute-order-by-creation-date.in.yaml b/internal/gatewayapi/testdata/httproute-order-by-creation-date.in.yaml
new file mode 100644
index 000000000..bbd45b4c7
--- /dev/null
+++ b/internal/gatewayapi/testdata/httproute-order-by-creation-date.in.yaml
@@ -0,0 +1,173 @@
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-1
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      hostname: '*.envoyproxy.io'
+      allowedRoutes:
+        namespaces:
+          from: All
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-3
+    creationTimestamp: 2025-07-01T20:47:53Z
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/route3'
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: default
+    name: httproute-1
+    creationTimestamp: 2025-07-02T10:47:53Z
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/route1'
+      backendRefs:
+      - name: service-1
+        port: 8080
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/foobar'
+      backendRefs:
+      - name: service-2
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: test-ns
+    name: httproute-2
+    creationTimestamp: 2025-07-03T20:47:53Z
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/route2'
+      backendRefs:
+      - name: test-service
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    namespace: test-ns2
+    name: httproute-4
+    creationTimestamp: 2025-04-04T20:47:53Z
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          type: PathPrefix
+          value: '/route4'
+      backendRefs:
+      - name: test-service
+        port: 8080
+namespaces:
+- apiVersion: v1
+  kind: Namespace
+  metadata:
+    name: test-ns
+- apiVersion: v1
+  kind: Namespace
+  metadata:
+    name: test-ns2
+services:
+- apiVersion: v1
+  kind: Service
+  metadata:
+    namespace: test-ns2
+    name: test-service
+  spec:
+    ports:
+    - port: 8080
+      name: http
+      protocol: TCP
+- apiVersion: v1
+  kind: Service
+  metadata:
+    namespace: test-ns
+    name: test-service
+  spec:
+    ports:
+    - port: 8080
+      name: http
+      protocol: TCP
+endpointSlices:
+- apiVersion: discovery.k8s.io/v1
+  kind: EndpointSlice
+  metadata:
+    name: endpointslice-test-service
+    namespace: test-ns
+    labels:
+      kubernetes.io/service-name: test-service
+  addressType: IPv4
+  ports:
+  - name: http
+    protocol: TCP
+    port: 8080
+  endpoints:
+  - addresses:
+    - 8.8.8.8
+    conditions:
+      ready: true
+- apiVersion: discovery.k8s.io/v1
+  kind: EndpointSlice
+  metadata:
+    name: endpointslice-test-service
+    namespace: test-ns2
+    labels:
+      kubernetes.io/service-name: test-service
+  addressType: IPv4
+  ports:
+  - name: http
+    protocol: TCP
+    port: 8080
+  endpoints:
+  - addresses:
+    - 8.8.8.8
+    conditions:
+      ready: true
diff --git a/internal/gatewayapi/testdata/httproute-order-by-creation-date.out.yaml b/internal/gatewayapi/testdata/httproute-order-by-creation-date.out.yaml
new file mode 100644
index 000000000..21d9d2324
--- /dev/null
+++ b/internal/gatewayapi/testdata/httproute-order-by-creation-date.out.yaml
@@ -0,0 +1,399 @@
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      hostname: '*.envoyproxy.io'
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 4
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: "2025-04-04T20:47:53Z"
+    name: httproute-4
+    namespace: test-ns2
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: test-service
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /route4
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: "2025-07-01T20:47:53Z"
+    name: httproute-3
+    namespace: default
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /route3
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: "2025-07-02T10:47:53Z"
+    name: httproute-1
+    namespace: default
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /route1
+    - backendRefs:
+      - name: service-2
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /foobar
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: "2025-07-03T20:47:53Z"
+    name: httproute-2
+    namespace: test-ns
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: test-service
+        port: 8080
+      matches:
+      - path:
+          type: PathPrefix
+          value: /route2
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+infraIR:
+  envoy-gateway/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-1
+      namespace: envoy-gateway-system
+xdsIR:
+  envoy-gateway/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*.envoyproxy.io'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-4
+            namespace: test-ns2
+          name: httproute/test-ns2/httproute-4/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 8.8.8.8
+              port: 8080
+            metadata:
+              kind: Service
+              name: test-service
+              namespace: test-ns2
+              sectionName: "8080"
+            name: httproute/test-ns2/httproute-4/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-4
+          namespace: test-ns2
+        name: httproute/test-ns2/httproute-4/rule/0/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route4
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-3
+            namespace: default
+          name: httproute/default/httproute-3/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-3/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-3
+          namespace: default
+        name: httproute/default/httproute-3/rule/0/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route3
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/0/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route1
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/1
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-2
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/1/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/1/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foobar
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-2
+            namespace: test-ns
+          name: httproute/test-ns/httproute-2/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 8.8.8.8
+              port: 8080
+            metadata:
+              kind: Service
+              name: test-service
+              namespace: test-ns
+              sectionName: "8080"
+            name: httproute/test-ns/httproute-2/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: test-ns
+        name: httproute/test-ns/httproute-2/rule/0/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route2
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/httproute-with-direct-response.out.yaml b/internal/gatewayapi/testdata/httproute-with-direct-response.out.yaml
index dd9b65737..1cb64e5c1 100644
--- a/internal/gatewayapi/testdata/httproute-with-direct-response.out.yaml
+++ b/internal/gatewayapi/testdata/httproute-with-direct-response.out.yaml
@@ -95,7 +95,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: direct-response-with-value-not-found
+    name: direct-response-too-long
     namespace: default
   spec:
     parentRefs:
@@ -107,24 +107,25 @@ httpRoutes:
       - extensionRef:
           group: gateway.envoyproxy.io
           kind: HTTPRouteFilter
-          name: direct-response-value-ref-not-found
+          name: direct-response-too-long
         type: ExtensionRef
       matches:
       - path:
           type: PathPrefix
-          value: /value-ref-not-found
+          value: /too-long
   status:
     parents:
     - conditions:
       - lastTransitionTime: null
-        message: 'Unable to translate HTTPRouteFilter: default/direct-response-value-ref-not-found'
+        message: 'Invalid filter HTTPRouteFilter: response.body size 4097 greater
+          than the max size 4096'
         reason: UnsupportedValue
         status: "False"
         type: Accepted
       - lastTransitionTime: null
-        message: 'Unable to translate HTTPRouteFilter: default/direct-response-value-ref-not-found'
-        reason: BackendNotFound
-        status: "False"
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
         type: ResolvedRefs
       controllerName: gateway.envoyproxy.io/gatewayclass-controller
       parentRef:
@@ -135,7 +136,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: direct-response-too-long
+    name: direct-response-with-value-not-found
     namespace: default
   spec:
     parentRefs:
@@ -147,25 +148,24 @@ httpRoutes:
       - extensionRef:
           group: gateway.envoyproxy.io
           kind: HTTPRouteFilter
-          name: direct-response-too-long
+          name: direct-response-value-ref-not-found
         type: ExtensionRef
       matches:
       - path:
           type: PathPrefix
-          value: /too-long
+          value: /value-ref-not-found
   status:
     parents:
     - conditions:
       - lastTransitionTime: null
-        message: 'Invalid filter HTTPRouteFilter: response.body size 4097 greater
-          than the max size 4096'
+        message: 'Unable to translate HTTPRouteFilter: default/direct-response-value-ref-not-found'
         reason: UnsupportedValue
         status: "False"
         type: Accepted
       - lastTransitionTime: null
-        message: Resolved all the Object references for the Route
-        reason: ResolvedRefs
-        status: "True"
+        message: 'Unable to translate HTTPRouteFilter: default/direct-response-value-ref-not-found'
+        reason: BackendNotFound
+        status: "False"
         type: ResolvedRefs
       controllerName: gateway.envoyproxy.io/gatewayclass-controller
       parentRef:
diff --git a/internal/gatewayapi/testdata/httproute-with-urlrewrite-filter-regex-match-replace-http.out.yaml b/internal/gatewayapi/testdata/httproute-with-urlrewrite-filter-regex-match-replace-http.out.yaml
index 70d124e47..ca3284339 100644
--- a/internal/gatewayapi/testdata/httproute-with-urlrewrite-filter-regex-match-replace-http.out.yaml
+++ b/internal/gatewayapi/testdata/httproute-with-urlrewrite-filter-regex-match-replace-http.out.yaml
@@ -370,6 +370,12 @@ xdsIR:
         urlRewrite:
           host:
             name: rewrite.com
+          path:
+            fullReplace: null
+            prefixMatchReplace: null
+            regexMatchReplace:
+              pattern: .*
+              substitution: foo
       - destination:
           metadata:
             kind: HTTPRoute
diff --git a/internal/gatewayapi/testdata/httproute-with-urlrewrite-hostname-filter-invalid.out.yaml b/internal/gatewayapi/testdata/httproute-with-urlrewrite-hostname-filter-invalid.out.yaml
index 6ad4a1c5b..1cc501df2 100644
--- a/internal/gatewayapi/testdata/httproute-with-urlrewrite-hostname-filter-invalid.out.yaml
+++ b/internal/gatewayapi/testdata/httproute-with-urlrewrite-hostname-filter-invalid.out.yaml
@@ -45,7 +45,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-invalid-header
+    name: httproute-header-and-backend-host-rewrites
     namespace: default
   spec:
     hostnames:
@@ -62,16 +62,21 @@ httpRoutes:
       - extensionRef:
           group: gateway.envoyproxy.io
           kind: HTTPRouteFilter
-          name: invalid-header
+          name: valid-header
+        type: ExtensionRef
+      - extensionRef:
+          group: gateway.envoyproxy.io
+          kind: HTTPRouteFilter
+          name: valid-header
         type: ExtensionRef
       matches:
       - path:
-          value: /invalid-header
+          value: /header-and-backend
   status:
     parents:
     - conditions:
       - lastTransitionTime: null
-        message: Header must be set when rewrite path type is "Header"
+        message: Cannot configure multiple urlRewrite filters for a single HTTPRouteRule
         reason: UnsupportedValue
         status: "False"
         type: Accepted
@@ -89,7 +94,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-multiple-host-rewrites-1
+    name: httproute-invalid-header
     namespace: default
   spec:
     hostnames:
@@ -106,19 +111,16 @@ httpRoutes:
       - extensionRef:
           group: gateway.envoyproxy.io
           kind: HTTPRouteFilter
-          name: valid-header
+          name: invalid-header
         type: ExtensionRef
-      - type: URLRewrite
-        urlRewrite:
-          hostname: rewrite.com
       matches:
       - path:
-          value: /ext-first
+          value: /invalid-header
   status:
     parents:
     - conditions:
       - lastTransitionTime: null
-        message: Cannot configure multiple urlRewrite filters for a single HTTPRouteRule
+        message: Header must be set when rewrite path type is "Header"
         reason: UnsupportedValue
         status: "False"
         type: Accepted
@@ -136,7 +138,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-multiple-path-rewrites-2
+    name: httproute-multiple-header-host-rewrites
     namespace: default
   spec:
     hostnames:
@@ -150,17 +152,19 @@ httpRoutes:
       - name: service-1
         port: 8080
       filters:
-      - type: URLRewrite
-        urlRewrite:
-          hostname: rewrite.com
       - extensionRef:
           group: gateway.envoyproxy.io
           kind: HTTPRouteFilter
           name: valid-header
         type: ExtensionRef
+      - extensionRef:
+          group: gateway.envoyproxy.io
+          kind: HTTPRouteFilter
+          name: valid-header-2
+        type: ExtensionRef
       matches:
       - path:
-          value: /inline-first
+          value: /two-headers
   status:
     parents:
     - conditions:
@@ -200,16 +204,16 @@ httpRoutes:
       - extensionRef:
           group: gateway.envoyproxy.io
           kind: HTTPRouteFilter
-          name: valid-header
+          name: valid-backend
         type: ExtensionRef
       - extensionRef:
           group: gateway.envoyproxy.io
           kind: HTTPRouteFilter
-          name: valid-header-2
+          name: valid-backend-2
         type: ExtensionRef
       matches:
       - path:
-          value: /two-headers
+          value: /two-backends
   status:
     parents:
     - conditions:
@@ -232,7 +236,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-multiple-header-host-rewrites
+    name: httproute-multiple-host-rewrites-1
     namespace: default
   spec:
     hostnames:
@@ -249,16 +253,14 @@ httpRoutes:
       - extensionRef:
           group: gateway.envoyproxy.io
           kind: HTTPRouteFilter
-          name: valid-backend
-        type: ExtensionRef
-      - extensionRef:
-          group: gateway.envoyproxy.io
-          kind: HTTPRouteFilter
-          name: valid-backend-2
+          name: valid-header
         type: ExtensionRef
+      - type: URLRewrite
+        urlRewrite:
+          hostname: rewrite.com
       matches:
       - path:
-          value: /two-backends
+          value: /ext-first
   status:
     parents:
     - conditions:
@@ -281,7 +283,7 @@ httpRoutes:
   kind: HTTPRoute
   metadata:
     creationTimestamp: null
-    name: httproute-header-and-backend-host-rewrites
+    name: httproute-multiple-path-rewrites-2
     namespace: default
   spec:
     hostnames:
@@ -295,11 +297,9 @@ httpRoutes:
       - name: service-1
         port: 8080
       filters:
-      - extensionRef:
-          group: gateway.envoyproxy.io
-          kind: HTTPRouteFilter
-          name: valid-header
-        type: ExtensionRef
+      - type: URLRewrite
+        urlRewrite:
+          hostname: rewrite.com
       - extensionRef:
           group: gateway.envoyproxy.io
           kind: HTTPRouteFilter
@@ -307,7 +307,7 @@ httpRoutes:
         type: ExtensionRef
       matches:
       - path:
-          value: /header-and-backend
+          value: /inline-first
   status:
     parents:
     - conditions:
diff --git a/internal/gatewayapi/testdata/httproute-with-urlrewrite-hostname-filter.out.yaml b/internal/gatewayapi/testdata/httproute-with-urlrewrite-hostname-filter.out.yaml
index 15a17b99c..d28bfb180 100644
--- a/internal/gatewayapi/testdata/httproute-with-urlrewrite-hostname-filter.out.yaml
+++ b/internal/gatewayapi/testdata/httproute-with-urlrewrite-hostname-filter.out.yaml
@@ -333,6 +333,8 @@ xdsIR:
           name: ""
           prefix: /header-host-and-path
         urlRewrite:
+          host:
+            header: my-host
           path:
             fullReplace: null
             prefixMatchReplace: /rewrite
diff --git a/internal/gatewayapi/testdata/securitypolicy-status-conditions-truncated.in.yaml b/internal/gatewayapi/testdata/securitypolicy-status-conditions-truncated.in.yaml
new file mode 100644
index 000000000..d386d3c20
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-status-conditions-truncated.in.yaml
@@ -0,0 +1,388 @@
+securityPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    namespace: envoy-gateway
+    name: target-gateway-with-route-level-override-truncated-ancestors
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-9
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    namespace: envoy-gateway
+    name: target-httproute-with-attachment-conflict-truncated-ancestors
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    namespace: envoy-gateway
+    name: target-httproute-with-accepted-truncated-ancestors
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    namespace: envoy-gateway
+    name: httproute-1
+  spec:
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+    - namespace: envoy-gateway
+      name: gateway-2
+    - namespace: envoy-gateway
+      name: gateway-3
+    - namespace: envoy-gateway
+      name: gateway-4
+    - namespace: envoy-gateway
+      name: gateway-5
+    - namespace: envoy-gateway
+      name: gateway-6
+    - namespace: envoy-gateway
+      name: gateway-7
+    - namespace: envoy-gateway
+      name: gateway-8
+    - namespace: envoy-gateway
+      name: gateway-9
+    - namespace: envoy-gateway
+      name: gateway-10
+    - namespace: envoy-gateway
+      name: gateway-11
+    - namespace: envoy-gateway
+      name: gateway-12
+    - namespace: envoy-gateway
+      name: gateway-13
+    - namespace: envoy-gateway
+      name: gateway-14
+    - namespace: envoy-gateway
+      name: gateway-15
+    - namespace: envoy-gateway
+      name: gateway-16
+    - namespace: envoy-gateway
+      name: gateway-17
+    - namespace: envoy-gateway
+      name: gateway-18
+    rules:
+    - matches:
+      - path:
+          value: "/"
+      backendRefs:
+      - name: service-1
+        port: 8080
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    namespace: envoy-gateway
+    name: httproute-2
+  spec:
+    parentRefs:
+    - namespace: envoy-gateway
+      name: gateway-1
+    - namespace: envoy-gateway
+      name: gateway-2
+    - namespace: envoy-gateway
+      name: gateway-3
+    - namespace: envoy-gateway
+      name: gateway-4
+    - namespace: envoy-gateway
+      name: gateway-5
+    - namespace: envoy-gateway
+      name: gateway-6
+    - namespace: envoy-gateway
+      name: gateway-7
+    - namespace: envoy-gateway
+      name: gateway-8
+    - namespace: envoy-gateway
+      name: gateway-9
+    - namespace: envoy-gateway
+      name: gateway-10
+    - namespace: envoy-gateway
+      name: gateway-11
+    - namespace: envoy-gateway
+      name: gateway-12
+    - namespace: envoy-gateway
+      name: gateway-13
+    - namespace: envoy-gateway
+      name: gateway-14
+    - namespace: envoy-gateway
+      name: gateway-15
+    - namespace: envoy-gateway
+      name: gateway-16
+    - namespace: envoy-gateway
+      name: gateway-17
+    - namespace: envoy-gateway
+      name: gateway-18
+    rules:
+    - matches:
+      - path:
+          value: "/route-2"
+      backendRefs:
+      - name: service-1
+        port: 8080
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-1
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-2
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-3
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-4
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-5
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-6
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-7
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-8
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-9
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-10
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-11
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-12
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-13
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-14
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-15
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-16
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-17
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    namespace: envoy-gateway
+    name: gateway-18
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - name: http
+      protocol: HTTP
+      port: 80
+      allowedRoutes:
+        namespaces:
+          from: Same
diff --git a/internal/gatewayapi/testdata/securitypolicy-status-conditions-truncated.out.yaml b/internal/gatewayapi/testdata/securitypolicy-status-conditions-truncated.out.yaml
new file mode 100644
index 000000000..681101379
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-status-conditions-truncated.out.yaml
@@ -0,0 +1,3361 @@
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-2
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-3
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-4
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-5
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-6
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-7
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-8
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-9
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-10
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-11
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-12
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-13
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-14
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-15
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-16
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-17
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-18
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: Same
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: envoy-gateway
+  spec:
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+    - name: gateway-2
+      namespace: envoy-gateway
+    - name: gateway-3
+      namespace: envoy-gateway
+    - name: gateway-4
+      namespace: envoy-gateway
+    - name: gateway-5
+      namespace: envoy-gateway
+    - name: gateway-6
+      namespace: envoy-gateway
+    - name: gateway-7
+      namespace: envoy-gateway
+    - name: gateway-8
+      namespace: envoy-gateway
+    - name: gateway-9
+      namespace: envoy-gateway
+    - name: gateway-10
+      namespace: envoy-gateway
+    - name: gateway-11
+      namespace: envoy-gateway
+    - name: gateway-12
+      namespace: envoy-gateway
+    - name: gateway-13
+      namespace: envoy-gateway
+    - name: gateway-14
+      namespace: envoy-gateway
+    - name: gateway-15
+      namespace: envoy-gateway
+    - name: gateway-16
+      namespace: envoy-gateway
+    - name: gateway-17
+      namespace: envoy-gateway
+    - name: gateway-18
+      namespace: envoy-gateway
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-2
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-3
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-4
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-5
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-6
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-7
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-8
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-9
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-10
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-11
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-12
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-13
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-14
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-15
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-16
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-17
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-18
+        namespace: envoy-gateway
+- apiVersion: gateway.networking.k8s.io/v1beta1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-2
+    namespace: envoy-gateway
+  spec:
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+    - name: gateway-2
+      namespace: envoy-gateway
+    - name: gateway-3
+      namespace: envoy-gateway
+    - name: gateway-4
+      namespace: envoy-gateway
+    - name: gateway-5
+      namespace: envoy-gateway
+    - name: gateway-6
+      namespace: envoy-gateway
+    - name: gateway-7
+      namespace: envoy-gateway
+    - name: gateway-8
+      namespace: envoy-gateway
+    - name: gateway-9
+      namespace: envoy-gateway
+    - name: gateway-10
+      namespace: envoy-gateway
+    - name: gateway-11
+      namespace: envoy-gateway
+    - name: gateway-12
+      namespace: envoy-gateway
+    - name: gateway-13
+      namespace: envoy-gateway
+    - name: gateway-14
+      namespace: envoy-gateway
+    - name: gateway-15
+      namespace: envoy-gateway
+    - name: gateway-16
+      namespace: envoy-gateway
+    - name: gateway-17
+      namespace: envoy-gateway
+    - name: gateway-18
+      namespace: envoy-gateway
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /route-2
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-2
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-3
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-4
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-5
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-6
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-7
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-8
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-9
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-10
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-11
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-12
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-13
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-14
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-15
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-16
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-17
+        namespace: envoy-gateway
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Failed to process route rule 0 backendRef 0: service envoy-gateway/service-1
+          not found.'
+        reason: BackendNotFound
+        status: "False"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-18
+        namespace: envoy-gateway
+infraIR:
+  envoy-gateway/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-1
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-2:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-2/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-2
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-2
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-3:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-3/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-3
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-3
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-4:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-4/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-4
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-4
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-5:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-5/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-5
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-5
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-6:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-6/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-6
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-6
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-7:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-7/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-7
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-7
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-8:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-8/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-8
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-8
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-9:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-9/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-9
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-9
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-10:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-10/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-10
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-10
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-11:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-11/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-11
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-11
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-12:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-12/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-12
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-12
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-13:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-13/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-13
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-13
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-14:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-14/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-14
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-14
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-15:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-15/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-15
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-15
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-16:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-16/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-16
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-16
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-17:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-17/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-17
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-17
+      namespace: envoy-gateway-system
+  envoy-gateway/gateway-18:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-18/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-18
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-18
+      namespace: envoy-gateway-system
+securityPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-gateway-with-route-level-override-truncated-ancestors
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-9
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-9
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'This policy is being overridden by other securityPolicies for these
+          routes: [envoy-gateway/httproute-1 envoy-gateway/httproute-2]'
+        reason: Overridden
+        status: "True"
+        type: Overridden
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-7, gateway-8'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-httproute-with-attachment-conflict-truncated-ancestors
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Unable to target HTTPRoute httproute-2, another SecurityPolicy has
+          already attached to it
+        reason: Conflicted
+        status: "False"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-8, gateway-9'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: target-httproute-with-accepted-truncated-ancestors
+    namespace: envoy-gateway
+  spec:
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'Ancestors have been aggregated because the number of policy ancestors
+          exceeds 16. The aggregated ancestors: gateway-8, gateway-9'
+        reason: Aggregated
+        status: "True"
+        type: Aggregated
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+xdsIR:
+  envoy-gateway/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-2:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-2
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-2/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-3:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-3
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-3/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-4:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-4
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-4/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-5:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-5
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-5/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-6:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-6
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-6/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-7:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-7
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-7/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-8:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-8
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-8/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-9:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-9
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-9/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-10:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-10
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-10/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-11:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-11
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-11/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-12:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-12
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-12/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-13:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-13
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-13/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-14:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-14
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-14/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-15:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-15
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-15/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-16:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-16
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-16/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-17:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-17
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-17/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  envoy-gateway/gateway-18:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-18
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-18/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-2/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /route-2
+        security: {}
+      - directResponse:
+          statusCode: 500
+        hostname: '*'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: envoy-gateway
+        name: httproute/envoy-gateway/httproute-1/rule/0/match/0/*
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-service.in.yaml b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-service.in.yaml
index e47a1b0f5..de74b2764 100644
--- a/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-service.in.yaml
+++ b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-service.in.yaml
@@ -13,12 +13,40 @@ gateways:
           allowedRoutes:
             namespaces:
               from: All
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: Gateway
+    metadata:
+      namespace: default
+      name: gateway-2
+    spec:
+      gatewayClassName: envoy-gateway-class
+      listeners:
+        - name: http
+          protocol: HTTP
+          port: 80
+          allowedRoutes:
+            namespaces:
+              from: All
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: Gateway
+    metadata:
+      namespace: default
+      name: gateway-3
+    spec:
+      gatewayClassName: envoy-gateway-class
+      listeners:
+        - name: http
+          protocol: HTTP
+          port: 80
+          allowedRoutes:
+            namespaces:
+              from: All
 httpRoutes:
   - apiVersion: gateway.networking.k8s.io/v1
     kind: HTTPRoute
     metadata:
       namespace: default
-      name: httproute-1
+      name: httproute-1     # should return 500 because the ext auth in the attached policy is fail close.
     spec:
       hostnames:
         - www.foo.com
@@ -33,17 +61,93 @@ httpRoutes:
           backendRefs:
             - name: service-1
               port: 8080
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-2     # should not return 500 because the ext auth in the attached policy is fail open.
+    spec:
+      hostnames:
+        - www.bar.com
+      parentRefs:
+        - namespace: default
+          name: gateway-1
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: /bar
+          backendRefs:
+            - name: service-1
+              port: 8080
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-3     # should return 500 because the ext auth is invalid with failopen, and the basic auth is invalid.
+    spec:
+      hostnames:
+        - www.baz.com
+      parentRefs:
+        - namespace: default
+          name: gateway-1
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: /baz
+          backendRefs:
+            - name: service-1
+              port: 8080
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-4     # should not return 500 because the ext auth is invalid with failopen.
+    spec:
+      hostnames:
+        - www.qux.com
+      parentRefs:
+        - namespace: default
+          name: gateway-2
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: /qux
+          backendRefs:
+            - name: service-1
+              port: 8080
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-5     # should return 500 because the ext auth is invalid with failopen, and the basic auth is invalid.
+    spec:
+      hostnames:
+        - www.quux.com
+      parentRefs:
+        - namespace: default
+          name: gateway-3
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: /quux
+          backendRefs:
+            - name: service-1
+              port: 8080
 securityPolicies:
   - apiVersion: gateway.envoyproxy.io/v1alpha1
     kind: SecurityPolicy
     metadata:
       namespace: default
-      name: policy-for-gateway
+      name: policy-for-httproute-1
     spec:
       targetRef:
         group: gateway.networking.k8s.io
-        kind: Gateway
-        name: gateway-1
+        kind: HTTPRoute
+        name: httproute-1
       extAuth:
         http:
           backendRefs:
@@ -54,3 +158,89 @@ securityPolicies:
             - header1
             - header2
         failOpen: false
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: SecurityPolicy
+    metadata:
+      namespace: default
+      name: policy-for-httproute-2
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: HTTPRoute
+        name: httproute-2
+      extAuth:
+        http:
+          backendRefs:
+            - name: http-backend
+              namespace: default
+              port: 80
+          headersToBackend:
+            - header1
+            - header2
+        failOpen: true
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: SecurityPolicy
+    metadata:
+      namespace: default
+      name: policy-for-httproute-3
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: HTTPRoute
+        name: httproute-3
+      basicAuth:
+        users:
+          name: "users-secret1"
+      extAuth:
+        http:
+          backendRefs:
+            - name: http-backend
+              namespace: default
+              port: 80
+          headersToBackend:
+            - header1
+            - header2
+        failOpen: true
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: SecurityPolicy
+    metadata:
+      namespace: default
+      name: policy-for-gateway-2
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+      extAuth:
+        http:
+          backendRefs:
+            - name: http-backend
+              namespace: default
+              port: 80
+          headersToBackend:
+            - header1
+            - header2
+        failOpen: true
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: SecurityPolicy
+    metadata:
+      namespace: default
+      name: policy-for-gateway-3
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+      basicAuth:
+        users:
+          name: "users-secret1"
+      extAuth:
+        http:
+          backendRefs:
+            - name: http-backend
+              namespace: default
+              port: 80
+          headersToBackend:
+            - header1
+            - header2
+        failOpen: true
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-service.out.yaml b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-service.out.yaml
index 8405eaf3f..07b58402a 100644
--- a/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-service.out.yaml
+++ b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-service.out.yaml
@@ -14,6 +14,86 @@ gateways:
       name: http
       port: 80
       protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 3
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-2
+    namespace: default
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 1
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-3
+    namespace: default
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
   status:
     listeners:
     - attachedRoutes: 1
@@ -78,6 +158,158 @@ httpRoutes:
         name: gateway-1
         namespace: default
         sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-2
+    namespace: default
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /bar
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-3
+    namespace: default
+  spec:
+    hostnames:
+    - www.baz.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /baz
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-4
+    namespace: default
+  spec:
+    hostnames:
+    - www.qux.com
+    parentRefs:
+    - name: gateway-2
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /qux
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-2
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-5
+    namespace: default
+  spec:
+    hostnames:
+    - www.quux.com
+    parentRefs:
+    - name: gateway-3
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /quux
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-3
+        namespace: default
+        sectionName: http
 infraIR:
   default/gateway-1:
     proxy:
@@ -98,12 +330,50 @@ infraIR:
           name: envoy-gateway-class
       name: default/gateway-1
       namespace: envoy-gateway-system
+  default/gateway-2:
+    proxy:
+      listeners:
+      - address: null
+        name: default/gateway-2/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-2
+          gateway.envoyproxy.io/owning-gateway-namespace: default
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: default/gateway-2
+      namespace: envoy-gateway-system
+  default/gateway-3:
+    proxy:
+      listeners:
+      - address: null
+        name: default/gateway-3/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-3
+          gateway.envoyproxy.io/owning-gateway-namespace: default
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: default/gateway-3
+      namespace: envoy-gateway-system
 securityPolicies:
 - apiVersion: gateway.envoyproxy.io/v1alpha1
   kind: SecurityPolicy
   metadata:
     creationTimestamp: null
-    name: policy-for-gateway
+    name: policy-for-httproute-1
     namespace: default
   spec:
     extAuth:
@@ -118,8 +388,8 @@ securityPolicies:
         - header2
     targetRef:
       group: gateway.networking.k8s.io
-      kind: Gateway
-      name: gateway-1
+      kind: HTTPRoute
+      name: httproute-1
   status:
     ancestors:
     - ancestorRef:
@@ -127,6 +397,7 @@ securityPolicies:
         kind: Gateway
         name: gateway-1
         namespace: default
+        sectionName: http
       conditions:
       - lastTransitionTime: null
         message: 'ExtAuth: service default/http-backend not found.'
@@ -134,6 +405,162 @@ securityPolicies:
         status: "False"
         type: Accepted
       controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-httproute-2
+    namespace: default
+  spec:
+    extAuth:
+      failOpen: true
+      http:
+        backendRefs:
+        - name: http-backend
+          namespace: default
+          port: 80
+        headersToBackend:
+        - header1
+        - header2
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-2
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: 'ExtAuth: service default/http-backend not found.'
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-httproute-3
+    namespace: default
+  spec:
+    basicAuth:
+      users:
+        group: null
+        kind: null
+        name: users-secret1
+    extAuth:
+      failOpen: true
+      http:
+        backendRefs:
+        - name: http-backend
+          namespace: default
+          port: 80
+        headersToBackend:
+        - header1
+        - header2
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-3
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: |-
+          BasicAuth: secret default/users-secret1 does not exist
+          ExtAuth: service default/http-backend not found.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-gateway-2
+    namespace: default
+  spec:
+    extAuth:
+      failOpen: true
+      http:
+        backendRefs:
+        - name: http-backend
+          namespace: default
+          port: 80
+        headersToBackend:
+        - header1
+        - header2
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-2
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-2
+        namespace: default
+      conditions:
+      - lastTransitionTime: null
+        message: 'ExtAuth: service default/http-backend not found.'
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-gateway-3
+    namespace: default
+  spec:
+    basicAuth:
+      users:
+        group: null
+        kind: null
+        name: users-secret1
+    extAuth:
+      failOpen: true
+      http:
+        backendRefs:
+        - name: http-backend
+          namespace: default
+          port: 80
+        headersToBackend:
+        - header1
+        - header2
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-3
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-3
+        namespace: default
+      conditions:
+      - lastTransitionTime: null
+        message: |-
+          BasicAuth: secret default/users-secret1 does not exist
+          ExtAuth: service default/http-backend not found.
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
 xdsIR:
   default/gateway-1:
     accessLog:
@@ -187,6 +614,180 @@ xdsIR:
           name: ""
           prefix: /foo
         security: {}
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-2
+            namespace: default
+          name: httproute/default/httproute-2/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-2/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: www.bar.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: default
+        name: httproute/default/httproute-2/rule/0/match/0/www_bar_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /bar
+        security: {}
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-3
+            namespace: default
+          name: httproute/default/httproute-3/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-3/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.baz.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-3
+          namespace: default
+        name: httproute/default/httproute-3/rule/0/match/0/www_baz_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /baz
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  default/gateway-2:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-2
+        namespace: default
+        sectionName: http
+      name: default/gateway-2/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-4
+            namespace: default
+          name: httproute/default/httproute-4/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-4/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: www.qux.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-4
+          namespace: default
+        name: httproute/default/httproute-4/rule/0/match/0/www_qux_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /qux
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
+  default/gateway-3:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-3
+        namespace: default
+        sectionName: http
+      name: default/gateway-3/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-5
+            namespace: default
+          name: httproute/default/httproute-5/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-5/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.quux.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-5
+          namespace: default
+        name: httproute/default/httproute-5/rule/0/match/0/www_quux_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /quux
+        security: {}
     readyListener:
       address: 0.0.0.0
       ipFamily: IPv4
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport-port.in.yaml b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport-port.in.yaml
new file mode 100644
index 000000000..40171222d
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport-port.in.yaml
@@ -0,0 +1,131 @@
+gateways:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: Gateway
+    metadata:
+      namespace: default
+      name: gateway-1
+    spec:
+      gatewayClassName: envoy-gateway-class
+      listeners:
+        - name: http
+          protocol: HTTP
+          port: 80
+          allowedRoutes:
+            namespaces:
+              from: All
+httpRoutes:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-1
+    spec:
+      hostnames:
+        - www.foo.com
+      parentRefs:
+        - namespace: default
+          name: gateway-1
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: /foo1
+          backendRefs:
+            - name: service-1
+              port: 8080
+        - matches:
+            - path:
+                value: /foo2
+          backendRefs:
+            - name: service-2
+              port: 8080
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-2
+    spec:
+      hostnames:
+        - www.bar.com
+      parentRefs:
+        - namespace: default
+          name: gateway-1
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: /bar
+          backendRefs:
+            - name: service-3
+              port: 8080
+serviceImports:
+  - apiVersion: multicluster.x-k8s.io/v1alpha1
+    kind: ServiceImport
+    metadata:
+      name: http-backend
+      namespace: envoy-gateway
+    spec:
+      ips:
+        - 7.7.7.7
+      ports:
+        - port: 80
+          name: http
+          protocol: TCP
+endpointSlices:
+  - apiVersion: discovery.k8s.io/v1
+    kind: EndpointSlice
+    metadata:
+      name: endpointslice-http-backend
+      namespace: envoy-gateway
+      labels:
+        multicluster.kubernetes.io/service-name: http-backend
+    addressType: IPv4
+    ports:
+      - name: http
+        protocol: TCP
+        port: 80
+    endpoints:
+      - addresses:
+          - 7.7.7.7
+        conditions:
+          ready: true
+referenceGrants:
+  - apiVersion: gateway.networking.k8s.io/v1alpha2
+    kind: ReferenceGrant
+    metadata:
+      namespace: envoy-gateway
+      name: referencegrant-1
+    spec:
+      from:
+        - group: gateway.envoyproxy.io
+          kind: SecurityPolicy
+          namespace: default
+      to:
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
+securityPolicies:
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: SecurityPolicy
+    metadata:
+      namespace: default
+      # This will only apply to the httproute-2
+      name: policy-for-gateway-1
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+      extAuth:
+        failOpen: false
+        http:
+          backendRefs:
+            - Group: multicluster.x-k8s.io
+              Kind: ServiceImport
+              Name: http-backend
+              Namespace: envoy-gateway
+              # Wrong port here is intentional.
+              Port: 9876
+          Path: /auth
+          headersToBackend:
+            - header1
+            - header2
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport-port.out.yaml b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport-port.out.yaml
new file mode 100644
index 000000000..64765bd9b
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport-port.out.yaml
@@ -0,0 +1,305 @@
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: default
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: default
+  spec:
+    hostnames:
+    - www.foo.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /foo1
+    - backendRefs:
+      - name: service-2
+        port: 8080
+      matches:
+      - path:
+          value: /foo2
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-2
+    namespace: default
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-3
+        port: 8080
+      matches:
+      - path:
+          value: /bar
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+infraIR:
+  default/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: default/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: default
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: default/gateway-1
+      namespace: envoy-gateway-system
+securityPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-gateway-1
+    namespace: default
+  spec:
+    extAuth:
+      failOpen: false
+      http:
+        backendRefs:
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
+          name: http-backend
+          namespace: envoy-gateway
+          port: 9876
+        headersToBackend:
+        - header1
+        - header2
+        path: /auth
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-1
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+      conditions:
+      - lastTransitionTime: null
+        message: 'ExtAuth: TCP Port 9876 not found on service envoy-gateway/http-backend.'
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+xdsIR:
+  default/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      name: default/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.foo.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/0/match/0/www_foo_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo1
+        security: {}
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/1
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-2
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/1/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.foo.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/1/match/0/www_foo_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo2
+        security: {}
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-2
+            namespace: default
+          name: httproute/default/httproute-2/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-3
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-2/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.bar.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: default
+        name: httproute/default/httproute-2/rule/0/match/0/www_bar_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /bar
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport.in.yaml b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport.in.yaml
new file mode 100644
index 000000000..7e83e335f
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport.in.yaml
@@ -0,0 +1,118 @@
+gateways:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: Gateway
+    metadata:
+      namespace: default
+      name: gateway-1
+    spec:
+      gatewayClassName: envoy-gateway-class
+      listeners:
+        - name: http
+          protocol: HTTP
+          port: 80
+          allowedRoutes:
+            namespaces:
+              from: All
+httpRoutes:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-1
+    spec:
+      hostnames:
+        - www.foo.com
+      parentRefs:
+        - namespace: default
+          name: gateway-1
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: /foo1
+          backendRefs:
+            - name: service-1
+              port: 8080
+        - matches:
+            - path:
+                value: /foo2
+          backendRefs:
+            - name: service-2
+              port: 8080
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-2
+    spec:
+      hostnames:
+        - www.bar.com
+      parentRefs:
+        - namespace: default
+          name: gateway-1
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: /bar
+          backendRefs:
+            - name: service-3
+              port: 8080
+endpointSlices:
+  - apiVersion: discovery.k8s.io/v1
+    kind: EndpointSlice
+    metadata:
+      name: endpointslice-http-backend
+      namespace: envoy-gateway
+      labels:
+        multicluster.kubernetes.io/service-name: http-backend
+    addressType: IPv4
+    ports:
+      - name: http
+        protocol: TCP
+        port: 80
+    endpoints:
+      - addresses:
+          - 7.7.7.7
+        conditions:
+          ready: true
+referenceGrants:
+  - apiVersion: gateway.networking.k8s.io/v1alpha2
+    kind: ReferenceGrant
+    metadata:
+      namespace: envoy-gateway
+      name: referencegrant-1
+    spec:
+      from:
+        - group: gateway.envoyproxy.io
+          kind: SecurityPolicy
+          namespace: default
+      to:
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
+securityPolicies:
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: SecurityPolicy
+    metadata:
+      namespace: default
+      # This will only apply to the httproute-2
+      name: policy-for-gateway-1
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+      extAuth:
+        failOpen: false
+        http:
+          backendRefs:
+            # This whole ServiceImport was never created.
+            - Group: multicluster.x-k8s.io
+              Kind: ServiceImport
+              Name: http-backend
+              Namespace: envoy-gateway
+              Port: 80
+          Path: /auth
+          headersToBackend:
+            - header1
+            - header2
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport.out.yaml b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport.out.yaml
new file mode 100644
index 000000000..628bd999f
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-with-extauth-invalid-no-serviceimport.out.yaml
@@ -0,0 +1,305 @@
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: default
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: default
+  spec:
+    hostnames:
+    - www.foo.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /foo1
+    - backendRefs:
+      - name: service-2
+        port: 8080
+      matches:
+      - path:
+          value: /foo2
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-2
+    namespace: default
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-3
+        port: 8080
+      matches:
+      - path:
+          value: /bar
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+infraIR:
+  default/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: default/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: default
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: default/gateway-1
+      namespace: envoy-gateway-system
+securityPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-gateway-1
+    namespace: default
+  spec:
+    extAuth:
+      failOpen: false
+      http:
+        backendRefs:
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
+          name: http-backend
+          namespace: envoy-gateway
+          port: 80
+        headersToBackend:
+        - header1
+        - header2
+        path: /auth
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-1
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+      conditions:
+      - lastTransitionTime: null
+        message: 'ExtAuth: serviceimport envoy-gateway/http-backend not found.'
+        reason: Invalid
+        status: "False"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+xdsIR:
+  default/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      name: default/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.foo.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/0/match/0/www_foo_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo1
+        security: {}
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/1
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-2
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/1/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.foo.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/1/match/0/www_foo_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo2
+        security: {}
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-2
+            namespace: default
+          name: httproute/default/httproute-2/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-3
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-2/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        directResponse:
+          statusCode: 500
+        hostname: www.bar.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: default
+        name: httproute/default/httproute-2/rule/0/match/0/www_bar_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /bar
+        security: {}
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-extauth-serviceimport.in.yaml b/internal/gatewayapi/testdata/securitypolicy-with-extauth-serviceimport.in.yaml
new file mode 100644
index 000000000..96718f375
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-with-extauth-serviceimport.in.yaml
@@ -0,0 +1,180 @@
+gateways:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: Gateway
+    metadata:
+      namespace: default
+      name: gateway-1
+    spec:
+      gatewayClassName: envoy-gateway-class
+      listeners:
+        - name: http
+          protocol: HTTP
+          port: 80
+          allowedRoutes:
+            namespaces:
+              from: All
+httpRoutes:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-1
+    spec:
+      hostnames:
+        - www.foo.com
+      parentRefs:
+        - namespace: default
+          name: gateway-1
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: /foo1
+          backendRefs:
+            - name: service-1
+              port: 8080
+        - matches:
+            - path:
+                value: /foo2
+          backendRefs:
+            - name: service-2
+              port: 8080
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-2
+    spec:
+      hostnames:
+        - www.bar.com
+      parentRefs:
+        - namespace: default
+          name: gateway-1
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: /bar
+          backendRefs:
+            - name: service-3
+              port: 8080
+serviceImports:
+  - apiVersion: multicluster.x-k8s.io/v1alpha1
+    kind: ServiceImport
+    metadata:
+      name: http-backend
+      namespace: envoy-gateway
+    spec:
+      ips:
+        - 7.7.7.7
+      ports:
+        - port: 80
+          name: http
+          # Missing protocol here is intentional to test the default protocol handling.
+  - apiVersion: multicluster.x-k8s.io/v1alpha1
+    kind: ServiceImport
+    metadata:
+      name: grpc-backend
+      namespace: default
+    spec:
+      ips:
+        - 8.8.8.8
+      ports:
+        - port: 9000
+          name: grpc
+          protocol: TCP
+endpointSlices:
+  - apiVersion: discovery.k8s.io/v1
+    kind: EndpointSlice
+    metadata:
+      name: endpointslice-http-backend
+      namespace: envoy-gateway
+      labels:
+        multicluster.kubernetes.io/service-name: http-backend
+    addressType: IPv4
+    ports:
+      - name: http
+        protocol: TCP
+        port: 80
+    endpoints:
+      - addresses:
+          - 7.7.7.7
+        conditions:
+          ready: true
+  - apiVersion: discovery.k8s.io/v1
+    kind: EndpointSlice
+    metadata:
+      name: endpointslice-grpc-backend
+      namespace: default
+      labels:
+        multicluster.kubernetes.io/service-name: grpc-backend
+    addressType: IPv4
+    ports:
+      - name: grpc
+        protocol: TCP
+        port: 9000
+    endpoints:
+      - addresses:
+          - 8.8.8.8
+        conditions:
+          ready: true
+referenceGrants:
+  - apiVersion: gateway.networking.k8s.io/v1alpha2
+    kind: ReferenceGrant
+    metadata:
+      namespace: envoy-gateway
+      name: referencegrant-1
+    spec:
+      from:
+        - group: gateway.envoyproxy.io
+          kind: SecurityPolicy
+          namespace: default
+      to:
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
+securityPolicies:
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: SecurityPolicy
+    metadata:
+      namespace: default
+      name: policy-for-http-route-1
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: HTTPRoute
+        name: httproute-1
+      extAuth:
+        failOpen: true
+        headersToExtAuth:
+          - header1
+          - header2
+        grpc:
+          backendRefs:
+            - group: multicluster.x-k8s.io
+              kind: ServiceImport
+              name: grpc-backend
+              port: 9000
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: SecurityPolicy
+    metadata:
+      namespace: default
+      # This will only apply to the httproute-2
+      name: policy-for-gateway-1
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+      extAuth:
+        failOpen: false
+        http:
+          backendRefs:
+            - Group: multicluster.x-k8s.io
+              Kind: ServiceImport
+              Name: http-backend
+              Namespace: envoy-gateway
+              Port: 80
+          Path: /auth
+          headersToBackend:
+            - header1
+            - header2
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-extauth-serviceimport.out.yaml b/internal/gatewayapi/testdata/securitypolicy-with-extauth-serviceimport.out.yaml
new file mode 100644
index 000000000..dbd453397
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-with-extauth-serviceimport.out.yaml
@@ -0,0 +1,421 @@
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: default
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 2
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: default
+  spec:
+    hostnames:
+    - www.foo.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /foo1
+    - backendRefs:
+      - name: service-2
+        port: 8080
+      matches:
+      - path:
+          value: /foo2
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-2
+    namespace: default
+  spec:
+    hostnames:
+    - www.bar.com
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-3
+        port: 8080
+      matches:
+      - path:
+          value: /bar
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+infraIR:
+  default/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: default/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: default
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: default/gateway-1
+      namespace: envoy-gateway-system
+securityPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-http-route-1
+    namespace: default
+  spec:
+    extAuth:
+      failOpen: true
+      grpc:
+        backendRefs:
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
+          name: grpc-backend
+          port: 9000
+      headersToExtAuth:
+      - header1
+      - header2
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-gateway-1
+    namespace: default
+  spec:
+    extAuth:
+      failOpen: false
+      http:
+        backendRefs:
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
+          name: http-backend
+          namespace: envoy-gateway
+          port: 80
+        headersToBackend:
+        - header1
+        - header2
+        path: /auth
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-1
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: 'This policy is being overridden by other securityPolicies for these
+          routes: [default/httproute-1]'
+        reason: Overridden
+        status: "True"
+        type: Overridden
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+xdsIR:
+  default/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      name: default/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: www.foo.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/0/match/0/www_foo_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo1
+        security:
+          extAuth:
+            failOpen: true
+            grpc:
+              authority: grpc-backend.default:9000
+              destination:
+                metadata:
+                  kind: SecurityPolicy
+                  name: policy-for-http-route-1
+                  namespace: default
+                name: securitypolicy/default/policy-for-http-route-1/extauth/0
+                settings:
+                - addressType: IP
+                  endpoints:
+                  - host: 8.8.8.8
+                    port: 9000
+                  metadata:
+                    kind: ServiceImport
+                    name: grpc-backend
+                    namespace: default
+                    sectionName: "9000"
+                  name: securitypolicy/default/policy-for-http-route-1/extauth/0/backend/0
+                  protocol: GRPC
+                  weight: 1
+            headersToExtAuth:
+            - header1
+            - header2
+            name: securitypolicy/default/policy-for-http-route-1
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/1
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-2
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/1/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: www.foo.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/1/match/0/www_foo_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo2
+        security:
+          extAuth:
+            failOpen: true
+            grpc:
+              authority: grpc-backend.default:9000
+              destination:
+                metadata:
+                  kind: SecurityPolicy
+                  name: policy-for-http-route-1
+                  namespace: default
+                name: securitypolicy/default/policy-for-http-route-1/extauth/0
+                settings:
+                - addressType: IP
+                  endpoints:
+                  - host: 8.8.8.8
+                    port: 9000
+                  metadata:
+                    kind: ServiceImport
+                    name: grpc-backend
+                    namespace: default
+                    sectionName: "9000"
+                  name: securitypolicy/default/policy-for-http-route-1/extauth/0/backend/0
+                  protocol: GRPC
+                  weight: 1
+            headersToExtAuth:
+            - header1
+            - header2
+            name: securitypolicy/default/policy-for-http-route-1
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-2
+            namespace: default
+          name: httproute/default/httproute-2/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-3
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-2/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: www.bar.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-2
+          namespace: default
+        name: httproute/default/httproute-2/rule/0/match/0/www_bar_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /bar
+        security:
+          extAuth:
+            failOpen: false
+            http:
+              authority: http-backend.envoy-gateway:80
+              destination:
+                metadata:
+                  kind: SecurityPolicy
+                  name: policy-for-gateway-1
+                  namespace: default
+                name: securitypolicy/default/policy-for-gateway-1/extauth/0
+                settings:
+                - addressType: IP
+                  metadata:
+                    kind: ServiceImport
+                    name: http-backend
+                    namespace: envoy-gateway
+                    sectionName: "80"
+                  name: securitypolicy/default/policy-for-gateway-1/extauth/0/backend/0
+                  protocol: HTTP
+                  weight: 1
+              headersToBackend:
+              - header1
+              - header2
+              path: /auth
+            name: securitypolicy/default/policy-for-gateway-1
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-extauth-with-backendtlspolicy.in.yaml b/internal/gatewayapi/testdata/securitypolicy-with-extauth-with-backendtlspolicy.in.yaml
index a019d9118..5f4f15cd1 100644
--- a/internal/gatewayapi/testdata/securitypolicy-with-extauth-with-backendtlspolicy.in.yaml
+++ b/internal/gatewayapi/testdata/securitypolicy-with-extauth-with-backendtlspolicy.in.yaml
@@ -63,12 +63,15 @@ services:
         - port: 80
           name: http
           protocol: TCP
-  - apiVersion: v1
-    kind: Service
+serviceImports:
+  - apiVersion: multicluster.x-k8s.io/v1alpha1
+    kind: ServiceImport
     metadata:
-      namespace: default
       name: grpc-backend
+      namespace: default
     spec:
+      ips:
+        - 8.8.8.8
       ports:
         - port: 9000
           name: grpc
@@ -97,7 +100,7 @@ endpointSlices:
       name: endpointslice-grpc-backend
       namespace: default
       labels:
-        kubernetes.io/service-name: grpc-backend
+        multicluster.kubernetes.io/service-name: grpc-backend
     addressType: IPv4
     ports:
       - name: grpc
@@ -200,8 +203,8 @@ backendTLSPolicies:
       namespace: default
     spec:
       targetRefs:
-        - group: ""
-          kind: Service
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
           name: grpc-backend
           sectionName: grpc
       validation:
@@ -248,6 +251,8 @@ securityPolicies:
           - header2
         grpc:
           backendRefs:
-            - name: grpc-backend
+            - group: multicluster.x-k8s.io
+              kind: ServiceImport
+              name: grpc-backend
               port: 9000
         failOpen: true
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-extauth-with-backendtlspolicy.out.yaml b/internal/gatewayapi/testdata/securitypolicy-with-extauth-with-backendtlspolicy.out.yaml
index 3d040373b..cb66e4833 100644
--- a/internal/gatewayapi/testdata/securitypolicy-with-extauth-with-backendtlspolicy.out.yaml
+++ b/internal/gatewayapi/testdata/securitypolicy-with-extauth-with-backendtlspolicy.out.yaml
@@ -39,8 +39,8 @@ backendTLSPolicies:
     namespace: default
   spec:
     targetRefs:
-    - group: ""
-      kind: Service
+    - group: multicluster.x-k8s.io
+      kind: ServiceImport
       name: grpc-backend
       sectionName: grpc
     validation:
@@ -213,7 +213,9 @@ securityPolicies:
       failOpen: true
       grpc:
         backendRefs:
-        - name: grpc-backend
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
+          name: grpc-backend
           port: 9000
       headersToExtAuth:
       - header1
@@ -346,7 +348,7 @@ xdsIR:
                   - host: 8.8.8.8
                     port: 9000
                   metadata:
-                    kind: Service
+                    kind: ServiceImport
                     name: grpc-backend
                     namespace: default
                     sectionName: "9000"
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-jwt-serviceimport.in.yaml b/internal/gatewayapi/testdata/securitypolicy-with-jwt-serviceimport.in.yaml
new file mode 100644
index 000000000..f06d4b43e
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-with-jwt-serviceimport.in.yaml
@@ -0,0 +1,147 @@
+gateways:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: Gateway
+    metadata:
+      namespace: default
+      name: gateway-1
+    spec:
+      gatewayClassName: envoy-gateway-class
+      listeners:
+        - name: http
+          protocol: HTTP
+          port: 80
+          allowedRoutes:
+            namespaces:
+              from: All
+httpRoutes:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-1
+    spec:
+      hostnames:
+        - gateway.envoyproxy.io
+      parentRefs:
+        - namespace: default
+          name: gateway-1
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: "/"
+          backendRefs:
+            - name: service-1
+              port: 8080
+serviceImports:
+  - apiVersion: multicluster.x-k8s.io/v1alpha1
+    kind: ServiceImport
+    metadata:
+      name: grpc-backend
+      namespace: default
+    spec:
+      ips:
+        - 8.8.8.8
+      ports:
+        - port: 9000
+          name: grpc
+          protocol: TCP
+endpointSlices:
+  - apiVersion: discovery.k8s.io/v1
+    kind: EndpointSlice
+    metadata:
+      name: endpointslice-grpc-backend
+      namespace: default
+      labels:
+        multicluster.kubernetes.io/service-name: grpc-backend
+    addressType: IPv4
+    ports:
+      - name: grpc
+        protocol: TCP
+        port: 9000
+    endpoints:
+      - addresses:
+          - 8.8.8.8
+        conditions:
+          ready: true
+configMaps:
+  - apiVersion: v1
+    kind: ConfigMap
+    metadata:
+      name: ca-cmap
+      namespace: default
+    data:
+      ca.crt: |
+        -----BEGIN CERTIFICATE-----
+        MIIDJzCCAg+gAwIBAgIUAl6UKIuKmzte81cllz5PfdN2IlIwDQYJKoZIhvcNAQEL
+        BQAwIzEQMA4GA1UEAwwHbXljaWVudDEPMA0GA1UECgwGa3ViZWRiMB4XDTIzMTAw
+        MjA1NDE1N1oXDTI0MTAwMTA1NDE1N1owIzEQMA4GA1UEAwwHbXljaWVudDEPMA0G
+        A1UECgwGa3ViZWRiMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwSTc
+        1yj8HW62nynkFbXo4VXKv2jC0PM7dPVky87FweZcTKLoWQVPQE2p2kLDK6OEszmM
+        yyr+xxWtyiveremrWqnKkNTYhLfYPhgQkczib7eUalmFjUbhWdLvHakbEgCodn3b
+        kz57mInX2VpiDOKg4kyHfiuXWpiBqrCx0KNLpxo3DEQcFcsQTeTHzh4752GV04RU
+        Ti/GEWyzIsl4Rg7tGtAwmcIPgUNUfY2Q390FGqdH4ahn+mw/6aFbW31W63d9YJVq
+        ioyOVcaMIpM5B/c7Qc8SuhCI1YGhUyg4cRHLEw5VtikioyE3X04kna3jQAj54YbR
+        bpEhc35apKLB21HOUQIDAQABo1MwUTAdBgNVHQ4EFgQUyvl0VI5vJVSuYFXu7B48
+        6PbMEAowHwYDVR0jBBgwFoAUyvl0VI5vJVSuYFXu7B486PbMEAowDwYDVR0TAQH/
+        BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAMLxrgFVMuNRq2wAwcBt7SnNR5Cfz
+        2MvXq5EUmuawIUi9kaYjwdViDREGSjk7JW17vl576HjDkdfRwi4E28SydRInZf6J
+        i8HZcZ7caH6DxR335fgHVzLi5NiTce/OjNBQzQ2MJXVDd8DBmG5fyatJiOJQ4bWE
+        A7FlP0RdP3CO3GWE0M5iXOB2m1qWkE2eyO4UHvwTqNQLdrdAXgDQlbam9e4BG3Gg
+        d/6thAkWDbt/QNT+EJHDCvhDRKh1RuGHyg+Y+/nebTWWrFWsktRrbOoHCZiCpXI1
+        3eXE6nt0YkgtDxG22KqnhpAg9gUSs2hlhoxyvkzyF0mu6NhPlwAgnq7+/Q==
+        -----END CERTIFICATE-----
+backendTLSPolicies:
+  - apiVersion: gateway.networking.k8s.io/v1alpha2
+    kind: BackendTLSPolicy
+    metadata:
+      name: policy-btls-grpc-backend
+      namespace: default
+    spec:
+      targetRefs:
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
+          name: grpc-backend
+          sectionName: grpc
+      validation:
+        caCertificateRefs:
+          - name: ca-cmap
+            group: ""
+            kind: ConfigMap
+        hostname: foo.bar.com
+securityPolicies:
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: SecurityPolicy
+    metadata:
+      namespace: default
+      name: policy-for-route
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: HTTPRoute
+        name: httproute-1
+      jwt:
+        providers:
+          - name: foobar
+            issuer: https://foo.bar.com
+            audiences:
+              - foo.bar.com
+            remoteJWKS:
+              backendRefs:
+                - group: multicluster.x-k8s.io
+                  kind: ServiceImport
+                  name: grpc-backend
+                  port: 9000
+              backendSettings:
+                retry:
+                  numRetries: 3
+                  perRetry:
+                    backOff:
+                      baseInterval: 1s
+                      maxInterval: 5s
+                  retryOn:
+                    triggers: [ "5xx", "gateway-error", "reset" ]
+              uri: https://foo.bar.com/jwt/public-key/jwks.json
+            claimToHeaders:
+              - header: claim-header
+                claim: claim
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-jwt-serviceimport.out.yaml b/internal/gatewayapi/testdata/securitypolicy-with-jwt-serviceimport.out.yaml
new file mode 100644
index 000000000..8fc6f3c66
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-with-jwt-serviceimport.out.yaml
@@ -0,0 +1,292 @@
+backendTLSPolicies:
+- apiVersion: gateway.networking.k8s.io/v1alpha2
+  kind: BackendTLSPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-btls-grpc-backend
+    namespace: default
+  spec:
+    targetRefs:
+    - group: multicluster.x-k8s.io
+      kind: ServiceImport
+      name: grpc-backend
+      sectionName: grpc
+    validation:
+      caCertificateRefs:
+      - group: ""
+        kind: ConfigMap
+        name: ca-cmap
+      hostname: foo.bar.com
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.envoyproxy.io
+        kind: SecurityPolicy
+        name: policy-for-route
+        namespace: default
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: default
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 1
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: default
+  spec:
+    hostnames:
+    - gateway.envoyproxy.io
+    parentRefs:
+    - name: gateway-1
+      namespace: default
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: default
+        sectionName: http
+infraIR:
+  default/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: default/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: default
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: default/gateway-1
+      namespace: envoy-gateway-system
+securityPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-route
+    namespace: default
+  spec:
+    jwt:
+      providers:
+      - audiences:
+        - foo.bar.com
+        claimToHeaders:
+        - claim: claim
+          header: claim-header
+        issuer: https://foo.bar.com
+        name: foobar
+        remoteJWKS:
+          backendRefs:
+          - group: multicluster.x-k8s.io
+            kind: ServiceImport
+            name: grpc-backend
+            port: 9000
+          backendSettings:
+            retry:
+              numRetries: 3
+              perRetry:
+                backOff:
+                  baseInterval: 1s
+                  maxInterval: 5s
+              retryOn:
+                triggers:
+                - 5xx
+                - gateway-error
+                - reset
+          uri: https://foo.bar.com/jwt/public-key/jwks.json
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: httproute-1
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+xdsIR:
+  default/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: default
+        sectionName: http
+      name: default/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: gateway.envoyproxy.io
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/0/match/0/gateway_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /
+        security:
+          jwt:
+            providers:
+            - audiences:
+              - foo.bar.com
+              claimToHeaders:
+              - claim: claim
+                header: claim-header
+              issuer: https://foo.bar.com
+              name: foobar
+              remoteJWKS:
+                destination:
+                  metadata:
+                    kind: SecurityPolicy
+                    name: policy-for-route
+                    namespace: default
+                  name: securitypolicy/default/policy-for-route/jwt/0
+                  settings:
+                  - addressType: IP
+                    endpoints:
+                    - host: 8.8.8.8
+                      port: 9000
+                    metadata:
+                      kind: ServiceImport
+                      name: grpc-backend
+                      namespace: default
+                      sectionName: "9000"
+                    name: securitypolicy/default/policy-for-route/jwt/0/backend/0
+                    protocol: HTTPS
+                    tls:
+                      alpnProtocols: null
+                      caCertificate:
+                        certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURKekNDQWcrZ0F3SUJBZ0lVQWw2VUtJdUttenRlODFjbGx6NVBmZE4ySWxJd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0l6RVFNQTRHQTFVRUF3d0hiWGxqYVdWdWRERVBNQTBHQTFVRUNnd0dhM1ZpWldSaU1CNFhEVEl6TVRBdwpNakExTkRFMU4xb1hEVEkwTVRBd01UQTFOREUxTjFvd0l6RVFNQTRHQTFVRUF3d0hiWGxqYVdWdWRERVBNQTBHCkExVUVDZ3dHYTNWaVpXUmlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXdTVGMKMXlqOEhXNjJueW5rRmJYbzRWWEt2MmpDMFBNN2RQVmt5ODdGd2VaY1RLTG9XUVZQUUUycDJrTERLNk9Fc3ptTQp5eXIreHhXdHlpdmVyZW1yV3FuS2tOVFloTGZZUGhnUWtjemliN2VVYWxtRmpVYmhXZEx2SGFrYkVnQ29kbjNiCmt6NTdtSW5YMlZwaURPS2c0a3lIZml1WFdwaUJxckN4MEtOTHB4bzNERVFjRmNzUVRlVEh6aDQ3NTJHVjA0UlUKVGkvR0VXeXpJc2w0Umc3dEd0QXdtY0lQZ1VOVWZZMlEzOTBGR3FkSDRhaG4rbXcvNmFGYlczMVc2M2Q5WUpWcQppb3lPVmNhTUlwTTVCL2M3UWM4U3VoQ0kxWUdoVXlnNGNSSExFdzVWdGlraW95RTNYMDRrbmEzalFBajU0WWJSCmJwRWhjMzVhcEtMQjIxSE9VUUlEQVFBQm8xTXdVVEFkQmdOVkhRNEVGZ1FVeXZsMFZJNXZKVlN1WUZYdTdCNDgKNlBiTUVBb3dId1lEVlIwakJCZ3dGb0FVeXZsMFZJNXZKVlN1WUZYdTdCNDg2UGJNRUFvd0R3WURWUjBUQVFILwpCQVV3QXdFQi96QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFNTHhyZ0ZWTXVOUnEyd0F3Y0J0N1NuTlI1Q2Z6CjJNdlhxNUVVbXVhd0lVaTlrYVlqd2RWaURSRUdTams3SlcxN3ZsNTc2SGpEa2RmUndpNEUyOFN5ZFJJblpmNkoKaThIWmNaN2NhSDZEeFIzMzVmZ0hWekxpNU5pVGNlL09qTkJRelEyTUpYVkRkOERCbUc1ZnlhdEppT0pRNGJXRQpBN0ZsUDBSZFAzQ08zR1dFME01aVhPQjJtMXFXa0UyZXlPNFVIdndUcU5RTGRyZEFYZ0RRbGJhbTllNEJHM0dnCmQvNnRoQWtXRGJ0L1FOVCtFSkhEQ3ZoRFJLaDFSdUdIeWcrWSsvbmViVFdXckZXc2t0UnJiT29IQ1ppQ3BYSTEKM2VYRTZudDBZa2d0RHhHMjJLcW5ocEFnOWdVU3MyaGxob3h5dmt6eUYwbXU2TmhQbHdBZ25xNysvUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
+                        name: policy-btls-grpc-backend/default-ca
+                      sni: foo.bar.com
+                    weight: 1
+                traffic:
+                  retry:
+                    numRetries: 3
+                    perRetry:
+                      backOff:
+                        baseInterval: 1s
+                        maxInterval: 5s
+                    retryOn:
+                      triggers:
+                      - 5xx
+                      - gateway-error
+                      - reset
+                uri: https://foo.bar.com/jwt/public-key/jwks.json
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-oidc-serviceimport.in.yaml b/internal/gatewayapi/testdata/securitypolicy-with-oidc-serviceimport.in.yaml
new file mode 100644
index 000000000..714d8d899
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-with-oidc-serviceimport.in.yaml
@@ -0,0 +1,166 @@
+secrets:
+  - apiVersion: v1
+    kind: Secret
+    metadata:
+      namespace: envoy-gateway
+      name: client1-secret
+    data:
+      client-secret: Y2xpZW50MTpzZWNyZXQK
+  - apiVersion: v1
+    kind: Secret
+    metadata:
+      namespace: envoy-gateway-system
+      name: envoy-oidc-hmac
+    data:
+      hmac-secret: qrOYACHXoe7UEDI/raOjNSx+Z9ufXSc/22C3T6X/zPY=
+gateways:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: Gateway
+    metadata:
+      namespace: envoy-gateway
+      name: gateway-1
+    spec:
+      gatewayClassName: envoy-gateway-class
+      listeners:
+        - name: http
+          protocol: HTTP
+          port: 80
+          allowedRoutes:
+            namespaces:
+              from: All
+httpRoutes:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: HTTPRoute
+    metadata:
+      namespace: default
+      name: httproute-1
+    spec:
+      hostnames:
+        - www.example.com
+      parentRefs:
+        - namespace: envoy-gateway
+          name: gateway-1
+          sectionName: http
+      rules:
+        - matches:
+            - path:
+                value: "/foo"
+          backendRefs:
+            - name: service-1
+              port: 8080
+serviceImports:
+  - apiVersion: multicluster.x-k8s.io/v1alpha1
+    kind: ServiceImport
+    metadata:
+      name: grpc-backend
+      namespace: envoy-gateway
+    spec:
+      ips:
+        - 8.8.8.8
+      ports:
+        - port: 9000
+          name: grpc
+          protocol: TCP
+endpointSlices:
+  - apiVersion: discovery.k8s.io/v1
+    kind: EndpointSlice
+    metadata:
+      name: endpointslice-grpc-backend
+      namespace: envoy-gateway
+      labels:
+        multicluster.kubernetes.io/service-name: grpc-backend
+    addressType: IPv4
+    ports:
+      - name: grpc
+        protocol: TCP
+        port: 9000
+    endpoints:
+      - addresses:
+          - 8.8.8.8
+        conditions:
+          ready: true
+securityPolicies:
+  - apiVersion: gateway.envoyproxy.io/v1alpha1
+    kind: SecurityPolicy
+    metadata:
+      namespace: envoy-gateway
+      name: policy-for-gateway
+      uid: b8284d0f-de82-4c65-b204-96a0d3f258a1
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+      oidc:
+        provider:
+          backendRefs:
+            - group: multicluster.x-k8s.io
+              kind: ServiceImport
+              name: grpc-backend
+              port: 9000
+          backendSettings:
+            retry:
+              numRetries: 3
+              perRetry:
+                backOff:
+                  baseInterval: 1s
+                  maxInterval: 5s
+              retryOn:
+                triggers: [ "5xx", "gateway-error", "reset" ]
+          issuer: "https://oauth.foo.com"
+          authorizationEndpoint: "https://oauth.foo.com/oauth2/v2/auth"
+          tokenEndpoint: "https://oauth.foo.com/token"
+        clientID: "client1.apps.googleusercontent.com"
+        clientSecret:
+          name: "client1-secret"
+        redirectURL: "https://www.example.com/bar/oauth2/callback"
+        logoutPath: "/bar/logout"
+        forwardAccessToken: true
+        defaultTokenTTL: 30m
+        refreshToken: true
+        defaultRefreshTokenTTL: 24h
+configMaps:
+  - apiVersion: v1
+    kind: ConfigMap
+    metadata:
+      name: ca-cmap
+      namespace: envoy-gateway
+    data:
+      ca.crt: |
+        -----BEGIN CERTIFICATE-----
+        MIIDJzCCAg+gAwIBAgIUAl6UKIuKmzte81cllz5PfdN2IlIwDQYJKoZIhvcNAQEL
+        BQAwIzEQMA4GA1UEAwwHbXljaWVudDEPMA0GA1UECgwGa3ViZWRiMB4XDTIzMTAw
+        MjA1NDE1N1oXDTI0MTAwMTA1NDE1N1owIzEQMA4GA1UEAwwHbXljaWVudDEPMA0G
+        A1UECgwGa3ViZWRiMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwSTc
+        1yj8HW62nynkFbXo4VXKv2jC0PM7dPVky87FweZcTKLoWQVPQE2p2kLDK6OEszmM
+        yyr+xxWtyiveremrWqnKkNTYhLfYPhgQkczib7eUalmFjUbhWdLvHakbEgCodn3b
+        kz57mInX2VpiDOKg4kyHfiuXWpiBqrCx0KNLpxo3DEQcFcsQTeTHzh4752GV04RU
+        Ti/GEWyzIsl4Rg7tGtAwmcIPgUNUfY2Q390FGqdH4ahn+mw/6aFbW31W63d9YJVq
+        ioyOVcaMIpM5B/c7Qc8SuhCI1YGhUyg4cRHLEw5VtikioyE3X04kna3jQAj54YbR
+        bpEhc35apKLB21HOUQIDAQABo1MwUTAdBgNVHQ4EFgQUyvl0VI5vJVSuYFXu7B48
+        6PbMEAowHwYDVR0jBBgwFoAUyvl0VI5vJVSuYFXu7B486PbMEAowDwYDVR0TAQH/
+        BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAMLxrgFVMuNRq2wAwcBt7SnNR5Cfz
+        2MvXq5EUmuawIUi9kaYjwdViDREGSjk7JW17vl576HjDkdfRwi4E28SydRInZf6J
+        i8HZcZ7caH6DxR335fgHVzLi5NiTce/OjNBQzQ2MJXVDd8DBmG5fyatJiOJQ4bWE
+        A7FlP0RdP3CO3GWE0M5iXOB2m1qWkE2eyO4UHvwTqNQLdrdAXgDQlbam9e4BG3Gg
+        d/6thAkWDbt/QNT+EJHDCvhDRKh1RuGHyg+Y+/nebTWWrFWsktRrbOoHCZiCpXI1
+        3eXE6nt0YkgtDxG22KqnhpAg9gUSs2hlhoxyvkzyF0mu6NhPlwAgnq7+/Q==
+        -----END CERTIFICATE-----
+backendTLSPolicies:
+  - apiVersion: gateway.networking.k8s.io/v1alpha2
+    kind: BackendTLSPolicy
+    metadata:
+      name: policy-btls-grpc-backend
+      namespace: envoy-gateway
+    spec:
+      targetRefs:
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
+          name: grpc-backend
+          sectionName: grpc
+      validation:
+        caCertificateRefs:
+          - name: ca-cmap
+            group: ''
+            kind: ConfigMap
+        hostname: oauth.foo.com
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-oidc-serviceimport.out.yaml b/internal/gatewayapi/testdata/securitypolicy-with-oidc-serviceimport.out.yaml
new file mode 100644
index 000000000..c265650be
--- /dev/null
+++ b/internal/gatewayapi/testdata/securitypolicy-with-oidc-serviceimport.out.yaml
@@ -0,0 +1,304 @@
+backendTLSPolicies:
+- apiVersion: gateway.networking.k8s.io/v1alpha2
+  kind: BackendTLSPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-btls-grpc-backend
+    namespace: envoy-gateway
+  spec:
+    targetRefs:
+    - group: multicluster.x-k8s.io
+      kind: ServiceImport
+      name: grpc-backend
+      sectionName: grpc
+    validation:
+      caCertificateRefs:
+      - group: ""
+        kind: ConfigMap
+        name: ca-cmap
+      hostname: oauth.foo.com
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.envoyproxy.io
+        kind: SecurityPolicy
+        name: policy-for-gateway
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+gateways:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: Gateway
+  metadata:
+    creationTimestamp: null
+    name: gateway-1
+    namespace: envoy-gateway
+  spec:
+    gatewayClassName: envoy-gateway-class
+    listeners:
+    - allowedRoutes:
+        namespaces:
+          from: All
+      name: http
+      port: 80
+      protocol: HTTP
+  status:
+    listeners:
+    - attachedRoutes: 1
+      conditions:
+      - lastTransitionTime: null
+        message: Sending translated listener configuration to the data plane
+        reason: Programmed
+        status: "True"
+        type: Programmed
+      - lastTransitionTime: null
+        message: Listener has been successfully translated
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Listener references have been resolved
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      name: http
+      supportedKinds:
+      - group: gateway.networking.k8s.io
+        kind: HTTPRoute
+      - group: gateway.networking.k8s.io
+        kind: GRPCRoute
+httpRoutes:
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    creationTimestamp: null
+    name: httproute-1
+    namespace: default
+  spec:
+    hostnames:
+    - www.example.com
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - backendRefs:
+      - name: service-1
+        port: 8080
+      matches:
+      - path:
+          value: /foo
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+infraIR:
+  envoy-gateway/gateway-1:
+    proxy:
+      listeners:
+      - address: null
+        name: envoy-gateway/gateway-1/http
+        ports:
+        - containerPort: 10080
+          name: http-80
+          protocol: HTTP
+          servicePort: 80
+      metadata:
+        labels:
+          gateway.envoyproxy.io/owning-gateway-name: gateway-1
+          gateway.envoyproxy.io/owning-gateway-namespace: envoy-gateway
+        ownerReference:
+          kind: GatewayClass
+          name: envoy-gateway-class
+      name: envoy-gateway/gateway-1
+      namespace: envoy-gateway-system
+securityPolicies:
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: SecurityPolicy
+  metadata:
+    creationTimestamp: null
+    name: policy-for-gateway
+    namespace: envoy-gateway
+    uid: b8284d0f-de82-4c65-b204-96a0d3f258a1
+  spec:
+    oidc:
+      clientID: client1.apps.googleusercontent.com
+      clientSecret:
+        group: null
+        kind: null
+        name: client1-secret
+      defaultRefreshTokenTTL: 24h0m0s
+      defaultTokenTTL: 30m0s
+      forwardAccessToken: true
+      logoutPath: /bar/logout
+      provider:
+        authorizationEndpoint: https://oauth.foo.com/oauth2/v2/auth
+        backendRefs:
+        - group: multicluster.x-k8s.io
+          kind: ServiceImport
+          name: grpc-backend
+          port: 9000
+        backendSettings:
+          retry:
+            numRetries: 3
+            perRetry:
+              backOff:
+                baseInterval: 1s
+                maxInterval: 5s
+            retryOn:
+              triggers:
+              - 5xx
+              - gateway-error
+              - reset
+        issuer: https://oauth.foo.com
+        tokenEndpoint: https://oauth.foo.com/token
+      redirectURL: https://www.example.com/bar/oauth2/callback
+      refreshToken: true
+    targetRef:
+      group: gateway.networking.k8s.io
+      kind: Gateway
+      name: gateway-1
+  status:
+    ancestors:
+    - ancestorRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+      conditions:
+      - lastTransitionTime: null
+        message: Policy has been accepted.
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+xdsIR:
+  envoy-gateway/gateway-1:
+    accessLog:
+      json:
+      - path: /dev/stdout
+    http:
+    - address: 0.0.0.0
+      hostnames:
+      - '*'
+      isHTTP2: false
+      metadata:
+        kind: Gateway
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
+      name: envoy-gateway/gateway-1/http
+      path:
+        escapedSlashesAction: UnescapeAndRedirect
+        mergeSlashes: true
+      port: 10080
+      routes:
+      - destination:
+          metadata:
+            kind: HTTPRoute
+            name: httproute-1
+            namespace: default
+          name: httproute/default/httproute-1/rule/0
+          settings:
+          - addressType: IP
+            endpoints:
+            - host: 7.7.7.7
+              port: 8080
+            metadata:
+              name: service-1
+              namespace: default
+              sectionName: "8080"
+            name: httproute/default/httproute-1/rule/0/backend/0
+            protocol: HTTP
+            weight: 1
+        hostname: www.example.com
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: httproute-1
+          namespace: default
+        name: httproute/default/httproute-1/rule/0/match/0/www_example_com
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /foo
+        security:
+          oidc:
+            clientID: client1.apps.googleusercontent.com
+            clientSecret: '[redacted]'
+            cookieSuffix: b0a1b740
+            defaultRefreshTokenTTL: 24h0m0s
+            defaultTokenTTL: 30m0s
+            forwardAccessToken: true
+            hmacSecret: '[redacted]'
+            logoutPath: /bar/logout
+            name: securitypolicy/envoy-gateway/policy-for-gateway
+            provider:
+              authorizationEndpoint: https://oauth.foo.com/oauth2/v2/auth
+              destination:
+                metadata:
+                  kind: SecurityPolicy
+                  name: policy-for-gateway
+                  namespace: envoy-gateway
+                name: securitypolicy/envoy-gateway/policy-for-gateway/oidc/0
+                settings:
+                - addressType: IP
+                  endpoints:
+                  - host: 8.8.8.8
+                    port: 9000
+                  metadata:
+                    kind: ServiceImport
+                    name: grpc-backend
+                    namespace: envoy-gateway
+                    sectionName: "9000"
+                  name: securitypolicy/envoy-gateway/policy-for-gateway/oidc/0/backend/0
+                  protocol: HTTPS
+                  tls:
+                    alpnProtocols: null
+                    caCertificate:
+                      certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURKekNDQWcrZ0F3SUJBZ0lVQWw2VUtJdUttenRlODFjbGx6NVBmZE4ySWxJd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0l6RVFNQTRHQTFVRUF3d0hiWGxqYVdWdWRERVBNQTBHQTFVRUNnd0dhM1ZpWldSaU1CNFhEVEl6TVRBdwpNakExTkRFMU4xb1hEVEkwTVRBd01UQTFOREUxTjFvd0l6RVFNQTRHQTFVRUF3d0hiWGxqYVdWdWRERVBNQTBHCkExVUVDZ3dHYTNWaVpXUmlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXdTVGMKMXlqOEhXNjJueW5rRmJYbzRWWEt2MmpDMFBNN2RQVmt5ODdGd2VaY1RLTG9XUVZQUUUycDJrTERLNk9Fc3ptTQp5eXIreHhXdHlpdmVyZW1yV3FuS2tOVFloTGZZUGhnUWtjemliN2VVYWxtRmpVYmhXZEx2SGFrYkVnQ29kbjNiCmt6NTdtSW5YMlZwaURPS2c0a3lIZml1WFdwaUJxckN4MEtOTHB4bzNERVFjRmNzUVRlVEh6aDQ3NTJHVjA0UlUKVGkvR0VXeXpJc2w0Umc3dEd0QXdtY0lQZ1VOVWZZMlEzOTBGR3FkSDRhaG4rbXcvNmFGYlczMVc2M2Q5WUpWcQppb3lPVmNhTUlwTTVCL2M3UWM4U3VoQ0kxWUdoVXlnNGNSSExFdzVWdGlraW95RTNYMDRrbmEzalFBajU0WWJSCmJwRWhjMzVhcEtMQjIxSE9VUUlEQVFBQm8xTXdVVEFkQmdOVkhRNEVGZ1FVeXZsMFZJNXZKVlN1WUZYdTdCNDgKNlBiTUVBb3dId1lEVlIwakJCZ3dGb0FVeXZsMFZJNXZKVlN1WUZYdTdCNDg2UGJNRUFvd0R3WURWUjBUQVFILwpCQVV3QXdFQi96QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFNTHhyZ0ZWTXVOUnEyd0F3Y0J0N1NuTlI1Q2Z6CjJNdlhxNUVVbXVhd0lVaTlrYVlqd2RWaURSRUdTams3SlcxN3ZsNTc2SGpEa2RmUndpNEUyOFN5ZFJJblpmNkoKaThIWmNaN2NhSDZEeFIzMzVmZ0hWekxpNU5pVGNlL09qTkJRelEyTUpYVkRkOERCbUc1ZnlhdEppT0pRNGJXRQpBN0ZsUDBSZFAzQ08zR1dFME01aVhPQjJtMXFXa0UyZXlPNFVIdndUcU5RTGRyZEFYZ0RRbGJhbTllNEJHM0dnCmQvNnRoQWtXRGJ0L1FOVCtFSkhEQ3ZoRFJLaDFSdUdIeWcrWSsvbmViVFdXckZXc2t0UnJiT29IQ1ppQ3BYSTEKM2VYRTZudDBZa2d0RHhHMjJLcW5ocEFnOWdVU3MyaGxob3h5dmt6eUYwbXU2TmhQbHdBZ25xNysvUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
+                      name: policy-btls-grpc-backend/envoy-gateway-ca
+                    sni: oauth.foo.com
+                  weight: 1
+              tokenEndpoint: https://oauth.foo.com/token
+              traffic:
+                retry:
+                  numRetries: 3
+                  perRetry:
+                    backOff:
+                      baseInterval: 1s
+                      maxInterval: 5s
+                  retryOn:
+                    triggers:
+                    - 5xx
+                    - gateway-error
+                    - reset
+            redirectPath: /bar/oauth2/callback
+            redirectURL: https://www.example.com/bar/oauth2/callback
+            refreshToken: true
+            scopes:
+            - openid
+    readyListener:
+      address: 0.0.0.0
+      ipFamily: IPv4
+      path: /ready
+      port: 19003
diff --git a/internal/infrastructure/kubernetes/proxy/resource_provider_test.go b/internal/infrastructure/kubernetes/proxy/resource_provider_test.go
index 2d9ee7b84..def8a1893 100644
--- a/internal/infrastructure/kubernetes/proxy/resource_provider_test.go
+++ b/internal/infrastructure/kubernetes/proxy/resource_provider_test.go
@@ -70,7 +70,7 @@ func (f *fakeKubernetesInfraProvider) GetEnvoyGateway() *egv1a1.EnvoyGateway {
 	return f.EnvoyGateway
 }
 
-func (f *fakeKubernetesInfraProvider) GetOwnerReferenceUID(ctx context.Context, infra *ir.Infra) (map[string]types.UID, error) {
+func (f *fakeKubernetesInfraProvider) GetOwnerReferenceUID(_ context.Context, _ *ir.Infra) (map[string]types.UID, error) {
 	if f.EnvoyGateway.GatewayNamespaceMode() {
 		return map[string]types.UID{
 			gwapiresource.KindGateway: "test-owner-reference-uid-for-gateway",
@@ -469,6 +469,26 @@ func TestDeployment(t *testing.T) {
 				},
 			},
 		},
+		{
+			caseName: "override-prometheus-annotations",
+			infra: newTestInfraWithAnnotations(map[string]string{
+				"prometheus.io/scrape": "true",
+			}),
+			deploy: &egv1a1.KubernetesDeploymentSpec{
+				Pod: &egv1a1.KubernetesPodSpec{
+					Annotations: map[string]string{
+						"prometheus.io/scrape": "false",
+					},
+				},
+			},
+			telemetry: &egv1a1.ProxyTelemetry{
+				Metrics: &egv1a1.ProxyMetrics{
+					Prometheus: &egv1a1.ProxyPrometheusProvider{
+						Disable: false,
+					},
+				},
+			},
+		},
 		{
 			caseName:    "with-concurrency",
 			infra:       newTestInfra(),
@@ -999,6 +1019,24 @@ func TestDaemonSet(t *testing.T) {
 				},
 			},
 		},
+		{
+			caseName: "override-prometheus-annotations",
+			infra:    newTestInfra(),
+			daemonset: &egv1a1.KubernetesDaemonSetSpec{
+				Pod: &egv1a1.KubernetesPodSpec{
+					Annotations: map[string]string{
+						"prometheus.io/scrape": "false",
+					},
+				},
+			},
+			telemetry: &egv1a1.ProxyTelemetry{
+				Metrics: &egv1a1.ProxyMetrics{
+					Prometheus: &egv1a1.ProxyPrometheusProvider{
+						Disable: false,
+					},
+				},
+			},
+		},
 		{
 			caseName:    "with-concurrency",
 			infra:       newTestInfra(),
@@ -1159,9 +1197,6 @@ func TestDaemonSet(t *testing.T) {
 			ds, err := r.DaemonSet()
 			require.NoError(t, err)
 
-			expected, err := loadDaemonSet(tc.caseName)
-			require.NoError(t, err)
-
 			sortEnv := func(env []corev1.EnvVar) {
 				sort.Slice(env, func(i, j int) bool {
 					return env[i].Name > env[j].Name
@@ -1177,8 +1212,12 @@ func TestDaemonSet(t *testing.T) {
 				return
 			}
 
+			expected, err := loadDaemonSet(tc.caseName)
+			require.NoError(t, err)
+
 			sortEnv(ds.Spec.Template.Spec.Containers[0].Env)
 			sortEnv(expected.Spec.Template.Spec.Containers[0].Env)
+
 			assert.Equal(t, expected, ds)
 		})
 	}
@@ -2058,8 +2097,8 @@ func TestGatewayNamespaceModeMultipleResources(t *testing.T) {
 
 func writeTestDataToFile(filename string, resources []any) error {
 	var combinedYAML []byte
-	for i, resource := range resources {
-		resourceYAML, err := yaml.Marshal(resource)
+	for i, res := range resources {
+		resourceYAML, err := yaml.Marshal(res)
 		if err != nil {
 			return err
 		}
diff --git a/internal/infrastructure/kubernetes/proxy/testdata/daemonsets/override-prometheus-annotations.yaml b/internal/infrastructure/kubernetes/proxy/testdata/daemonsets/override-prometheus-annotations.yaml
new file mode 100644
index 000000000..099d5a225
--- /dev/null
+++ b/internal/infrastructure/kubernetes/proxy/testdata/daemonsets/override-prometheus-annotations.yaml
@@ -0,0 +1,386 @@
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+  creationTimestamp: null
+  labels:
+    app.kubernetes.io/component: proxy
+    app.kubernetes.io/managed-by: envoy-gateway
+    app.kubernetes.io/name: envoy
+    gateway.envoyproxy.io/owning-gateway-name: default
+    gateway.envoyproxy.io/owning-gateway-namespace: default
+  name: envoy-default-37a8eec1
+  namespace: envoy-gateway-system
+  ownerReferences:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: GatewayClass
+    name: envoy-gateway-class
+    uid: test-owner-reference-uid-for-gatewayclass
+spec:
+  selector:
+    matchLabels:
+      app.kubernetes.io/component: proxy
+      app.kubernetes.io/managed-by: envoy-gateway
+      app.kubernetes.io/name: envoy
+      gateway.envoyproxy.io/owning-gateway-name: default
+      gateway.envoyproxy.io/owning-gateway-namespace: default
+  template:
+    metadata:
+      annotations:
+        prometheus.io/path: /stats/prometheus
+        prometheus.io/port: "19001"
+        prometheus.io/scrape: "false"
+      creationTimestamp: null
+      labels:
+        app.kubernetes.io/component: proxy
+        app.kubernetes.io/managed-by: envoy-gateway
+        app.kubernetes.io/name: envoy
+        gateway.envoyproxy.io/owning-gateway-name: default
+        gateway.envoyproxy.io/owning-gateway-namespace: default
+    spec:
+      automountServiceAccountToken: false
+      containers:
+      - args:
+        - --service-cluster default
+        - --service-node $(ENVOY_POD_NAME)
+        - |
+          --config-yaml admin:
+            access_log:
+            - name: envoy.access_loggers.file
+              typed_config:
+                "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
+                path: /dev/null
+            address:
+              socket_address:
+                address: 127.0.0.1
+                port_value: 19000
+          cluster_manager:
+            local_cluster_name: local_cluster
+          node:
+            locality:
+              zone: $(ENVOY_SERVICE_ZONE)
+          layered_runtime:
+            layers:
+            - name: global_config
+              static_layer:
+                envoy.restart_features.use_eds_cache_for_ads: true
+                re2.max_program_size.error_level: 4294967295
+                re2.max_program_size.warn_level: 1000
+          dynamic_resources:
+            ads_config:
+              api_type: DELTA_GRPC
+              transport_api_version: V3
+              grpc_services:
+              - envoy_grpc:
+                  cluster_name: xds_cluster
+              set_node_on_first_message_only: true
+            lds_config:
+              ads: {}
+              resource_api_version: V3
+            cds_config:
+              ads: {}
+              resource_api_version: V3
+          static_resources:
+            listeners:
+            - name: envoy-gateway-proxy-stats-0.0.0.0-19001
+              address:
+                socket_address:
+                  address: '0.0.0.0'
+                  port_value: 19001
+                  protocol: TCP
+              bypass_overload_manager: true
+              filter_chains:
+              - filters:
+                - name: envoy.filters.network.http_connection_manager
+                  typed_config:
+                    "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
+                    stat_prefix: eg-stats-http
+                    normalize_path: true
+                    route_config:
+                      name: local_route
+                      virtual_hosts:
+                      - name: prometheus_stats
+                        domains:
+                        - "*"
+                        routes:
+                        - match:
+                            path: /stats/prometheus
+                            headers:
+                            - name: ":method"
+                              string_match:
+                                exact: GET
+                          route:
+                            cluster: prometheus_stats
+                    http_filters:
+                    - name: envoy.filters.http.router
+                      typed_config:
+                        "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
+            clusters:
+            - name: prometheus_stats
+              connect_timeout: 0.250s
+              type: STATIC
+              lb_policy: ROUND_ROBIN
+              load_assignment:
+                cluster_name: prometheus_stats
+                endpoints:
+                - lb_endpoints:
+                  - endpoint:
+                      address:
+                        socket_address:
+                          address: 127.0.0.1
+                          port_value: 19000
+            - connect_timeout: 10s
+              lb_policy: ROUND_ROBIN
+              load_assignment:
+                cluster_name: local_cluster
+                endpoints:
+                - lb_endpoints:
+                  - endpoint:
+                      address:
+                        socket_address:
+                          address: 127.0.0.1
+                          port_value: 10080
+                    load_balancing_weight: 1
+                  load_balancing_weight: 1
+                  locality:
+                    zone: $(ENVOY_SERVICE_ZONE)
+              name: local_cluster
+              type: STATIC
+            - connect_timeout: 10s
+              load_assignment:
+                cluster_name: xds_cluster
+                endpoints:
+                - load_balancing_weight: 1
+                  lb_endpoints:
+                  - load_balancing_weight: 1
+                    endpoint:
+                      address:
+                        socket_address:
+                          address: envoy-gateway.envoy-gateway-system.svc.cluster.local
+                          port_value: 18000
+              typed_extension_protocol_options:
+                envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
+                  "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions"
+                  explicit_http_config:
+                    http2_protocol_options:
+                      connection_keepalive:
+                        interval: 30s
+                        timeout: 5s
+              name: xds_cluster
+              type: STRICT_DNS
+              transport_socket:
+                name: envoy.transport_sockets.tls
+                typed_config:
+                  "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
+                  common_tls_context:
+                    tls_params:
+                      tls_maximum_protocol_version: TLSv1_3
+                    tls_certificate_sds_secret_configs:
+                    - name: xds_certificate
+                      sds_config:
+                        path_config_source:
+                          path: /sds/xds-certificate.json
+                        resource_api_version: V3
+                    validation_context_sds_secret_config:
+                      name: xds_trusted_ca
+                      sds_config:
+                        path_config_source:
+                          path: /sds/xds-trusted-ca.json
+                        resource_api_version: V3
+          overload_manager:
+            refresh_interval: 0.25s
+            resource_monitors:
+            - name: "envoy.resource_monitors.global_downstream_max_connections"
+              typed_config:
+                "@type": type.googleapis.com/envoy.extensions.resource_monitors.downstream_connections.v3.DownstreamConnectionsConfig
+                max_active_downstream_connections: 50000
+        - --log-level warn
+        - --cpuset-threads
+        - --drain-strategy immediate
+        - --component-log-level misc:error
+        - --drain-time-s 60
+        command:
+        - envoy
+        env:
+        - name: ENVOY_POD_NAMESPACE
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.namespace
+        - name: ENVOY_POD_NAME
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.name
+        - name: ENVOY_SERVICE_ZONE
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.annotations['topology.kubernetes.io/zone']
+        image: docker.io/envoyproxy/envoy:distroless-dev
+        imagePullPolicy: IfNotPresent
+        lifecycle:
+          preStop:
+            httpGet:
+              path: /shutdown/ready
+              port: 19002
+              scheme: HTTP
+        livenessProbe:
+          failureThreshold: 3
+          httpGet:
+            path: /ready
+            port: 19003
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
+        name: envoy
+        ports:
+        - containerPort: 19001
+          name: metrics
+          protocol: TCP
+        - containerPort: 19003
+          name: readiness
+          protocol: TCP
+        readinessProbe:
+          failureThreshold: 1
+          httpGet:
+            path: /ready
+            port: 19003
+            scheme: HTTP
+          periodSeconds: 5
+          successThreshold: 1
+          timeoutSeconds: 1
+        resources:
+          requests:
+            cpu: 100m
+            memory: 512Mi
+        securityContext:
+          allowPrivilegeEscalation: false
+          capabilities:
+            drop:
+            - ALL
+          privileged: false
+          runAsGroup: 65532
+          runAsNonRoot: true
+          runAsUser: 65532
+          seccompProfile:
+            type: RuntimeDefault
+        startupProbe:
+          failureThreshold: 30
+          httpGet:
+            path: /ready
+            port: 19003
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
+        terminationMessagePath: /dev/termination-log
+        terminationMessagePolicy: File
+        volumeMounts:
+        - mountPath: /certs
+          name: certs
+          readOnly: true
+        - mountPath: /sds
+          name: sds
+      - args:
+        - envoy
+        - shutdown-manager
+        command:
+        - envoy-gateway
+        env:
+        - name: ENVOY_POD_NAMESPACE
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.namespace
+        - name: ENVOY_POD_NAME
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.name
+        - name: ENVOY_SERVICE_ZONE
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.annotations['topology.kubernetes.io/zone']
+        image: docker.io/envoyproxy/gateway-dev:latest
+        imagePullPolicy: IfNotPresent
+        lifecycle:
+          preStop:
+            exec:
+              command:
+              - envoy-gateway
+              - envoy
+              - shutdown
+        livenessProbe:
+          failureThreshold: 3
+          httpGet:
+            path: /healthz
+            port: 19002
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
+        name: shutdown-manager
+        readinessProbe:
+          failureThreshold: 3
+          httpGet:
+            path: /healthz
+            port: 19002
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
+        resources:
+          requests:
+            cpu: 10m
+            memory: 32Mi
+        securityContext:
+          allowPrivilegeEscalation: false
+          capabilities:
+            drop:
+            - ALL
+          privileged: false
+          runAsGroup: 65532
+          runAsNonRoot: true
+          runAsUser: 65532
+          seccompProfile:
+            type: RuntimeDefault
+        startupProbe:
+          failureThreshold: 30
+          httpGet:
+            path: /healthz
+            port: 19002
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
+        terminationMessagePath: /dev/termination-log
+        terminationMessagePolicy: File
+      dnsPolicy: ClusterFirst
+      restartPolicy: Always
+      schedulerName: default-scheduler
+      serviceAccountName: envoy-default-37a8eec1
+      terminationGracePeriodSeconds: 360
+      volumes:
+      - name: certs
+        secret:
+          defaultMode: 420
+          secretName: envoy
+      - configMap:
+          defaultMode: 420
+          items:
+          - key: xds-trusted-ca.json
+            path: xds-trusted-ca.json
+          - key: xds-certificate.json
+            path: xds-certificate.json
+          name: envoy-default-37a8eec1
+          optional: false
+        name: sds
+  updateStrategy:
+    type: RollingUpdate
+status:
+  currentNumberScheduled: 0
+  desiredNumberScheduled: 0
+  numberMisscheduled: 0
+  numberReady: 0
diff --git a/internal/infrastructure/kubernetes/proxy/testdata/deployments/override-prometheus-annotations.yaml b/internal/infrastructure/kubernetes/proxy/testdata/deployments/override-prometheus-annotations.yaml
new file mode 100644
index 000000000..7a7fe26c7
--- /dev/null
+++ b/internal/infrastructure/kubernetes/proxy/testdata/deployments/override-prometheus-annotations.yaml
@@ -0,0 +1,386 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  annotations:
+    prometheus.io/scrape: "true"
+  creationTimestamp: null
+  labels:
+    app.kubernetes.io/component: proxy
+    app.kubernetes.io/managed-by: envoy-gateway
+    app.kubernetes.io/name: envoy
+    gateway.envoyproxy.io/owning-gateway-name: default
+    gateway.envoyproxy.io/owning-gateway-namespace: default
+  name: envoy-default-37a8eec1
+  namespace: envoy-gateway-system
+  ownerReferences:
+  - apiVersion: gateway.networking.k8s.io/v1
+    kind: GatewayClass
+    name: envoy-gateway-class
+    uid: test-owner-reference-uid-for-gatewayclass
+spec:
+  progressDeadlineSeconds: 600
+  revisionHistoryLimit: 10
+  selector:
+    matchLabels:
+      app.kubernetes.io/component: proxy
+      app.kubernetes.io/managed-by: envoy-gateway
+      app.kubernetes.io/name: envoy
+      gateway.envoyproxy.io/owning-gateway-name: default
+      gateway.envoyproxy.io/owning-gateway-namespace: default
+  strategy:
+    type: RollingUpdate
+  template:
+    metadata:
+      annotations:
+        prometheus.io/path: /stats/prometheus
+        prometheus.io/port: "19001"
+        prometheus.io/scrape: "false"
+      creationTimestamp: null
+      labels:
+        app.kubernetes.io/component: proxy
+        app.kubernetes.io/managed-by: envoy-gateway
+        app.kubernetes.io/name: envoy
+        gateway.envoyproxy.io/owning-gateway-name: default
+        gateway.envoyproxy.io/owning-gateway-namespace: default
+    spec:
+      automountServiceAccountToken: false
+      containers:
+      - args:
+        - --service-cluster default
+        - --service-node $(ENVOY_POD_NAME)
+        - |
+          --config-yaml admin:
+            access_log:
+            - name: envoy.access_loggers.file
+              typed_config:
+                "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
+                path: /dev/null
+            address:
+              socket_address:
+                address: 127.0.0.1
+                port_value: 19000
+          cluster_manager:
+            local_cluster_name: local_cluster
+          node:
+            locality:
+              zone: $(ENVOY_SERVICE_ZONE)
+          layered_runtime:
+            layers:
+            - name: global_config
+              static_layer:
+                envoy.restart_features.use_eds_cache_for_ads: true
+                re2.max_program_size.error_level: 4294967295
+                re2.max_program_size.warn_level: 1000
+          dynamic_resources:
+            ads_config:
+              api_type: DELTA_GRPC
+              transport_api_version: V3
+              grpc_services:
+              - envoy_grpc:
+                  cluster_name: xds_cluster
+              set_node_on_first_message_only: true
+            lds_config:
+              ads: {}
+              resource_api_version: V3
+            cds_config:
+              ads: {}
+              resource_api_version: V3
+          static_resources:
+            listeners:
+            - name: envoy-gateway-proxy-stats-0.0.0.0-19001
+              address:
+                socket_address:
+                  address: '0.0.0.0'
+                  port_value: 19001
+                  protocol: TCP
+              bypass_overload_manager: true
+              filter_chains:
+              - filters:
+                - name: envoy.filters.network.http_connection_manager
+                  typed_config:
+                    "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
+                    stat_prefix: eg-stats-http
+                    normalize_path: true
+                    route_config:
+                      name: local_route
+                      virtual_hosts:
+                      - name: prometheus_stats
+                        domains:
+                        - "*"
+                        routes:
+                        - match:
+                            path: /stats/prometheus
+                            headers:
+                            - name: ":method"
+                              string_match:
+                                exact: GET
+                          route:
+                            cluster: prometheus_stats
+                    http_filters:
+                    - name: envoy.filters.http.router
+                      typed_config:
+                        "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
+            clusters:
+            - name: prometheus_stats
+              connect_timeout: 0.250s
+              type: STATIC
+              lb_policy: ROUND_ROBIN
+              load_assignment:
+                cluster_name: prometheus_stats
+                endpoints:
+                - lb_endpoints:
+                  - endpoint:
+                      address:
+                        socket_address:
+                          address: 127.0.0.1
+                          port_value: 19000
+            - connect_timeout: 10s
+              lb_policy: ROUND_ROBIN
+              load_assignment:
+                cluster_name: local_cluster
+                endpoints:
+                - lb_endpoints:
+                  - endpoint:
+                      address:
+                        socket_address:
+                          address: 127.0.0.1
+                          port_value: 10080
+                    load_balancing_weight: 1
+                  load_balancing_weight: 1
+                  locality:
+                    zone: $(ENVOY_SERVICE_ZONE)
+              name: local_cluster
+              type: STATIC
+            - connect_timeout: 10s
+              load_assignment:
+                cluster_name: xds_cluster
+                endpoints:
+                - load_balancing_weight: 1
+                  lb_endpoints:
+                  - load_balancing_weight: 1
+                    endpoint:
+                      address:
+                        socket_address:
+                          address: envoy-gateway.envoy-gateway-system.svc.cluster.local
+                          port_value: 18000
+              typed_extension_protocol_options:
+                envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
+                  "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions"
+                  explicit_http_config:
+                    http2_protocol_options:
+                      connection_keepalive:
+                        interval: 30s
+                        timeout: 5s
+              name: xds_cluster
+              type: STRICT_DNS
+              transport_socket:
+                name: envoy.transport_sockets.tls
+                typed_config:
+                  "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
+                  common_tls_context:
+                    tls_params:
+                      tls_maximum_protocol_version: TLSv1_3
+                    tls_certificate_sds_secret_configs:
+                    - name: xds_certificate
+                      sds_config:
+                        path_config_source:
+                          path: /sds/xds-certificate.json
+                        resource_api_version: V3
+                    validation_context_sds_secret_config:
+                      name: xds_trusted_ca
+                      sds_config:
+                        path_config_source:
+                          path: /sds/xds-trusted-ca.json
+                        resource_api_version: V3
+          overload_manager:
+            refresh_interval: 0.25s
+            resource_monitors:
+            - name: "envoy.resource_monitors.global_downstream_max_connections"
+              typed_config:
+                "@type": type.googleapis.com/envoy.extensions.resource_monitors.downstream_connections.v3.DownstreamConnectionsConfig
+                max_active_downstream_connections: 50000
+        - --log-level warn
+        - --cpuset-threads
+        - --drain-strategy immediate
+        - --component-log-level misc:error
+        - --drain-time-s 60
+        command:
+        - envoy
+        env:
+        - name: ENVOY_POD_NAMESPACE
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.namespace
+        - name: ENVOY_POD_NAME
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.name
+        - name: ENVOY_SERVICE_ZONE
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.annotations['topology.kubernetes.io/zone']
+        image: docker.io/envoyproxy/envoy:distroless-dev
+        imagePullPolicy: IfNotPresent
+        lifecycle:
+          preStop:
+            httpGet:
+              path: /shutdown/ready
+              port: 19002
+              scheme: HTTP
+        livenessProbe:
+          failureThreshold: 3
+          httpGet:
+            path: /ready
+            port: 19003
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
+        name: envoy
+        ports:
+        - containerPort: 19001
+          name: metrics
+          protocol: TCP
+        - containerPort: 19003
+          name: readiness
+          protocol: TCP
+        readinessProbe:
+          failureThreshold: 1
+          httpGet:
+            path: /ready
+            port: 19003
+            scheme: HTTP
+          periodSeconds: 5
+          successThreshold: 1
+          timeoutSeconds: 1
+        resources:
+          requests:
+            cpu: 100m
+            memory: 512Mi
+        securityContext:
+          allowPrivilegeEscalation: false
+          capabilities:
+            drop:
+            - ALL
+          privileged: false
+          runAsGroup: 65532
+          runAsNonRoot: true
+          runAsUser: 65532
+          seccompProfile:
+            type: RuntimeDefault
+        startupProbe:
+          failureThreshold: 30
+          httpGet:
+            path: /ready
+            port: 19003
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
+        terminationMessagePath: /dev/termination-log
+        terminationMessagePolicy: File
+        volumeMounts:
+        - mountPath: /certs
+          name: certs
+          readOnly: true
+        - mountPath: /sds
+          name: sds
+      - args:
+        - envoy
+        - shutdown-manager
+        command:
+        - envoy-gateway
+        env:
+        - name: ENVOY_POD_NAMESPACE
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.namespace
+        - name: ENVOY_POD_NAME
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.name
+        - name: ENVOY_SERVICE_ZONE
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.annotations['topology.kubernetes.io/zone']
+        image: docker.io/envoyproxy/gateway-dev:latest
+        imagePullPolicy: IfNotPresent
+        lifecycle:
+          preStop:
+            exec:
+              command:
+              - envoy-gateway
+              - envoy
+              - shutdown
+        livenessProbe:
+          failureThreshold: 3
+          httpGet:
+            path: /healthz
+            port: 19002
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
+        name: shutdown-manager
+        readinessProbe:
+          failureThreshold: 3
+          httpGet:
+            path: /healthz
+            port: 19002
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
+        resources:
+          requests:
+            cpu: 10m
+            memory: 32Mi
+        securityContext:
+          allowPrivilegeEscalation: false
+          capabilities:
+            drop:
+            - ALL
+          privileged: false
+          runAsGroup: 65532
+          runAsNonRoot: true
+          runAsUser: 65532
+          seccompProfile:
+            type: RuntimeDefault
+        startupProbe:
+          failureThreshold: 30
+          httpGet:
+            path: /healthz
+            port: 19002
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
+        terminationMessagePath: /dev/termination-log
+        terminationMessagePolicy: File
+      dnsPolicy: ClusterFirst
+      restartPolicy: Always
+      schedulerName: default-scheduler
+      serviceAccountName: envoy-default-37a8eec1
+      terminationGracePeriodSeconds: 360
+      volumes:
+      - name: certs
+        secret:
+          defaultMode: 420
+          secretName: envoy
+      - configMap:
+          defaultMode: 420
+          items:
+          - key: xds-trusted-ca.json
+            path: xds-trusted-ca.json
+          - key: xds-certificate.json
+            path: xds-certificate.json
+          name: envoy-default-37a8eec1
+          optional: false
+        name: sds
+status: {}
diff --git a/internal/message/watchutil_test.go b/internal/message/watchutil_test.go
index 6e6472d14..109c023f4 100644
--- a/internal/message/watchutil_test.go
+++ b/internal/message/watchutil_test.go
@@ -91,6 +91,39 @@ func TestHandleSubscriptionAlreadyInitialized(t *testing.T) {
 	assert.Equal(t, 1, deleteCalls)
 }
 
+func TestHandleStore(t *testing.T) {
+	var m watchable.Map[string, any]
+	message.HandleStore(message.Metadata{Runner: "demo", Message: "demo"}, "foo", "bar", &m)
+
+	endCtx, end := context.WithCancel(context.Background())
+	go func() {
+		<-endCtx.Done()
+		message.HandleStore(message.Metadata{Runner: "demo", Message: "demo"}, "baz", "qux", &m)
+		m.Delete("qux")                                                                          // no-op
+		message.HandleStore(message.Metadata{Runner: "demo", Message: "demo"}, "foo", "bar", &m) // no-op
+		m.Delete("baz")
+		time.Sleep(100 * time.Millisecond)
+		m.Close()
+	}()
+
+	var storeCalls int
+	var deleteCalls int
+	message.HandleSubscription[string, any](
+		message.Metadata{Runner: "demo", Message: "demo"},
+		m.Subscribe(context.Background()),
+		func(update message.Update[string, any], errChans chan error) {
+			end()
+			if update.Delete {
+				deleteCalls++
+			} else {
+				storeCalls++
+			}
+		},
+	)
+	assert.Equal(t, 2, storeCalls)
+	assert.Equal(t, 1, deleteCalls)
+}
+
 func TestXdsIRUpdates(t *testing.T) {
 	tests := []struct {
 		desc    string
diff --git a/internal/metrics/register_test.go b/internal/metrics/register_test.go
new file mode 100644
index 000000000..223e5e670
--- /dev/null
+++ b/internal/metrics/register_test.go
@@ -0,0 +1,35 @@
+// Copyright Envoy Gateway Authors
+// SPDX-License-Identifier: Apache-2.0
+// The full text of the Apache license is available in the LICENSE file at
+// the root of the repo.
+
+package metrics
+
+import (
+	"context"
+	"os"
+	"testing"
+
+	"github.com/stretchr/testify/require"
+
+	egv1a1 "github.com/envoyproxy/gateway/api/v1alpha1"
+	"github.com/envoyproxy/gateway/internal/envoygateway/config"
+	"github.com/envoyproxy/gateway/internal/logging"
+)
+
+func TestMetricServer(t *testing.T) {
+	cfg := &config.Server{
+		EnvoyGateway: &egv1a1.EnvoyGateway{
+			EnvoyGatewaySpec: egv1a1.EnvoyGatewaySpec{},
+		},
+		Logger: logging.NewLogger(os.Stdout, egv1a1.DefaultEnvoyGatewayLogging()),
+	}
+
+	runner := New(cfg)
+	err := runner.Start(context.Background())
+	require.NoError(t, err)
+
+	// Clean up
+	err = runner.Close()
+	require.NoError(t, err)
+}
diff --git a/internal/provider/kubernetes/store_test.go b/internal/provider/kubernetes/store_test.go
index 07289d8b1..62563c17b 100644
--- a/internal/provider/kubernetes/store_test.go
+++ b/internal/provider/kubernetes/store_test.go
@@ -11,6 +11,8 @@ import (
 	"github.com/stretchr/testify/assert"
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+
+	"github.com/envoyproxy/gateway/internal/gatewayapi/status"
 )
 
 func TestNodeDetailsAddressStore(t *testing.T) {
@@ -18,7 +20,7 @@ func TestNodeDetailsAddressStore(t *testing.T) {
 	testCases := []struct {
 		name              string
 		nodeObject        *corev1.Node
-		expectedAddresses []string
+		expectedAddresses status.NodeAddresses
 	}{
 		{
 			name: "No node addresses",
@@ -26,7 +28,7 @@ func TestNodeDetailsAddressStore(t *testing.T) {
 				ObjectMeta: metav1.ObjectMeta{Name: "node1"},
 				Status:     corev1.NodeStatus{Addresses: []corev1.NodeAddress{{}}},
 			},
-			expectedAddresses: []string{},
+			expectedAddresses: status.NodeAddresses{},
 		},
 		{
 			name: "only external address",
@@ -37,7 +39,9 @@ func TestNodeDetailsAddressStore(t *testing.T) {
 					Type:    corev1.NodeExternalIP,
 				}}},
 			},
-			expectedAddresses: []string{"1.1.1.1"},
+			expectedAddresses: status.NodeAddresses{
+				IPv4: []string{"1.1.1.1"},
+			},
 		},
 		{
 			name: "only internal address",
@@ -48,7 +52,9 @@ func TestNodeDetailsAddressStore(t *testing.T) {
 					Type:    corev1.NodeInternalIP,
 				}}},
 			},
-			expectedAddresses: []string{"1.1.1.1"},
+			expectedAddresses: status.NodeAddresses{
+				IPv4: []string{"1.1.1.1"},
+			},
 		},
 		{
 			name: "prefer external address",
@@ -65,7 +71,43 @@ func TestNodeDetailsAddressStore(t *testing.T) {
 					},
 				}},
 			},
-			expectedAddresses: []string{"1.1.1.1"},
+			expectedAddresses: status.NodeAddresses{
+				IPv4: []string{"1.1.1.1"},
+			},
+		},
+		{
+			name: "all external addresses",
+			nodeObject: &corev1.Node{
+				ObjectMeta: metav1.ObjectMeta{Name: "node1"},
+				Status: corev1.NodeStatus{Addresses: []corev1.NodeAddress{{
+					Address: "1.1.1.1",
+					Type:    corev1.NodeExternalIP,
+				}, {
+					Address: "2606:4700:4700::1111",
+					Type:    corev1.NodeExternalIP,
+				}}},
+			},
+			expectedAddresses: status.NodeAddresses{
+				IPv4: []string{"1.1.1.1"},
+				IPv6: []string{"2606:4700:4700::1111"},
+			},
+		},
+		{
+			name: "all internal addresses",
+			nodeObject: &corev1.Node{
+				ObjectMeta: metav1.ObjectMeta{Name: "node1"},
+				Status: corev1.NodeStatus{Addresses: []corev1.NodeAddress{{
+					Address: "1.1.1.1",
+					Type:    corev1.NodeInternalIP,
+				}, {
+					Address: "2606:4700:4700::1111",
+					Type:    corev1.NodeInternalIP,
+				}}},
+			},
+			expectedAddresses: status.NodeAddresses{
+				IPv4: []string{"1.1.1.1"},
+				IPv6: []string{"2606:4700:4700::1111"},
+			},
 		},
 	}
 
diff --git a/internal/provider/kubernetes/test/utils.go b/internal/provider/kubernetes/test/utils.go
index 3eac5782a..eaeaabaa8 100644
--- a/internal/provider/kubernetes/test/utils.go
+++ b/internal/provider/kubernetes/test/utils.go
@@ -395,7 +395,7 @@ func GetEndpointSlice(nsName types.NamespacedName, svcName string, isServiceImpo
 			{
 				Addresses: []string{"10.0.0.1"},
 				Conditions: discoveryv1.EndpointConditions{
-					Ready: &[]bool{true}[0],
+					Ready: ptr.To(true),
 				},
 			},
 		},
diff --git a/internal/xds/translator/cluster_test.go b/internal/xds/translator/cluster_test.go
index db2d0a489..a05363a7a 100644
--- a/internal/xds/translator/cluster_test.go
+++ b/internal/xds/translator/cluster_test.go
@@ -7,24 +7,13 @@ package translator
 
 import (
 	"testing"
-	"time"
 
 	bootstrapv3 "github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v3"
 	clusterv3 "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3"
-	corev3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
-	commonv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/common/v3"
-	least_requestv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/least_request/v3"
-	maglevv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/maglev/v3"
-	randomv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/random/v3"
-	round_robinv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/round_robin/v3"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 	"google.golang.org/protobuf/encoding/protojson"
 	"google.golang.org/protobuf/proto"
-	"google.golang.org/protobuf/types/known/anypb"
-	"google.golang.org/protobuf/types/known/durationpb"
-	"google.golang.org/protobuf/types/known/wrapperspb"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/yaml"
 
@@ -58,201 +47,6 @@ func TestBuildXdsCluster(t *testing.T) {
 	assert.True(t, proto.Equal(bootstrapXdsCluster.ConnectTimeout, dynamicXdsCluster.ConnectTimeout))
 }
 
-func TestCheckZoneAwareRouting(t *testing.T) {
-	tests := []struct {
-		name            string
-		zoneRouting     *ir.ZoneAwareRouting
-		loadBalancerCfg *ir.LoadBalancer
-	}{
-		{
-			name:        "zone-routing with default lb",
-			zoneRouting: &ir.ZoneAwareRouting{MinSize: 1},
-			loadBalancerCfg: &ir.LoadBalancer{
-				LeastRequest: &ir.LeastRequest{},
-			},
-		},
-		{
-			name:        "zone-routing with default lb and topology aware routing",
-			zoneRouting: &ir.ZoneAwareRouting{MinSize: 3},
-			loadBalancerCfg: &ir.LoadBalancer{
-				LeastRequest: &ir.LeastRequest{},
-			},
-		},
-		{
-			name:            "zone-routing with nil lb",
-			zoneRouting:     &ir.ZoneAwareRouting{MinSize: 1},
-			loadBalancerCfg: nil,
-		},
-		{
-			name:        "zone-routing with least request",
-			zoneRouting: &ir.ZoneAwareRouting{MinSize: 1},
-			loadBalancerCfg: &ir.LoadBalancer{
-				LeastRequest: &ir.LeastRequest{
-					SlowStart: &ir.SlowStart{Window: &metav1.Duration{Duration: 1 * time.Second}},
-				},
-			},
-		},
-		{
-			name:        "zone-routing with round robin",
-			zoneRouting: &ir.ZoneAwareRouting{MinSize: 1},
-			loadBalancerCfg: &ir.LoadBalancer{
-				RoundRobin: &ir.RoundRobin{
-					SlowStart: &ir.SlowStart{Window: &metav1.Duration{Duration: 1 * time.Second}},
-				},
-			},
-		},
-		{
-			name:            "zone-routing with random",
-			zoneRouting:     &ir.ZoneAwareRouting{MinSize: 1},
-			loadBalancerCfg: &ir.LoadBalancer{Random: &ir.Random{}},
-		},
-		{
-			name:        "zone-routing with maglev",
-			zoneRouting: &ir.ZoneAwareRouting{MinSize: 1},
-			loadBalancerCfg: &ir.LoadBalancer{
-				ConsistentHash: &ir.ConsistentHash{
-					TableSize: proto.Uint64(65537),
-				},
-			},
-		},
-		{
-			name:        "zone-routing with round robin",
-			zoneRouting: &ir.ZoneAwareRouting{MinSize: 1},
-			loadBalancerCfg: &ir.LoadBalancer{
-				RoundRobin: &ir.RoundRobin{
-					SlowStart: &ir.SlowStart{Window: &metav1.Duration{Duration: 1 * time.Second}},
-				},
-			},
-		},
-		{
-			name:        "zone-routing disabled",
-			zoneRouting: nil,
-			loadBalancerCfg: &ir.LoadBalancer{
-				LeastRequest: &ir.LeastRequest{},
-			},
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			bootstrapXdsCluster := getXdsClusterObjFromBootstrap(t)
-			ds := &ir.DestinationSetting{
-				Endpoints:        []*ir.DestinationEndpoint{{Host: envoyGatewayXdsServerHost, Port: bootstrap.DefaultXdsServerPort}},
-				ZoneAwareRouting: tt.zoneRouting,
-			}
-			args := &xdsClusterArgs{
-				name:         bootstrapXdsCluster.Name,
-				tSocket:      bootstrapXdsCluster.TransportSocket,
-				endpointType: EndpointTypeDNS,
-				healthCheck: &ir.HealthCheck{
-					PanicThreshold: ptr.To[uint32](66),
-				},
-				loadBalancer: tt.loadBalancerCfg,
-				settings:     []*ir.DestinationSetting{ds},
-			}
-			clusterResult, err := buildXdsCluster(args)
-			dynamicXdsCluster := clusterResult.cluster
-			require.NoError(t, err)
-
-			if tt.zoneRouting == nil {
-				require.Nil(t, dynamicXdsCluster.LoadBalancingPolicy)
-				require.Equal(t, &clusterv3.Cluster_CommonLbConfig_LocalityWeightedLbConfig_{LocalityWeightedLbConfig: &clusterv3.Cluster_CommonLbConfig_LocalityWeightedLbConfig{}}, dynamicXdsCluster.CommonLbConfig.LocalityConfigSpecifier)
-			} else {
-				require.Nil(t, dynamicXdsCluster.CommonLbConfig.LocalityConfigSpecifier)
-				expectedLoadBalancingPolicy := getExpectedClusterLbPolicies(tt.zoneRouting, dynamicXdsCluster.LbPolicy, args.loadBalancer)
-				require.Equal(t, expectedLoadBalancingPolicy.Policies[0].TypedExtensionConfig.Name, dynamicXdsCluster.LoadBalancingPolicy.Policies[0].TypedExtensionConfig.Name)
-				require.Equal(t, expectedLoadBalancingPolicy.Policies[0].GetTypedExtensionConfig().GetTypedConfig().String(), dynamicXdsCluster.LoadBalancingPolicy.Policies[0].GetTypedExtensionConfig().GetTypedConfig().String())
-			}
-		})
-	}
-}
-
-func getExpectedClusterLbPolicies(zoneRouting *ir.ZoneAwareRouting, policy clusterv3.Cluster_LbPolicy, lb *ir.LoadBalancer) *clusterv3.LoadBalancingPolicy {
-	localityLbConfig := &commonv3.LocalityLbConfig{
-		LocalityConfigSpecifier: &commonv3.LocalityLbConfig_ZoneAwareLbConfig_{
-			ZoneAwareLbConfig: &commonv3.LocalityLbConfig_ZoneAwareLbConfig{
-				MinClusterSize: wrapperspb.UInt64(1),
-				ForceLocalZone: &commonv3.LocalityLbConfig_ZoneAwareLbConfig_ForceLocalZone{
-					MinSize: wrapperspb.UInt32(uint32(zoneRouting.MinSize)),
-				},
-			},
-		},
-	}
-	leastRequest := &least_requestv3.LeastRequest{
-		LocalityLbConfig: localityLbConfig,
-	}
-	typedLeastRequest, _ := anypb.New(leastRequest)
-	loadBalancingPolicy := &clusterv3.LoadBalancingPolicy{
-		Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
-			TypedExtensionConfig: &corev3.TypedExtensionConfig{
-				Name:        "envoy.load_balancing_policies.least_request",
-				TypedConfig: typedLeastRequest,
-			},
-		}},
-	}
-
-	if lb == nil {
-		return loadBalancingPolicy
-	}
-	switch policy {
-	case clusterv3.Cluster_LEAST_REQUEST:
-		if lb.LeastRequest != nil && lb.LeastRequest.SlowStart != nil && lb.LeastRequest.SlowStart.Window != nil {
-			leastRequest.SlowStartConfig = &commonv3.SlowStartConfig{
-				SlowStartWindow: durationpb.New(lb.LeastRequest.SlowStart.Window.Duration),
-			}
-		}
-		loadBalancingPolicy.Policies[0].TypedExtensionConfig.TypedConfig, _ = anypb.New(leastRequest)
-		return loadBalancingPolicy
-	case clusterv3.Cluster_ROUND_ROBIN:
-		roundRobin := &round_robinv3.RoundRobin{
-			LocalityLbConfig: localityLbConfig,
-		}
-		if lb.RoundRobin.SlowStart != nil && lb.RoundRobin.SlowStart.Window != nil {
-			roundRobin.SlowStartConfig = &commonv3.SlowStartConfig{
-				SlowStartWindow: durationpb.New(lb.RoundRobin.SlowStart.Window.Duration),
-			}
-		}
-		typedRoundRobin, _ := anypb.New(roundRobin)
-		return &clusterv3.LoadBalancingPolicy{
-			Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
-				TypedExtensionConfig: &corev3.TypedExtensionConfig{
-					Name:        "envoy.load_balancing_policies.round_robin",
-					TypedConfig: typedRoundRobin,
-				},
-			}},
-		}
-	case clusterv3.Cluster_RANDOM:
-		random := &randomv3.Random{
-			LocalityLbConfig: localityLbConfig,
-		}
-		typeRandom, _ := anypb.New(random)
-		return &clusterv3.LoadBalancingPolicy{
-			Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
-				TypedExtensionConfig: &corev3.TypedExtensionConfig{
-					Name:        "envoy.load_balancing_policies.random",
-					TypedConfig: typeRandom,
-				},
-			}},
-		}
-	case clusterv3.Cluster_MAGLEV:
-		consistentHash := &maglevv3.Maglev{}
-		if lb.ConsistentHash.TableSize != nil {
-			consistentHash.TableSize = wrapperspb.UInt64(*lb.ConsistentHash.TableSize)
-		}
-		typedConsistentHash, _ := anypb.New(consistentHash)
-
-		return &clusterv3.LoadBalancingPolicy{
-			Policies: []*clusterv3.LoadBalancingPolicy_Policy{{
-				TypedExtensionConfig: &corev3.TypedExtensionConfig{
-					Name:        "envoy.load_balancing_policies.maglev",
-					TypedConfig: typedConsistentHash,
-				},
-			}},
-		}
-
-	}
-	return nil
-}
-
 func TestBuildXdsClusterLoadAssignment(t *testing.T) {
 	bootstrapXdsCluster := getXdsClusterObjFromBootstrap(t)
 	ds := &ir.DestinationSetting{
diff --git a/internal/xds/translator/extension_config_test.go b/internal/xds/translator/extension_config_test.go
new file mode 100644
index 000000000..c244f9e2c
--- /dev/null
+++ b/internal/xds/translator/extension_config_test.go
@@ -0,0 +1,142 @@
+// Copyright Envoy Gateway Authors
+// SPDX-License-Identifier: Apache-2.0
+// The full text of the Apache license is available in the LICENSE file at
+// the root of the repo.
+
+package translator
+
+import (
+	"context"
+	"testing"
+
+	clusterv3 "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3"
+	listenerv3 "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3"
+	routev3 "github.com/envoyproxy/go-control-plane/envoy/config/route/v3"
+	tlsv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/transport_sockets/tls/v3"
+	resourceTypes "github.com/envoyproxy/go-control-plane/pkg/cache/types"
+	resourcev3 "github.com/envoyproxy/go-control-plane/pkg/resource/v3"
+	"github.com/stretchr/testify/require"
+	"k8s.io/utils/ptr"
+
+	egv1a1 "github.com/envoyproxy/gateway/api/v1alpha1"
+	"github.com/envoyproxy/gateway/internal/extension/registry"
+	"github.com/envoyproxy/gateway/internal/ir"
+	"github.com/envoyproxy/gateway/internal/xds/types"
+	"github.com/envoyproxy/gateway/proto/extension"
+)
+
+// mockExtensionServer implements the extension server interface for testing
+type mockExtensionServer struct {
+	extension.UnimplementedEnvoyGatewayExtensionServer
+	receivedListeners []*listenerv3.Listener
+	receivedRoutes    []*routev3.RouteConfiguration
+}
+
+func (m *mockExtensionServer) PostTranslateModify(ctx context.Context, req *extension.PostTranslateModifyRequest) (*extension.PostTranslateModifyResponse, error) {
+	// Store what we received for verification
+	m.receivedListeners = req.Listeners
+	m.receivedRoutes = req.Routes
+
+	// Return the same resources
+	return &extension.PostTranslateModifyResponse{
+		Clusters:  req.Clusters,
+		Secrets:   req.Secrets,
+		Listeners: req.Listeners,
+		Routes:    req.Routes,
+	}, nil
+}
+
+func TestProcessExtensionPostTranslationHookConfig(t *testing.T) {
+	tests := []struct {
+		name                     string
+		enableListenersAndRoutes *bool
+		expectListenersAndRoutes bool
+	}{
+		{
+			name:                     "default behavior (disabled for backward compatibility)",
+			enableListenersAndRoutes: nil,
+			expectListenersAndRoutes: false,
+		},
+		{
+			name:                     "explicitly enabled",
+			enableListenersAndRoutes: ptr.To(true),
+			expectListenersAndRoutes: true,
+		},
+		{
+			name:                     "explicitly disabled",
+			enableListenersAndRoutes: ptr.To(false),
+			expectListenersAndRoutes: false,
+		},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			// Create mock extension server
+			mockServer := &mockExtensionServer{}
+
+			// Create extension manager with the test configuration
+			extManager := egv1a1.ExtensionManager{
+				Hooks: &egv1a1.ExtensionHooks{
+					XDSTranslator: &egv1a1.XDSTranslatorHooks{
+						Post: []egv1a1.XDSTranslatorHook{egv1a1.XDSTranslation},
+						Translation: &egv1a1.TranslationConfig{
+							Listener: &egv1a1.ListenerTranslationConfig{
+								IncludeAll: tt.enableListenersAndRoutes,
+							},
+							Route: &egv1a1.RouteTranslationConfig{
+								IncludeAll: tt.enableListenersAndRoutes,
+							},
+						},
+					},
+				},
+				Service: &egv1a1.ExtensionService{
+					BackendEndpoint: egv1a1.BackendEndpoint{
+						FQDN: &egv1a1.FQDNEndpoint{
+							Hostname: "test.example.com",
+							Port:     8080,
+						},
+					},
+				},
+			}
+
+			mgr, cleanup, err := registry.NewInMemoryManager(extManager, mockServer)
+			require.NoError(t, err)
+			defer cleanup()
+
+			// Create test resource table with sample resources
+			tCtx := &types.ResourceVersionTable{
+				XdsResources: map[string][]resourceTypes.Resource{
+					resourcev3.ClusterType: {
+						&clusterv3.Cluster{Name: "test-cluster"},
+					},
+					resourcev3.SecretType: {
+						&tlsv3.Secret{Name: "test-secret"},
+					},
+					resourcev3.ListenerType: {
+						&listenerv3.Listener{Name: "test-listener"},
+					},
+					resourcev3.RouteType: {
+						&routev3.RouteConfiguration{Name: "test-route"},
+					},
+				},
+			}
+
+			// Call the function under test
+			err = processExtensionPostTranslationHook(tCtx, &mgr, []*ir.UnstructuredRef{})
+			require.NoError(t, err)
+
+			// Verify the behavior based on configuration
+			if tt.expectListenersAndRoutes {
+				// Should have received listeners and routes
+				require.Len(t, mockServer.receivedListeners, 1)
+				require.Equal(t, "test-listener", mockServer.receivedListeners[0].Name)
+				require.Len(t, mockServer.receivedRoutes, 1)
+				require.Equal(t, "test-route", mockServer.receivedRoutes[0].Name)
+			} else {
+				// Should not have received listeners and routes (nil or empty)
+				require.Empty(t, mockServer.receivedListeners)
+				require.Empty(t, mockServer.receivedRoutes)
+			}
+		})
+	}
+}
diff --git a/internal/xds/translator/extensionserver_test.go b/internal/xds/translator/extensionserver_test.go
index 1a3d4112d..e266dd7a1 100644
--- a/internal/xds/translator/extensionserver_test.go
+++ b/internal/xds/translator/extensionserver_test.go
@@ -259,21 +259,25 @@ func (t *testingExtensionServer) PostHTTPListenerModify(_ context.Context, req *
 	}, nil
 }
 
-// PostTranslateModifyHook inserts and overrides some clusters/secrets
+// PostTranslateModifyHook inserts and overrides some clusters/secrets/listeners/routes
 func (t *testingExtensionServer) PostTranslateModify(_ context.Context, req *pb.PostTranslateModifyRequest) (*pb.PostTranslateModifyResponse, error) {
 	for _, cluster := range req.Clusters {
 		if cluster.Name == "custom-backend-dest" {
 			return &pb.PostTranslateModifyResponse{
-				Clusters: req.Clusters,
-				Secrets:  req.Secrets,
+				Clusters:  req.Clusters,
+				Secrets:   req.Secrets,
+				Listeners: req.Listeners,
+				Routes:    req.Routes,
 			}, nil
 		}
 		// This simulates an extension server that returns an error. It allows verifying that fail-close is working.
 		if edsConfig := cluster.GetEdsClusterConfig(); edsConfig != nil {
 			if strings.Contains(edsConfig.ServiceName, "fail-close-error") {
 				return &pb.PostTranslateModifyResponse{
-					Clusters: req.Clusters,
-					Secrets:  req.Secrets,
+					Clusters:  req.Clusters,
+					Secrets:   req.Secrets,
+					Listeners: req.Listeners,
+					Routes:    req.Routes,
 				}, fmt.Errorf("cluster hook resource error: %s", edsConfig.ServiceName)
 			}
 		}
@@ -296,8 +300,10 @@ func (t *testingExtensionServer) PostTranslateModify(_ context.Context, req *pb.
 	}
 
 	response := &pb.PostTranslateModifyResponse{
-		Clusters: make([]*clusterV3.Cluster, len(req.Clusters)),
-		Secrets:  make([]*tlsV3.Secret, len(req.Secrets)),
+		Clusters:  make([]*clusterV3.Cluster, len(req.Clusters)),
+		Secrets:   make([]*tlsV3.Secret, len(req.Secrets)),
+		Listeners: make([]*listenerV3.Listener, len(req.Listeners)),
+		Routes:    make([]*routeV3.RouteConfiguration, len(req.Routes)),
 	}
 	for idx, cluster := range req.Clusters {
 		response.Clusters[idx] = proto.Clone(cluster).(*clusterV3.Cluster)
@@ -397,6 +403,61 @@ func (t *testingExtensionServer) PostTranslateModify(_ context.Context, req *pb.
 		},
 	})
 
+	// Process listeners - clone and potentially modify them
+	for idx, listener := range req.Listeners {
+		response.Listeners[idx] = proto.Clone(listener).(*listenerV3.Listener)
+		// Example: Modify listener for testing - add a stat prefix if listener name matches
+		if listener.Name == "test-listener-modify" {
+			response.Listeners[idx].StatPrefix = "extension-modified-listener"
+		}
+	}
+
+	// Process routes - clone and potentially modify them
+	for idx, route := range req.Routes {
+		response.Routes[idx] = proto.Clone(route).(*routeV3.RouteConfiguration)
+		// Example: Modify route for testing - add metadata if route name matches
+		if route.Name == "test-route-modify" {
+			if response.Routes[idx].ResponseHeadersToAdd == nil {
+				response.Routes[idx].ResponseHeadersToAdd = []*coreV3.HeaderValueOption{}
+			}
+			response.Routes[idx].ResponseHeadersToAdd = append(response.Routes[idx].ResponseHeadersToAdd,
+				&coreV3.HeaderValueOption{
+					Header: &coreV3.HeaderValue{
+						Key:   "x-extension-modified",
+						Value: "true",
+					},
+				})
+		}
+	}
+
+	// Only inject new resources for specific test cases to avoid breaking existing tests
+	for _, policy := range req.PostTranslateContext.ExtensionResources {
+		extensionResource := unstructured.Unstructured{}
+		if err := extensionResource.UnmarshalJSON(policy.UnstructuredBytes); err == nil {
+			if extensionResource.GetObjectKind().GroupVersionKind().Kind == "ExampleExtPolicy" {
+				// Example: Add a new listener for testing
+				response.Listeners = append(response.Listeners, &listenerV3.Listener{
+					Name:       "extension-injected-listener",
+					StatPrefix: "extension-injected",
+				})
+
+				// Example: Add a new route for testing
+				response.Routes = append(response.Routes, &routeV3.RouteConfiguration{
+					Name: "extension-injected-route",
+					ResponseHeadersToAdd: []*coreV3.HeaderValueOption{
+						{
+							Header: &coreV3.HeaderValue{
+								Key:   "x-extension-injected",
+								Value: "route",
+							},
+						},
+					},
+				})
+				break
+			}
+		}
+	}
+
 	return response, nil
 }
 
diff --git a/internal/xds/translator/testdata/in/extension-xds-ir/extensionpolicy-extension-server.yaml b/internal/xds/translator/testdata/in/extension-xds-ir/extensionpolicy-extension-server.yaml
index 2ad12b9f3..99385eff4 100644
--- a/internal/xds/translator/testdata/in/extension-xds-ir/extensionpolicy-extension-server.yaml
+++ b/internal/xds/translator/testdata/in/extension-xds-ir/extensionpolicy-extension-server.yaml
@@ -11,3 +11,11 @@ extensionServerPolicies:
         group: gateway.networking.k8s.io
         kind: Gateway
         name: gateway-1
+extensionManagerConfig:
+  hooks:
+    xdsTranslator:
+      translation:
+        listener:
+          includeAll: true
+        route:
+          includeAll: true
diff --git a/internal/xds/translator/testdata/in/extension-xds-ir/http-route.yaml b/internal/xds/translator/testdata/in/extension-xds-ir/http-route.yaml
index 2f6371401..4aa6680eb 100644
--- a/internal/xds/translator/testdata/in/extension-xds-ir/http-route.yaml
+++ b/internal/xds/translator/testdata/in/extension-xds-ir/http-route.yaml
@@ -24,6 +24,7 @@ http:
       name: "first-route-dest"
       settings:
       - endpoints:
-        - host: "1.2.3.4"
+        - hostname: "example.com"
+          host: "1.2.3.4"
           port: 50000
         name: "first-route-dest/backend/0"
diff --git a/internal/xds/translator/testdata/in/extension-xds-ir/post-translate-listeners-routes.yaml b/internal/xds/translator/testdata/in/extension-xds-ir/post-translate-listeners-routes.yaml
new file mode 100644
index 000000000..4bd256117
--- /dev/null
+++ b/internal/xds/translator/testdata/in/extension-xds-ir/post-translate-listeners-routes.yaml
@@ -0,0 +1,61 @@
+http:
+- name: "test-listener-modify"
+  address: "0.0.0.0"
+  port: 10080
+  hostnames:
+  - "*"
+  path:
+    mergeSlashes: true
+    escapedSlashesAction: UnescapeAndRedirect
+  routes:
+  - name: "test-route-modify"
+    hostname: "*"
+    pathMatch:
+      prefix: "/"
+    destination:
+      name: "test-route-dest"
+      settings:
+      - endpoints:
+        - host: "1.2.3.4"
+          port: 50000
+        name: "test-route-dest/backend/0"
+- name: "second-listener"
+  address: "0.0.0.0"
+  port: 10081
+  hostnames:
+  - "example.com"
+  path:
+    mergeSlashes: true
+    escapedSlashesAction: UnescapeAndRedirect
+  routes:
+  - name: "second-route"
+    hostname: "example.com"
+    pathMatch:
+      prefix: "/api"
+    destination:
+      name: "second-route-dest"
+      settings:
+      - endpoints:
+        - host: "2.3.4.5"
+          port: 8080
+        name: "second-route-dest/backend/0"
+extensionServerPolicies:
+- Object:
+    apiVersion: foo.example.io/v1alpha1
+    kind: ExampleExtPolicy
+    metadata:
+      name: test-policy
+      namespace: default
+    spec:
+      targetRef:
+        group: gateway.networking.k8s.io
+        kind: Gateway
+        name: test-gateway
+extensionManagerConfig:
+  hooks:
+    xdsTranslator:
+      translation:
+        listener:
+          includeAll: true
+        route:
+          includeAll: true
diff --git a/internal/xds/translator/testdata/in/xds-ir/client-stream-idle-timeout.yaml b/internal/xds/translator/testdata/in/xds-ir/client-stream-idle-timeout.yaml
new file mode 100644
index 000000000..a118f22bd
--- /dev/null
+++ b/internal/xds/translator/testdata/in/xds-ir/client-stream-idle-timeout.yaml
@@ -0,0 +1,40 @@
+http:
+  - name: "first-listener"
+    address: "::"
+    port: 10080
+    hostnames:
+      - "*"
+    path:
+      mergeSlashes: true
+      escapedSlashesAction: UnescapeAndRedirect
+    routes:
+      - name: "first-route"
+        hostname: "*"
+        destination:
+          name: "first-route-dest"
+          settings:
+            - endpoints:
+                - host: "1.2.3.4"
+                  port: 50000
+              name: "first-route-dest/backend/0"
+    timeout:
+      http:
+        requestReceivedTimeout: "5s"
+        idleTimeout: "10s"
+        streamIdleTimeout: "1h"
+tcp:
+  - name: "second-listener"
+    address: "::"
+    port: 10081
+    routes:
+      - name: "second-route"
+        destination:
+          name: "second-route-dest"
+          settings:
+            - endpoints:
+                - host: "1.2.3.4"
+                  port: 50000
+              name: "second-route-dest/backend/0"
+    timeout:
+      tcp:
+        idleTimeout: "1200s"
diff --git a/internal/xds/translator/testdata/in/xds-ir/retry.yaml b/internal/xds/translator/testdata/in/xds-ir/retry.yaml
index 7b15593ef..5ca639cb6 100644
--- a/internal/xds/translator/testdata/in/xds-ir/retry.yaml
+++ b/internal/xds/translator/testdata/in/xds-ir/retry.yaml
@@ -62,6 +62,7 @@ http:
         retryOn:
           triggers:
           - reset
+          - reset-before-request
           - connect-failure
     destination:
       name: "first-route-dest"
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-extension-server.listeners.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-extension-server.listeners.yaml
index fe51488c7..317afb118 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-extension-server.listeners.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-extension-server.listeners.yaml
@@ -1 +1,2 @@
-[]
+- name: extension-injected-listener
+  statPrefix: extension-injected
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-extension-server.routes.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-extension-server.routes.yaml
index fe51488c7..73992512a 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-extension-server.routes.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-extension-server.routes.yaml
@@ -1 +1,5 @@
-[]
+- name: extension-injected-route
+  responseHeadersToAdd:
+  - header:
+      key: x-extension-injected
+      value: route
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-tcp-udp-http.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-tcp-udp-http.clusters.yaml
index 4e46c1dfc..342deacae 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-tcp-udp-http.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/extensionpolicy-tcp-udp-http.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: http-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: http-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: tcp-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: udp-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: udp-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend-error.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend-error.clusters.yaml
index c40bcfbfd..e9cb88c17 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend-error.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend-error.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: custom-backend-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: custom-backend-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend-multiple-backend-error.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend-multiple-backend-error.clusters.yaml
index c40bcfbfd..e9cb88c17 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend-multiple-backend-error.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend-multiple-backend-error.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: custom-backend-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: custom-backend-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend.clusters.yaml
index 30cb39f8f..11c753ed6 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backend.clusters.yaml
@@ -5,6 +5,14 @@
   dnsLookupFamily: V4_PREFERRED
   ignoreHealthOnHostRemoval: true
   lbPolicy: CLUSTER_PROVIDED
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: custom-backend-dest
   originalDstLbConfig:
     httpHeaderName: x-gateway-destination-endpoint
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backends-mixed.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backends-mixed.clusters.yaml
index 30cb39f8f..11c753ed6 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backends-mixed.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backends-mixed.clusters.yaml
@@ -5,6 +5,14 @@
   dnsLookupFamily: V4_PREFERRED
   ignoreHealthOnHostRemoval: true
   lbPolicy: CLUSTER_PROVIDED
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: custom-backend-dest
   originalDstLbConfig:
     httpHeaderName: x-gateway-destination-endpoint
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backends-multiple-mixed.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backends-multiple-mixed.clusters.yaml
index c40bcfbfd..e9cb88c17 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backends-multiple-mixed.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-custom-backends-multiple-mixed.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: custom-backend-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: custom-backend-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-filter.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-filter.clusters.yaml
index 0dcc3b481..023d7b81a 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-filter.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-filter.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-listener-error.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-listener-error.clusters.yaml
index 0dcc3b481..023d7b81a 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-listener-error.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-listener-error.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-route-error.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-route-error.clusters.yaml
index f8f489d24..4b4234841 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-route-error.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-route-error.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: extension-post-xdsroute-hook-error-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: extension-post-xdsroute-hook-error-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-translate-error.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-translate-error.clusters.yaml
index 46fd544dc..b7e67826e 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-translate-error.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-translate-error.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: fail-close-error
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fail-close-error
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-virtualhost-error.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-virtualhost-error.clusters.yaml
index 0dcc3b481..023d7b81a 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-virtualhost-error.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route-extension-virtualhost-error.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route.clusters.yaml
index 0dcc3b481..023d7b81a 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/http-route.endpoints.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/http-route.endpoints.yaml
index 3b3f2d090..d01640140 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/http-route.endpoints.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/http-route.endpoints.yaml
@@ -6,6 +6,7 @@
           socketAddress:
             address: 1.2.3.4
             portValue: 50000
+        hostname: example.com
       loadBalancingWeight: 1
     loadBalancingWeight: 1
     locality:
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/multiple-listeners-same-port-error.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/multiple-listeners-same-port-error.clusters.yaml
index 5a3ea4c87..bc3fd7d2a 100644
--- a/internal/xds/translator/testdata/out/extension-xds-ir/multiple-listeners-same-port-error.clusters.yaml
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/multiple-listeners-same-port-error.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.clusters.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.clusters.yaml
new file mode 100644
index 000000000..eb6c60665
--- /dev/null
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.clusters.yaml
@@ -0,0 +1,71 @@
+- circuitBreakers:
+    thresholds:
+    - maxRetries: 1024
+  commonLbConfig: {}
+  connectTimeout: 10s
+  dnsLookupFamily: V4_PREFERRED
+  edsClusterConfig:
+    edsConfig:
+      ads: {}
+      resourceApiVersion: V3
+    serviceName: test-route-dest
+  ignoreHealthOnHostRemoval: true
+  lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
+  name: test-route-dest
+  perConnectionBufferLimitBytes: 32768
+  type: EDS
+- circuitBreakers:
+    thresholds:
+    - maxRetries: 1024
+  commonLbConfig: {}
+  connectTimeout: 10s
+  dnsLookupFamily: V4_PREFERRED
+  edsClusterConfig:
+    edsConfig:
+      ads: {}
+      resourceApiVersion: V3
+    serviceName: second-route-dest
+  ignoreHealthOnHostRemoval: true
+  lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
+  name: second-route-dest
+  perConnectionBufferLimitBytes: 32768
+  type: EDS
+- loadAssignment:
+    clusterName: mock-extension-injected-cluster
+    endpoints:
+    - lbEndpoints:
+      - endpoint:
+          address:
+            socketAddress:
+              address: exampleservice.examplenamespace.svc.cluster.local
+              portValue: 5000
+  name: mock-extension-injected-cluster
+  transportSocket:
+    name: envoy.transport_sockets.tls
+    typedConfig:
+      '@type': type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
+      commonTlsContext:
+        tlsCertificateSdsSecretConfigs:
+        - name: default
+          sdsConfig:
+            apiConfigSource:
+              apiType: GRPC
+              grpcServices:
+              - envoyGrpc:
+                  clusterName: sds-cluster
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.endpoints.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.endpoints.yaml
new file mode 100644
index 000000000..904075df1
--- /dev/null
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.endpoints.yaml
@@ -0,0 +1,24 @@
+- clusterName: test-route-dest
+  endpoints:
+  - lbEndpoints:
+    - endpoint:
+        address:
+          socketAddress:
+            address: 1.2.3.4
+            portValue: 50000
+      loadBalancingWeight: 1
+    loadBalancingWeight: 1
+    locality:
+      region: test-route-dest/backend/0
+- clusterName: second-route-dest
+  endpoints:
+  - lbEndpoints:
+    - endpoint:
+        address:
+          socketAddress:
+            address: 2.3.4.5
+            portValue: 8080
+      loadBalancingWeight: 1
+    loadBalancingWeight: 1
+    locality:
+      region: second-route-dest/backend/0
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.listeners.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.listeners.yaml
new file mode 100644
index 000000000..b9ec83b9e
--- /dev/null
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.listeners.yaml
@@ -0,0 +1,73 @@
+- address:
+    socketAddress:
+      address: 0.0.0.0
+      portValue: 10080
+  defaultFilterChain:
+    filters:
+    - name: envoy.filters.network.http_connection_manager
+      typedConfig:
+        '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
+        commonHttpProtocolOptions:
+          headersWithUnderscoresAction: REJECT_REQUEST
+        http2ProtocolOptions:
+          initialConnectionWindowSize: 1048576
+          initialStreamWindowSize: 65536
+          maxConcurrentStreams: 100
+        httpFilters:
+        - name: envoy.filters.http.router
+          typedConfig:
+            '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
+            suppressEnvoyHeaders: true
+        mergeSlashes: true
+        normalizePath: true
+        pathWithEscapedSlashesAction: UNESCAPE_AND_REDIRECT
+        rds:
+          configSource:
+            ads: {}
+            resourceApiVersion: V3
+          routeConfigName: test-listener-modify
+        serverHeaderTransformation: PASS_THROUGH
+        statPrefix: http-10080
+        useRemoteAddress: true
+    name: test-listener-modify
+  maxConnectionsToAcceptPerSocketEvent: 1
+  name: test-listener-modify
+  perConnectionBufferLimitBytes: 32768
+  statPrefix: extension-modified-listener
+- address:
+    socketAddress:
+      address: 0.0.0.0
+      portValue: 10081
+  defaultFilterChain:
+    filters:
+    - name: envoy.filters.network.http_connection_manager
+      typedConfig:
+        '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
+        commonHttpProtocolOptions:
+          headersWithUnderscoresAction: REJECT_REQUEST
+        http2ProtocolOptions:
+          initialConnectionWindowSize: 1048576
+          initialStreamWindowSize: 65536
+          maxConcurrentStreams: 100
+        httpFilters:
+        - name: envoy.filters.http.router
+          typedConfig:
+            '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
+            suppressEnvoyHeaders: true
+        mergeSlashes: true
+        normalizePath: true
+        pathWithEscapedSlashesAction: UNESCAPE_AND_REDIRECT
+        rds:
+          configSource:
+            ads: {}
+            resourceApiVersion: V3
+          routeConfigName: second-listener
+        serverHeaderTransformation: PASS_THROUGH
+        statPrefix: http-10081
+        useRemoteAddress: true
+    name: second-listener
+  maxConnectionsToAcceptPerSocketEvent: 1
+  name: second-listener
+  perConnectionBufferLimitBytes: 32768
+- name: extension-injected-listener
+  statPrefix: extension-injected
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.routes.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.routes.yaml
new file mode 100644
index 000000000..1461a5960
--- /dev/null
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.routes.yaml
@@ -0,0 +1,33 @@
+- ignorePortInHostMatching: true
+  name: test-listener-modify
+  virtualHosts:
+  - domains:
+    - '*'
+    name: test-listener-modify/*
+    routes:
+    - match:
+        prefix: /
+      name: test-route-modify
+      route:
+        cluster: test-route-dest
+        upgradeConfigs:
+        - upgradeType: websocket
+- ignorePortInHostMatching: true
+  name: second-listener
+  virtualHosts:
+  - domains:
+    - example.com
+    name: second-listener/example_com
+    routes:
+    - match:
+        pathSeparatedPrefix: /api
+      name: second-route
+      route:
+        cluster: second-route-dest
+        upgradeConfigs:
+        - upgradeType: websocket
+- name: extension-injected-route
+  responseHeadersToAdd:
+  - header:
+      key: x-extension-injected
+      value: route
diff --git a/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.secrets.yaml b/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.secrets.yaml
new file mode 100644
index 000000000..b04034756
--- /dev/null
+++ b/internal/xds/translator/testdata/out/extension-xds-ir/post-translate-listeners-routes.secrets.yaml
@@ -0,0 +1,4 @@
+- genericSecret:
+    secret:
+      inlineString: super-secret-extension-secret
+  name: mock-extension-injected-secret
diff --git a/internal/xds/translator/testdata/out/xds-ir/accesslog-als-tcp.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/accesslog-als-tcp.clusters.yaml
index 86fb50d1d..dfc236fe0 100755
--- a/internal/xds/translator/testdata/out/xds-ir/accesslog-als-tcp.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/accesslog-als-tcp.clusters.yaml
@@ -2,8 +2,7 @@
     thresholds:
     - maxConnections: 2048
       maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 15s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -13,6 +12,14 @@
     serviceName: accesslog/monitoring/envoy-als/port/9000
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog/monitoring/envoy-als/port/9000
   outlierDetection:
     baseEjectionTime: 30s
diff --git a/internal/xds/translator/testdata/out/xds-ir/accesslog-cel.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/accesslog-cel.clusters.yaml
index 81c121a40..a46650172 100644
--- a/internal/xds/translator/testdata/out/xds-ir/accesslog-cel.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/accesslog-cel.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: accesslog-0
@@ -37,6 +44,14 @@
       loadBalancingWeight: 1
       locality:
         region: accesslog-0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog-0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/accesslog-endpoint-stats.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/accesslog-endpoint-stats.clusters.yaml
index 37bb1cef2..2b07ab532 100644
--- a/internal/xds/translator/testdata/out/xds-ir/accesslog-endpoint-stats.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/accesslog-endpoint-stats.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -20,11 +27,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: accesslog-0
@@ -39,6 +46,14 @@
       loadBalancingWeight: 1
       locality:
         region: accesslog-0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog-0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/accesslog-formatters.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/accesslog-formatters.clusters.yaml
index 81c121a40..a46650172 100644
--- a/internal/xds/translator/testdata/out/xds-ir/accesslog-formatters.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/accesslog-formatters.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: accesslog-0
@@ -37,6 +44,14 @@
       loadBalancingWeight: 1
       locality:
         region: accesslog-0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog-0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/accesslog-multi-cel.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/accesslog-multi-cel.clusters.yaml
index 81c121a40..a46650172 100644
--- a/internal/xds/translator/testdata/out/xds-ir/accesslog-multi-cel.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/accesslog-multi-cel.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: accesslog-0
@@ -37,6 +44,14 @@
       loadBalancingWeight: 1
       locality:
         region: accesslog-0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog-0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/accesslog-types.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/accesslog-types.clusters.yaml
index 088632d35..b61e148e2 100644
--- a/internal/xds/translator/testdata/out/xds-ir/accesslog-types.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/accesslog-types.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: accesslog_als_0_1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog_als_0_1
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -42,8 +56,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -53,6 +66,14 @@
     serviceName: accesslog_als_0_2
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog_als_0_2
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -66,8 +87,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -77,6 +97,14 @@
     serviceName: accesslog_als_1_1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog_als_1_1
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -90,8 +118,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -101,6 +128,14 @@
     serviceName: accesslog_als_1_2
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog_als_1_2
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -114,8 +149,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -125,6 +159,14 @@
     serviceName: accesslog_als_2_1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog_als_2_1
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -138,8 +180,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -149,6 +190,14 @@
     serviceName: accesslog_als_2_2
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog_als_2_2
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -162,11 +211,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: accesslog_otel_0_3
@@ -181,6 +230,14 @@
       loadBalancingWeight: 1
       locality:
         region: accesslog_otel_0_3/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog_otel_0_3
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -195,11 +252,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: accesslog_otel_1_3
@@ -214,6 +271,14 @@
       loadBalancingWeight: 1
       locality:
         region: accesslog_otel_1_3/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog_otel_1_3
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -228,11 +293,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: accesslog_otel_2_3
@@ -247,6 +312,14 @@
       loadBalancingWeight: 1
       locality:
         region: accesslog_otel_2_3/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog_otel_2_3
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/accesslog-with-format.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/accesslog-with-format.clusters.yaml
index 07213bc39..9a1f49a17 100644
--- a/internal/xds/translator/testdata/out/xds-ir/accesslog-with-format.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/accesslog-with-format.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: accesslog/monitoring/envoy-als/port/9000
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog/monitoring/envoy-als/port/9000
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -42,11 +56,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: accesslog-0
@@ -60,6 +74,14 @@
         loadBalancingWeight: 1
       loadBalancingWeight: 1
       locality: {}
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog-0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/accesslog.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/accesslog.clusters.yaml
index 6df53f669..c0d42c3c5 100644
--- a/internal/xds/translator/testdata/out/xds-ir/accesslog.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/accesslog.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: accesslog/monitoring/envoy-als/port/9000
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog/monitoring/envoy-als/port/9000
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -42,11 +56,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: accesslog-0
@@ -61,6 +75,14 @@
       loadBalancingWeight: 1
       locality:
         region: accesslog-0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog-0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/api-key-auth.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/api-key-auth.clusters.yaml
index c60ba5e19..f7ef9fef6 100644
--- a/internal/xds/translator/testdata/out/xds-ir/api-key-auth.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/api-key-auth.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-1/rule/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/authorization-client-cidr.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/authorization-client-cidr.clusters.yaml
index b6e0c7f99..e58334f68 100644
--- a/internal/xds/translator/testdata/out/xds-ir/authorization-client-cidr.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/authorization-client-cidr.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-3/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-3/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/authorization-http-header.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/authorization-http-header.clusters.yaml
index c24d059ee..54ba5dfc9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/authorization-http-header.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/authorization-http-header.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/authorization-jwt-claim.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/authorization-jwt-claim.clusters.yaml
index 399a448d8..994a1804f 100644
--- a/internal/xds/translator/testdata/out/xds-ir/authorization-jwt-claim.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/authorization-jwt-claim.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,17 +35,25 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: two_example_com_443
@@ -54,6 +68,14 @@
       loadBalancingWeight: 1
       locality:
         region: two_example_com_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: two_example_com_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -70,11 +92,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: one_example_com_443
@@ -89,6 +111,14 @@
       loadBalancingWeight: 1
       locality:
         region: one_example_com_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: one_example_com_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/authorization-jwt-scope.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/authorization-jwt-scope.clusters.yaml
index 399a448d8..994a1804f 100644
--- a/internal/xds/translator/testdata/out/xds-ir/authorization-jwt-scope.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/authorization-jwt-scope.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,17 +35,25 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: two_example_com_443
@@ -54,6 +68,14 @@
       loadBalancingWeight: 1
       locality:
         region: two_example_com_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: two_example_com_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -70,11 +92,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: one_example_com_443
@@ -89,6 +111,14 @@
       loadBalancingWeight: 1
       locality:
         region: one_example_com_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: one_example_com_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/authorization-multiple-principals.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/authorization-multiple-principals.clusters.yaml
index c24d059ee..54ba5dfc9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/authorization-multiple-principals.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/authorization-multiple-principals.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/backend-buffer-limit.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/backend-buffer-limit.clusters.yaml
index baa860c9f..cb4f7c174 100644
--- a/internal/xds/translator/testdata/out/xds-ir/backend-buffer-limit.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/backend-buffer-limit.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 100000000
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: tcp-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-dest
   perConnectionBufferLimitBytes: 100000000
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: udp-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: udp-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/backend-priority.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/backend-priority.clusters.yaml
index 970324b2c..6dcc407b5 100644
--- a/internal/xds/translator/testdata/out/xds-ir/backend-priority.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/backend-priority.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: envoyextensionpolicy/default/policy-for-http-route/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: envoyextensionpolicy/default/policy-for-http-route/0
   perConnectionBufferLimitBytes: 32768
   transportSocketMatches:
diff --git a/internal/xds/translator/testdata/out/xds-ir/backend-tls-skip-verify.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/backend-tls-skip-verify.clusters.yaml
index 8122060bc..540ba4fd7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/backend-tls-skip-verify.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/backend-tls-skip-verify.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   transportSocketMatches:
diff --git a/internal/xds/translator/testdata/out/xds-ir/basic-auth-username-header.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/basic-auth-username-header.clusters.yaml
index c60ba5e19..f7ef9fef6 100644
--- a/internal/xds/translator/testdata/out/xds-ir/basic-auth-username-header.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/basic-auth-username-header.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-1/rule/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/basic-auth.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/basic-auth.clusters.yaml
index c60ba5e19..f7ef9fef6 100644
--- a/internal/xds/translator/testdata/out/xds-ir/basic-auth.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/basic-auth.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-1/rule/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/btp-telemetry.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/btp-telemetry.clusters.yaml
index c24d059ee..54ba5dfc9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/btp-telemetry.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/btp-telemetry.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/circuit-breaker.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/circuit-breaker.clusters.yaml
index 0084cd8b4..d217f201e 100644
--- a/internal/xds/translator/testdata/out/xds-ir/circuit-breaker.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/circuit-breaker.clusters.yaml
@@ -6,8 +6,7 @@
       maxPendingRequests: 1
       maxRequests: 1
       maxRetries: 2
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -17,6 +16,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/client-buffer-limit.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/client-buffer-limit.clusters.yaml
index 1b8a0dcfc..00eea0711 100644
--- a/internal/xds/translator/testdata/out/xds-ir/client-buffer-limit.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/client-buffer-limit.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: tcp-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/client-ip-detection.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/client-ip-detection.clusters.yaml
index dba5fc4a3..79cefc376 100644
--- a/internal/xds/translator/testdata/out/xds-ir/client-ip-detection.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/client-ip-detection.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,6 +83,14 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.clusters.yaml
new file mode 100644
index 000000000..7e9eb8071
--- /dev/null
+++ b/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.clusters.yaml
@@ -0,0 +1,48 @@
+- circuitBreakers:
+    thresholds:
+    - maxRetries: 1024
+  commonLbConfig: {}
+  connectTimeout: 10s
+  dnsLookupFamily: V4_PREFERRED
+  edsClusterConfig:
+    edsConfig:
+      ads: {}
+      resourceApiVersion: V3
+    serviceName: first-route-dest
+  ignoreHealthOnHostRemoval: true
+  lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
+  name: first-route-dest
+  perConnectionBufferLimitBytes: 32768
+  type: EDS
+- circuitBreakers:
+    thresholds:
+    - maxRetries: 1024
+  commonLbConfig: {}
+  connectTimeout: 10s
+  dnsLookupFamily: V4_PREFERRED
+  edsClusterConfig:
+    edsConfig:
+      ads: {}
+      resourceApiVersion: V3
+    serviceName: second-route-dest
+  ignoreHealthOnHostRemoval: true
+  lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
+  name: second-route-dest
+  perConnectionBufferLimitBytes: 32768
+  type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.endpoints.yaml b/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.endpoints.yaml
new file mode 100644
index 000000000..de95bf555
--- /dev/null
+++ b/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.endpoints.yaml
@@ -0,0 +1,24 @@
+- clusterName: first-route-dest
+  endpoints:
+  - lbEndpoints:
+    - endpoint:
+        address:
+          socketAddress:
+            address: 1.2.3.4
+            portValue: 50000
+      loadBalancingWeight: 1
+    loadBalancingWeight: 1
+    locality:
+      region: first-route-dest/backend/0
+- clusterName: second-route-dest
+  endpoints:
+  - lbEndpoints:
+    - endpoint:
+        address:
+          socketAddress:
+            address: 1.2.3.4
+            portValue: 50000
+      loadBalancingWeight: 1
+    loadBalancingWeight: 1
+    locality:
+      region: second-route-dest/backend/0
diff --git a/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.listeners.yaml
new file mode 100644
index 000000000..ce18164fe
--- /dev/null
+++ b/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.listeners.yaml
@@ -0,0 +1,54 @@
+- address:
+    socketAddress:
+      address: '::'
+      portValue: 10080
+  defaultFilterChain:
+    filters:
+    - name: envoy.filters.network.http_connection_manager
+      typedConfig:
+        '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
+        commonHttpProtocolOptions:
+          headersWithUnderscoresAction: REJECT_REQUEST
+          idleTimeout: 10s
+        http2ProtocolOptions:
+          initialConnectionWindowSize: 1048576
+          initialStreamWindowSize: 65536
+          maxConcurrentStreams: 100
+        httpFilters:
+        - name: envoy.filters.http.router
+          typedConfig:
+            '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
+            suppressEnvoyHeaders: true
+        mergeSlashes: true
+        normalizePath: true
+        pathWithEscapedSlashesAction: UNESCAPE_AND_REDIRECT
+        rds:
+          configSource:
+            ads: {}
+            resourceApiVersion: V3
+          routeConfigName: first-listener
+        requestTimeout: 5s
+        serverHeaderTransformation: PASS_THROUGH
+        statPrefix: http-10080
+        streamIdleTimeout: 3600s
+        useRemoteAddress: true
+    name: first-listener
+  maxConnectionsToAcceptPerSocketEvent: 1
+  name: first-listener
+  perConnectionBufferLimitBytes: 32768
+- address:
+    socketAddress:
+      address: '::'
+      portValue: 10081
+  filterChains:
+  - filters:
+    - name: envoy.filters.network.tcp_proxy
+      typedConfig:
+        '@type': type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
+        cluster: second-route-dest
+        idleTimeout: 1200s
+        statPrefix: tcp-10081
+    name: second-route
+  maxConnectionsToAcceptPerSocketEvent: 1
+  name: second-listener
+  perConnectionBufferLimitBytes: 32768
diff --git a/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.routes.yaml b/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.routes.yaml
new file mode 100644
index 000000000..0b5b4bee7
--- /dev/null
+++ b/internal/xds/translator/testdata/out/xds-ir/client-stream-idle-timeout.routes.yaml
@@ -0,0 +1,14 @@
+- ignorePortInHostMatching: true
+  name: first-listener
+  virtualHosts:
+  - domains:
+    - '*'
+    name: first-listener/*
+    routes:
+    - match:
+        prefix: /
+      name: first-route
+      route:
+        cluster: first-route-dest
+        upgradeConfigs:
+        - upgradeType: websocket
diff --git a/internal/xds/translator/testdata/out/xds-ir/client-timeout.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/client-timeout.clusters.yaml
index ba595752d..7e9eb8071 100644
--- a/internal/xds/translator/testdata/out/xds-ir/client-timeout.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/client-timeout.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/compression.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/compression.clusters.yaml
index c24d059ee..54ba5dfc9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/compression.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/compression.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/cors-from-httpcorsfilter.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/cors-from-httpcorsfilter.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/cors-from-httpcorsfilter.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/cors-from-httpcorsfilter.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/cors.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/cors.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/cors.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/cors.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/credential-injection-backend-filter.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/credential-injection-backend-filter.clusters.yaml
index 369e102c7..f0b985628 100644
--- a/internal/xds/translator/testdata/out/xds-ir/credential-injection-backend-filter.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/credential-injection-backend-filter.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/1/backend/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/1/backend/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: httproute/default/httproute-1/rule/1/backend/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/1/backend/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/credential-injection.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/credential-injection.clusters.yaml
index c9c467430..851e32627 100644
--- a/internal/xds/translator/testdata/out/xds-ir/credential-injection.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/credential-injection.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-1/rule/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: httproute/default/httproute-1/rule/2
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/2
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/custom-filter-order.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/custom-filter-order.clusters.yaml
index 980fba29f..f2c5f7c33 100644
--- a/internal/xds/translator/testdata/out/xds-ir/custom-filter-order.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/custom-filter-order.clusters.yaml
@@ -1,11 +1,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: one_example_com_443
@@ -20,6 +20,14 @@
       loadBalancingWeight: 1
       locality:
         region: one_example_com_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: one_example_com_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -36,11 +44,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: two_example_com_80
@@ -55,6 +63,14 @@
       loadBalancingWeight: 1
       locality:
         region: two_example_com_80/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: two_example_com_80
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/custom-response.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/custom-response.clusters.yaml
index ba27dfd9d..2d4772df3 100644
--- a/internal/xds/translator/testdata/out/xds-ir/custom-response.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/custom-response.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/dns-lookup-family.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/dns-lookup-family.clusters.yaml
index 30b831b0e..b3048d368 100644
--- a/internal/xds/translator/testdata/out/xds-ir/dns-lookup-family.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/dns-lookup-family.clusters.yaml
@@ -1,11 +1,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V6_ONLY
   dnsRefreshRate: 5s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: httproute/default/httproute-1/rule/0
@@ -19,17 +19,25 @@
         loadBalancingWeight: 1
       loadBalancingWeight: 1
       locality: {}
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: STRICT_DNS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V6_ONLY
   dnsRefreshRate: 5s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: grpcroute/default/grpcroute-1/rule/0
@@ -43,6 +51,14 @@
         loadBalancingWeight: 1
       loadBalancingWeight: 1
       locality: {}
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: grpcroute/default/grpcroute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: STRICT_DNS
@@ -56,11 +72,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: securitypolicy/envoy-gateway/policy-for-gateway-1/extauth/0
@@ -74,6 +90,14 @@
         loadBalancingWeight: 1
       loadBalancingWeight: 1
       locality: {}
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/envoy-gateway/policy-for-gateway-1/extauth/0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -81,11 +105,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: ALL
   dnsRefreshRate: 5s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: envoyextensionpolicy/default/policy-for-httproute/extproc/0
@@ -99,6 +123,14 @@
         loadBalancingWeight: 1
       loadBalancingWeight: 1
       locality: {}
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: envoyextensionpolicy/default/policy-for-httproute/extproc/0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -113,11 +145,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_ONLY
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: accesslog_otel_0_1
@@ -132,6 +164,14 @@
       loadBalancingWeight: 1
       locality:
         region: accesslog-0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: accesslog_otel_0_1
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/ext-auth-backend.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ext-auth-backend.clusters.yaml
index 8c4d92eea..cc7fe609a 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ext-auth-backend.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ext-auth-backend.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-1/rule/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,17 +59,25 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend
@@ -71,6 +92,14 @@
       loadBalancingWeight: 1
       locality:
         region: securitypolicy/default/policy-for-http-route-1/default/grpc-backend/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/default/policy-for-http-route-1/default/grpc-backend
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -88,11 +117,11 @@
       maxPendingRequests: 1024
       maxRequests: 1022
       maxRetries: 1023
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: securitypolicy/default/policy-for-gateway-1/envoy-gateway/http-backend
@@ -107,6 +136,14 @@
       loadBalancingWeight: 1
       locality:
         region: securitypolicy/default/policy-for-gateway-1/envoy-gateway/http-backend/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/default/policy-for-gateway-1/envoy-gateway/http-backend
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/ext-auth-body.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ext-auth-body.clusters.yaml
index 3ff821f5e..ccbaa56f1 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ext-auth-body.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ext-auth-body.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-1/rule/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,17 +59,25 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend
@@ -71,6 +92,14 @@
       loadBalancingWeight: 1
       locality:
         region: securitypolicy/default/policy-for-http-route-1/default/grpc-backend/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/default/policy-for-http-route-1/default/grpc-backend
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -85,11 +114,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: securitypolicy/default/policy-for-gateway-1/envoy-gateway/http-backend
@@ -104,6 +133,14 @@
       loadBalancingWeight: 1
       locality:
         region: securitypolicy/default/policy-for-gateway-1/envoy-gateway/http-backend/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/default/policy-for-gateway-1/envoy-gateway/http-backend
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/ext-auth-recomputation.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ext-auth-recomputation.clusters.yaml
index 3ff821f5e..ccbaa56f1 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ext-auth-recomputation.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ext-auth-recomputation.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-1/rule/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,17 +59,25 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend
@@ -71,6 +92,14 @@
       loadBalancingWeight: 1
       locality:
         region: securitypolicy/default/policy-for-http-route-1/default/grpc-backend/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/default/policy-for-http-route-1/default/grpc-backend
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -85,11 +114,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: securitypolicy/default/policy-for-gateway-1/envoy-gateway/http-backend
@@ -104,6 +133,14 @@
       loadBalancingWeight: 1
       locality:
         region: securitypolicy/default/policy-for-gateway-1/envoy-gateway/http-backend/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/default/policy-for-gateway-1/envoy-gateway/http-backend
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/ext-auth.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ext-auth.clusters.yaml
index 4b6912319..c03282044 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ext-auth.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ext-auth.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-1/rule/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,6 +83,14 @@
     serviceName: securitypolicy/default/policy-for-http-route-1/default/grpc-backend
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/default/policy-for-http-route-1/default/grpc-backend
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -76,8 +104,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -87,6 +114,14 @@
     serviceName: securitypolicy/default/policy-for-gateway-1/envoy-gateway/http-backend
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/default/policy-for-gateway-1/envoy-gateway/http-backend
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/ext-proc-with-traffic-settings.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ext-proc-with-traffic-settings.clusters.yaml
index fc5d51a1a..e008f4717 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ext-proc-with-traffic-settings.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ext-proc-with-traffic-settings.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -36,8 +50,7 @@
     thresholds:
     - maxConnections: 2048
       maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 15s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,16 @@
       resourceApiVersion: V3
     serviceName: envoyextensionpolicy/default/policy-for-http-route/0
   ignoreHealthOnHostRemoval: true
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.round_robin
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.round_robin.v3.RoundRobin
+          localityLbConfig:
+            localityWeightedLbConfig: {}
+          slowStartConfig:
+            slowStartWindow: 5s
   name: envoyextensionpolicy/default/policy-for-http-route/0
   outlierDetection:
     baseEjectionTime: 30s
@@ -55,9 +78,6 @@
     interval: 5s
     maxEjectionPercent: 10
   perConnectionBufferLimitBytes: 20971520
-  roundRobinLbConfig:
-    slowStartConfig:
-      slowStartWindow: 5s
   transportSocket:
     name: envoy.transport_sockets.upstream_proxy_protocol
     typedConfig:
diff --git a/internal/xds/translator/testdata/out/xds-ir/ext-proc.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ext-proc.clusters.yaml
index 6e72ef509..1cedd484b 100755
--- a/internal/xds/translator/testdata/out/xds-ir/ext-proc.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ext-proc.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: httproute/default/httproute-3/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-3/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,6 +83,14 @@
     serviceName: envoyextensionpolicy/default/policy-for-route-2/0/grpc-backend-4
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: envoyextensionpolicy/default/policy-for-route-2/0/grpc-backend-4
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -76,8 +104,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -87,6 +114,14 @@
     serviceName: envoyextensionpolicy/default/policy-for-route-1/0/grpc-backend-2
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: envoyextensionpolicy/default/policy-for-route-1/0/grpc-backend-2
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -100,8 +135,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -111,6 +145,14 @@
     serviceName: envoyextensionpolicy/envoy-gateway/policy-for-gateway-2/0/grpc-backend-3
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: envoyextensionpolicy/envoy-gateway/policy-for-gateway-2/0/grpc-backend-3
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -124,8 +166,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -135,6 +176,14 @@
     serviceName: envoyextensionpolicy/envoy-gateway/policy-for-gateway-1/0/grpc-backend
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: envoyextensionpolicy/envoy-gateway/policy-for-gateway-1/0/grpc-backend
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -148,8 +197,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -159,6 +207,14 @@
     serviceName: envoyextensionpolicy/envoy-gateway/policy-for-route-3/0/grpc-backend-3
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: envoyextensionpolicy/envoy-gateway/policy-for-route-3/0/grpc-backend-3
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/fault-injection.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/fault-injection.clusters.yaml
index cc411266a..e60461edd 100644
--- a/internal/xds/translator/testdata/out/xds-ir/fault-injection.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/fault-injection.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,14 +83,21 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -80,6 +107,14 @@
     serviceName: fifth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fifth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/headers-with-disable-request-id.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/headers-with-disable-request-id.clusters.yaml
index ba595752d..7e9eb8071 100644
--- a/internal/xds/translator/testdata/out/xds-ir/headers-with-disable-request-id.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/headers-with-disable-request-id.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/headers-with-generate-request-id.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/headers-with-generate-request-id.clusters.yaml
index ba595752d..7e9eb8071 100644
--- a/internal/xds/translator/testdata/out/xds-ir/headers-with-generate-request-id.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/headers-with-generate-request-id.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/headers-with-preserve-or-generate-request-id.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/headers-with-preserve-or-generate-request-id.clusters.yaml
index ba595752d..7e9eb8071 100644
--- a/internal/xds/translator/testdata/out/xds-ir/headers-with-preserve-or-generate-request-id.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/headers-with-preserve-or-generate-request-id.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/headers-with-preserve-request-id.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/headers-with-preserve-request-id.clusters.yaml
index ba595752d..7e9eb8071 100644
--- a/internal/xds/translator/testdata/out/xds-ir/headers-with-preserve-request-id.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/headers-with-preserve-request-id.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/headers-with-underscores-action.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/headers-with-underscores-action.clusters.yaml
index dba5fc4a3..79cefc376 100755
--- a/internal/xds/translator/testdata/out/xds-ir/headers-with-underscores-action.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/headers-with-underscores-action.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,6 +83,14 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/health-check.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/health-check.clusters.yaml
index db58cac66..3c797c2ff 100644
--- a/internal/xds/translator/testdata/out/xds-ir/health-check.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/health-check.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -27,6 +26,14 @@
     unhealthyThreshold: 3
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   outlierDetection:
     baseEjectionTime: 180s
@@ -40,8 +47,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -64,6 +70,14 @@
     unhealthyThreshold: 3
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   outlierDetection:
     baseEjectionTime: 180s
@@ -77,8 +91,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -98,6 +111,14 @@
     unhealthyThreshold: 3
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   outlierDetection:
     baseEjectionTime: 160s
@@ -111,8 +132,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -132,6 +152,14 @@
     unhealthyThreshold: 3
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   outlierDetection:
     baseEjectionTime: 180s
@@ -146,8 +174,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -164,6 +191,14 @@
     unhealthyThreshold: 3
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fifth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-connect-proxy.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-connect-proxy.clusters.yaml
index c24d059ee..54ba5dfc9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-connect-proxy.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-connect-proxy.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-connect-terminate.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-connect-terminate.clusters.yaml
index c24d059ee..54ba5dfc9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-connect-terminate.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-connect-terminate.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-early-header-mutation.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-early-header-mutation.clusters.yaml
index f015e69fc..535e3061d 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-early-header-mutation.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-early-header-mutation.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -28,8 +35,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -39,6 +45,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-endpoint-stats.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-endpoint-stats.clusters.yaml
index d825e6d37..7be94a36b 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-endpoint-stats.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-endpoint-stats.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-health-check.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-health-check.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-health-check.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-health-check.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-preserve-client-protocol.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-preserve-client-protocol.clusters.yaml
index b532b46bd..e6f9ee9f8 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-preserve-client-protocol.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-preserve-client-protocol.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-req-resp-sizes-stats.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-req-resp-sizes-stats.clusters.yaml
index 5362244f7..59bf618ac 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-req-resp-sizes-stats.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-req-resp-sizes-stats.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-direct-response.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-direct-response.clusters.yaml
index df0e6b954..d04acce9f 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-direct-response.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-direct-response.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-dns-cluster.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-dns-cluster.clusters.yaml
index 07757e5fd..43e2066ac 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-dns-cluster.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-dns-cluster.clusters.yaml
@@ -1,11 +1,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: first-route-dest
@@ -26,6 +26,14 @@
       loadBalancingWeight: 1
       locality:
         region: first-route-dest/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-dynamic-resolver.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-dynamic-resolver.clusters.yaml
index 10a5acd0d..46005d6da 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-dynamic-resolver.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-dynamic-resolver.clusters.yaml
@@ -9,11 +9,17 @@
         dnsLookupFamily: V4_PREFERRED
         dnsRefreshRate: 30s
         name: httproute/default/httproute-1/rule/0
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
+  ignoreHealthOnHostRemoval: true
   lbPolicy: CLUSTER_PROVIDED
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.cluster_provided
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.cluster_provided.v3.ClusterProvided
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   transportSocket:
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-mirror.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-mirror.clusters.yaml
index ce54d3a35..9ffaee3b7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-mirror.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-mirror.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-mirrors-percentage.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-mirrors-percentage.clusters.yaml
index 5f0b3deaa..fca71d6ad 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-mirrors-percentage.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-mirrors-percentage.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: mirror-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: mirror-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-matches.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-matches.clusters.yaml
index b70cda2ec..76a64be2b 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-matches.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-matches.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,14 +83,21 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -80,14 +107,21 @@
     serviceName: fifth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fifth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -97,14 +131,21 @@
     serviceName: sixth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: sixth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -114,6 +155,14 @@
     serviceName: seventh-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: seventh-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-mirrors-percentage.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-mirrors-percentage.clusters.yaml
index 6ca132c71..6d745e7f0 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-mirrors-percentage.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-mirrors-percentage.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: mirror-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: mirror-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: mirror-route-dest1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: mirror-route-dest1
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-mirrors.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-mirrors.clusters.yaml
index 6ca132c71..6d745e7f0 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-mirrors.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-multiple-mirrors.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: mirror-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: mirror-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: mirror-route-dest1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: mirror-route-dest1
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-partial-invalid.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-partial-invalid.clusters.yaml
index 5c4d68ac9..ed73a35d8 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-partial-invalid.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-partial-invalid.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: valid-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: valid-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-redirect.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-redirect.clusters.yaml
index 241009966..321ddd138 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-redirect.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-redirect.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: redirect-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: redirect-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-regex.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-regex.clusters.yaml
index 058b9ac85..5b004af4d 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-regex.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-regex.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: regex-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: regex-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-request-headers.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-request-headers.clusters.yaml
index b43604253..e6439e1ef 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-request-headers.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-request-headers.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: request-header-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: request-header-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-response-add-headers.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-response-add-headers.clusters.yaml
index 4d2ccc10e..b3bfed997 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-response-add-headers.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-response-add-headers.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: response-header-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: response-header-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-response-add-remove-headers.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-response-add-remove-headers.clusters.yaml
index 4d2ccc10e..b3bfed997 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-response-add-remove-headers.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-response-add-remove-headers.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: response-header-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: response-header-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-response-remove-headers.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-response-remove-headers.clusters.yaml
index 4d2ccc10e..b3bfed997 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-response-remove-headers.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-response-remove-headers.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: response-header-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: response-header-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-root-path-url-prefix.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-root-path-url-prefix.clusters.yaml
index ce7e7e585..0f015847a 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-root-path-url-prefix.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-root-path-url-prefix.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: rewrite-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: rewrite-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-sufixx-with-slash-url-prefix.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-sufixx-with-slash-url-prefix.clusters.yaml
index ce7e7e585..0f015847a 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-sufixx-with-slash-url-prefix.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-sufixx-with-slash-url-prefix.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: rewrite-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: rewrite-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-fullpath.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-fullpath.clusters.yaml
index 171998c0b..24923a692 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-fullpath.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-fullpath.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: rewrite-route
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: rewrite-route
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-host.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-host.clusters.yaml
index ce7e7e585..0f015847a 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-host.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-host.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: rewrite-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: rewrite-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-prefix.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-prefix.clusters.yaml
index ce7e7e585..0f015847a 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-prefix.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-prefix.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: rewrite-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: rewrite-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-regex.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-regex.clusters.yaml
index 171998c0b..24923a692 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-regex.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-rewrite-url-regex.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: rewrite-route
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: rewrite-route
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-session-persistence.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-session-persistence.clusters.yaml
index 058b9ac85..5b004af4d 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-session-persistence.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-session-persistence.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: regex-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: regex-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-stat-name.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-stat-name.clusters.yaml
index 6d9c237e1..994879348 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-stat-name.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-stat-name.clusters.yaml
@@ -2,8 +2,7 @@
   circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -13,6 +12,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-timeout.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-timeout.clusters.yaml
index b70cda2ec..76a64be2b 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-timeout.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-timeout.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,14 +83,21 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -80,14 +107,21 @@
     serviceName: fifth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fifth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -97,14 +131,21 @@
     serviceName: sixth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: sixth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -114,6 +155,14 @@
     serviceName: seventh-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: seventh-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend-uds-ip.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend-uds-ip.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend-uds-ip.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend-uds-ip.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend-with-filters.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend-with-filters.clusters.yaml
index fdcc44c1d..f4fa08ccb 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend-with-filters.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend-with-filters.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest/backend/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest/backend/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest/backend/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest/backend/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: second-route-dest/backend/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest/backend/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-backend.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-invalid-backend.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-invalid-backend.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-invalid-backend.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-weighted-invalid-backend.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-with-clientcert.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-with-clientcert.clusters.yaml
index 8d1fa95bc..a44be9ca1 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-with-clientcert.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-with-clientcert.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/envoy-gateway/httproute-btls/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/envoy-gateway/httproute-btls/rule/0
   perConnectionBufferLimitBytes: 32768
   transportSocketMatches:
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-with-metadata.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-with-metadata.clusters.yaml
index a7db25103..3e38076a2 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-with-metadata.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-with-metadata.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   metadata:
     filterMetadata:
       envoy-gateway:
@@ -28,8 +35,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -39,6 +45,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   metadata:
     filterMetadata:
       envoy-gateway:
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-with-tls-system-truststore.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-with-tls-system-truststore.clusters.yaml
index 0ba4829c9..262b5dc0a 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-with-tls-system-truststore.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-with-tls-system-truststore.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/envoy-gateway/httproute-btls/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/envoy-gateway/httproute-btls/rule/0
   perConnectionBufferLimitBytes: 32768
   transportSocketMatches:
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-with-tlsbundle-multiple-certs.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-with-tlsbundle-multiple-certs.clusters.yaml
index 3061088f3..ade0a0307 100755
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-with-tlsbundle-multiple-certs.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-with-tlsbundle-multiple-certs.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/envoy-gateway/httproute-btls/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/envoy-gateway/httproute-btls/rule/0
   perConnectionBufferLimitBytes: 32768
   transportSocketMatches:
@@ -59,8 +66,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -70,6 +76,14 @@
     serviceName: httproute/envoy-gateway/httproute-btls-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/envoy-gateway/httproute-btls-2/rule/0
   perConnectionBufferLimitBytes: 32768
   transportSocket:
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-with-tlsbundle.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-with-tlsbundle.clusters.yaml
index 991b3dbba..2cbbec734 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-with-tlsbundle.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-with-tlsbundle.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/envoy-gateway/httproute-btls/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/envoy-gateway/httproute-btls/rule/0
   perConnectionBufferLimitBytes: 32768
   transportSocketMatches:
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-zonal-routing-weighted-clusters.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-zonal-routing-weighted-clusters.clusters.yaml
index 7494b14bc..d4c76edfb 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-zonal-routing-weighted-clusters.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-zonal-routing-weighted-clusters.clusters.yaml
@@ -28,8 +28,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -39,6 +38,14 @@
     serviceName: first-route-dest/backend/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest/backend/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-upgrade-spdy.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-upgrade-spdy.clusters.yaml
index c24d059ee..54ba5dfc9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-upgrade-spdy.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-upgrade-spdy.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-upgrade-websocket-spdy.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http-upgrade-websocket-spdy.clusters.yaml
index c24d059ee..54ba5dfc9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-upgrade-websocket-spdy.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-upgrade-websocket-spdy.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http1-preserve-case.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http1-preserve-case.clusters.yaml
index d9d1f8189..6db88ff1e 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http1-preserve-case.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http1-preserve-case.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -28,8 +35,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -39,6 +45,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http1-trailers.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http1-trailers.clusters.yaml
index 0bb16c7f4..eb727a12a 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http1-trailers.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http1-trailers.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http10.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http10.clusters.yaml
index 389a66ffb..4ea80a1fb 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http10.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http10.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http2-mixed.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http2-mixed.clusters.yaml
index d12f63b49..92313ce2e 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http2-mixed.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http2-mixed.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest/backend/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest/backend/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: first-route-dest/backend/1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest/backend/1
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http2-route.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http2-route.clusters.yaml
index 5db664bf3..ed267e200 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http2-route.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http2-route.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -27,8 +34,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -38,6 +44,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -51,8 +65,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -62,6 +75,14 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -78,8 +99,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -89,6 +109,14 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http2.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http2.clusters.yaml
index 06e9a8da5..054f90bb7 100755
--- a/internal/xds/translator/testdata/out/xds-ir/http2.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http2.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/http3.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/http3.clusters.yaml
index c24d059ee..54ba5dfc9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http3.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http3.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/jsonpatch-missing-resource.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/jsonpatch-missing-resource.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/jsonpatch-missing-resource.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/jsonpatch-missing-resource.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/jsonpatch-with-jsonpath.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/jsonpatch-with-jsonpath.clusters.yaml
index 20e66b927..2771f41ff 100644
--- a/internal/xds/translator/testdata/out/xds-ir/jsonpatch-with-jsonpath.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/jsonpatch-with-jsonpath.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/jsonpatch.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/jsonpatch.clusters.yaml
index cfa4f0598..158c212fb 100644
--- a/internal/xds/translator/testdata/out/xds-ir/jsonpatch.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/jsonpatch.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/jwt-custom-extractor.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/jwt-custom-extractor.clusters.yaml
index f38c078af..37462c99b 100644
--- a/internal/xds/translator/testdata/out/xds-ir/jwt-custom-extractor.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/jwt-custom-extractor.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: localhost_443
@@ -37,6 +44,14 @@
       loadBalancingWeight: 1
       locality:
         region: localhost_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: localhost_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/jwt-multi-route-multi-provider.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/jwt-multi-route-multi-provider.clusters.yaml
index d040fc20a..97acccc24 100644
--- a/internal/xds/translator/testdata/out/xds-ir/jwt-multi-route-multi-provider.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/jwt-multi-route-multi-provider.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-www.test.com-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-www.test.com-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,17 +35,25 @@
     serviceName: second-route-www.test.com-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-www.test.com-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: localhost_80
@@ -54,6 +68,14 @@
       loadBalancingWeight: 1
       locality:
         region: localhost_80/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: localhost_80
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -61,8 +83,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -72,6 +93,14 @@
     serviceName: "192_168_1_250_8080"
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: "192_168_1_250_8080"
   perConnectionBufferLimitBytes: 32768
   transportSocket:
diff --git a/internal/xds/translator/testdata/out/xds-ir/jwt-multi-route-single-provider.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/jwt-multi-route-single-provider.clusters.yaml
index 02eba4b6f..7fb14db5b 100644
--- a/internal/xds/translator/testdata/out/xds-ir/jwt-multi-route-single-provider.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/jwt-multi-route-single-provider.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,17 +35,25 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: localhost_443
@@ -54,6 +68,14 @@
       loadBalancingWeight: 1
       locality:
         region: localhost_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: localhost_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/jwt-optional.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/jwt-optional.clusters.yaml
index f38c078af..37462c99b 100644
--- a/internal/xds/translator/testdata/out/xds-ir/jwt-optional.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/jwt-optional.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: localhost_443
@@ -37,6 +44,14 @@
       loadBalancingWeight: 1
       locality:
         region: localhost_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: localhost_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/jwt-ratelimit.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/jwt-ratelimit.clusters.yaml
index 281cd662b..ee09f2e22 100644
--- a/internal/xds/translator/testdata/out/xds-ir/jwt-ratelimit.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/jwt-ratelimit.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,6 +83,14 @@
     serviceName: "192_168_1_250_443"
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: "192_168_1_250_443"
   perConnectionBufferLimitBytes: 32768
   transportSocket:
@@ -78,11 +106,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: ratelimit_cluster
@@ -97,6 +125,14 @@
       loadBalancingWeight: 1
       locality:
         region: ratelimit_cluster/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: ratelimit_cluster
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/jwt-single-route-single-match.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/jwt-single-route-single-match.clusters.yaml
index f38c078af..37462c99b 100644
--- a/internal/xds/translator/testdata/out/xds-ir/jwt-single-route-single-match.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/jwt-single-route-single-match.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: localhost_443
@@ -37,6 +44,14 @@
       loadBalancingWeight: 1
       locality:
         region: localhost_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: localhost_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/jwt-with-backend-tls-retry.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/jwt-with-backend-tls-retry.clusters.yaml
index edc7120e8..7a33724db 100644
--- a/internal/xds/translator/testdata/out/xds-ir/jwt-with-backend-tls-retry.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/jwt-with-backend-tls-retry.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: securitypolicy/default/policy-for-route/jwt/0
@@ -41,6 +48,14 @@
       loadBalancingWeight: 1
       locality:
         region: securitypolicy/default/policy-for-route/jwt/0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/default/policy-for-route/jwt/0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/listener-connection-limit.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/listener-connection-limit.clusters.yaml
index d4e79e5ab..cc9716d04 100644
--- a/internal/xds/translator/testdata/out/xds-ir/listener-connection-limit.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/listener-connection-limit.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: tls-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,6 +83,14 @@
     serviceName: tcp-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/listener-overlapping-tls-config.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/listener-overlapping-tls-config.clusters.yaml
index db79f67a8..f04949b66 100644
--- a/internal/xds/translator/testdata/out/xds-ir/listener-overlapping-tls-config.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/listener-overlapping-tls-config.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: httproute/envoy-gateway/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/envoy-gateway/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/listener-proxy-protocol.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/listener-proxy-protocol.clusters.yaml
index fd2f54402..3f3cd1069 100644
--- a/internal/xds/translator/testdata/out/xds-ir/listener-proxy-protocol.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/listener-proxy-protocol.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: tls-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/listener-tcp-keepalive.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/listener-tcp-keepalive.clusters.yaml
index d4e79e5ab..cc9716d04 100644
--- a/internal/xds/translator/testdata/out/xds-ir/listener-tcp-keepalive.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/listener-tcp-keepalive.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: tls-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,6 +83,14 @@
     serviceName: tcp-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/load-balancer.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/load-balancer.clusters.yaml
index 449ed38b5..5edf1ebaf 100644
--- a/internal/xds/translator/testdata/out/xds-ir/load-balancer.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/load-balancer.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -11,14 +10,21 @@
       resourceApiVersion: V3
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.round_robin
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.round_robin.v3.RoundRobin
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -28,14 +34,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: RANDOM
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.random
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.random.v3.Random
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -45,14 +58,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -62,14 +82,19 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: MAGLEV
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.maglev
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.maglev.v3.Maglev
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -79,17 +104,23 @@
     serviceName: fifth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
-  leastRequestLbConfig:
-    slowStartConfig:
-      slowStartWindow: 60s
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
+          slowStartConfig:
+            slowStartWindow: 60s
   name: fifth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -98,17 +129,23 @@
       resourceApiVersion: V3
     serviceName: sixth-route-dest
   ignoreHealthOnHostRemoval: true
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.round_robin
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.round_robin.v3.RoundRobin
+          localityLbConfig:
+            localityWeightedLbConfig: {}
+          slowStartConfig:
+            slowStartWindow: 300s
   name: sixth-route-dest
   perConnectionBufferLimitBytes: 32768
-  roundRobinLbConfig:
-    slowStartConfig:
-      slowStartWindow: 300s
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -118,14 +155,19 @@
     serviceName: seventh-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: MAGLEV
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.maglev
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.maglev.v3.Maglev
   name: seventh-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -135,16 +177,20 @@
     serviceName: eighth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: MAGLEV
-  maglevLbConfig:
-    tableSize: "524287"
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.maglev
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.maglev.v3.Maglev
+          tableSize: "524287"
   name: eighth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -154,14 +200,19 @@
     serviceName: ninth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: MAGLEV
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.maglev
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.maglev.v3.Maglev
   name: ninth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -171,6 +222,12 @@
     serviceName: tenth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: MAGLEV
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.maglev
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.maglev.v3.Maglev
   name: tenth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/local-ratelimit-distinct.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/local-ratelimit-distinct.clusters.yaml
index ba595752d..7e9eb8071 100644
--- a/internal/xds/translator/testdata/out/xds-ir/local-ratelimit-distinct.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/local-ratelimit-distinct.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/local-ratelimit.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/local-ratelimit.clusters.yaml
index 121c8aad8..c4f69acb9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/local-ratelimit.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/local-ratelimit.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/lua.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/lua.clusters.yaml
index ba27dfd9d..2d4772df3 100644
--- a/internal/xds/translator/testdata/out/xds-ir/lua.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/lua.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/max-conn-per-socket-event.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/max-conn-per-socket-event.clusters.yaml
index 114c76feb..5aa2ff1b9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/max-conn-per-socket-event.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/max-conn-per-socket-event.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: max-accept-disabled
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: max-accept-disabled
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,6 +59,14 @@
     serviceName: max-accept-default
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: max-accept-default
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/metrics-virtual-host.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/metrics-virtual-host.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/metrics-virtual-host.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/metrics-virtual-host.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/mixed-tls-jwt-authn.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/mixed-tls-jwt-authn.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/mixed-tls-jwt-authn.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/mixed-tls-jwt-authn.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/multiple-listeners-same-port-with-different-filters.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/multiple-listeners-same-port-with-different-filters.clusters.yaml
index ba71fb5f5..5ee86a11b 100755
--- a/internal/xds/translator/testdata/out/xds-ir/multiple-listeners-same-port-with-different-filters.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/multiple-listeners-same-port-with-different-filters.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: securitypolicy/default/policy-for-http-route-2/envoy-gateway/http-backend
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/default/policy-for-http-route-2/envoy-gateway/http-backend
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,17 +83,25 @@
     serviceName: httproute/default/httproute-3/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-3/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: oauth_foo_com_443
@@ -88,6 +116,14 @@
       loadBalancingWeight: 1
       locality:
         region: oauth_foo_com_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: oauth_foo_com_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/multiple-listeners-same-port.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/multiple-listeners-same-port.clusters.yaml
index cbe74c802..a9dd222a8 100644
--- a/internal/xds/translator/testdata/out/xds-ir/multiple-listeners-same-port.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/multiple-listeners-same-port.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,14 +83,21 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -80,14 +107,21 @@
     serviceName: tcp-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -97,6 +131,14 @@
     serviceName: tls-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/multiple-simple-tcp-route-same-port.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/multiple-simple-tcp-route-same-port.clusters.yaml
index f10d60e34..2c11516b9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/multiple-simple-tcp-route-same-port.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/multiple-simple-tcp-route-same-port.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: tcp-route-simple-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-simple-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: tcp-route-simple-1-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-simple-1-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: tcp-route-simple-2-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-simple-2-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,14 +83,21 @@
     serviceName: tcp-route-simple-3-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-simple-3-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -80,6 +107,14 @@
     serviceName: tcp-route-simple-4-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-simple-4-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/mutual-tls-forward-client-certificate-with-custom-data.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/mutual-tls-forward-client-certificate-with-custom-data.clusters.yaml
index cc411266a..e60461edd 100644
--- a/internal/xds/translator/testdata/out/xds-ir/mutual-tls-forward-client-certificate-with-custom-data.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/mutual-tls-forward-client-certificate-with-custom-data.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,14 +83,21 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -80,6 +107,14 @@
     serviceName: fifth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fifth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/mutual-tls-forward-client-certificate.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/mutual-tls-forward-client-certificate.clusters.yaml
index cc411266a..e60461edd 100644
--- a/internal/xds/translator/testdata/out/xds-ir/mutual-tls-forward-client-certificate.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/mutual-tls-forward-client-certificate.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,14 +83,21 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -80,6 +107,14 @@
     serviceName: fifth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fifth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/mutual-tls-required-client-certificate-disabled.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/mutual-tls-required-client-certificate-disabled.clusters.yaml
index 4521d562e..e12c8c4e4 100644
--- a/internal/xds/translator/testdata/out/xds-ir/mutual-tls-required-client-certificate-disabled.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/mutual-tls-required-client-certificate-disabled.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: tls-terminate-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-terminate-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/mutual-tls-san.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/mutual-tls-san.clusters.yaml
index 4521d562e..e12c8c4e4 100644
--- a/internal/xds/translator/testdata/out/xds-ir/mutual-tls-san.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/mutual-tls-san.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: tls-terminate-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-terminate-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/mutual-tls.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/mutual-tls.clusters.yaml
index 4521d562e..e12c8c4e4 100644
--- a/internal/xds/translator/testdata/out/xds-ir/mutual-tls.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/mutual-tls.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: tls-terminate-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-terminate-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/oidc-and-jwt-with-passthrough.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/oidc-and-jwt-with-passthrough.clusters.yaml
index 19ed98a02..cfb414870 100644
--- a/internal/xds/translator/testdata/out/xds-ir/oidc-and-jwt-with-passthrough.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/oidc-and-jwt-with-passthrough.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: oauth_foo_com_443
@@ -37,6 +44,14 @@
       loadBalancingWeight: 1
       locality:
         region: oauth_foo_com_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: oauth_foo_com_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/oidc-backend-cluster-provider.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/oidc-backend-cluster-provider.clusters.yaml
index 0649bcbf6..ed1db4844 100644
--- a/internal/xds/translator/testdata/out/xds-ir/oidc-backend-cluster-provider.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/oidc-backend-cluster-provider.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: securitypolicy/envoy-gateway/policy-for-gateway/0
@@ -41,6 +48,14 @@
       loadBalancingWeight: 1
       locality:
         region: securitypolicy/envoy-gateway/policy-for-gateway/0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: securitypolicy/envoy-gateway/policy-for-gateway/0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/oidc.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/oidc.clusters.yaml
index 4b87b1026..db5f4b036 100644
--- a/internal/xds/translator/testdata/out/xds-ir/oidc.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/oidc.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,17 +35,25 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: oauth_foo_com_443
@@ -54,6 +68,14 @@
       loadBalancingWeight: 1
       locality:
         region: oauth_foo_com_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: oauth_foo_com_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
@@ -70,11 +92,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: oauth_bar_com_443
@@ -89,6 +111,14 @@
       loadBalancingWeight: 1
       locality:
         region: oauth_bar_com_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: oauth_bar_com_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/panic-threshold.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/panic-threshold.clusters.yaml
index 6c478efff..32815467e 100644
--- a/internal/xds/translator/testdata/out/xds-ir/panic-threshold.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/panic-threshold.clusters.yaml
@@ -4,7 +4,6 @@
   commonLbConfig:
     healthyPanicThreshold:
       value: 66
-    localityWeightedLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -14,6 +13,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -23,7 +30,6 @@
   commonLbConfig:
     healthyPanicThreshold:
       value: 80
-    localityWeightedLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -33,6 +39,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -42,7 +56,6 @@
   commonLbConfig:
     healthyPanicThreshold:
       value: 20
-    localityWeightedLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -52,14 +65,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -69,6 +89,14 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -78,7 +106,6 @@
   commonLbConfig:
     healthyPanicThreshold:
       value: 80
-    localityWeightedLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -88,6 +115,14 @@
     serviceName: fifth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fifth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/path-settings.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/path-settings.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/path-settings.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/path-settings.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/proxy-protocol-upstream.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/proxy-protocol-upstream.clusters.yaml
index 2ca45156f..6c9e3d411 100644
--- a/internal/xds/translator/testdata/out/xds-ir/proxy-protocol-upstream.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/proxy-protocol-upstream.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   transportSocket:
diff --git a/internal/xds/translator/testdata/out/xds-ir/ratelimit-custom-domain.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ratelimit-custom-domain.clusters.yaml
index 64f281144..16c7ed341 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ratelimit-custom-domain.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ratelimit-custom-domain.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,17 +59,25 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: ratelimit_cluster
@@ -71,6 +92,14 @@
       loadBalancingWeight: 1
       locality:
         region: ratelimit_cluster/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: ratelimit_cluster
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/ratelimit-disable-headers.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ratelimit-disable-headers.clusters.yaml
index cc53cfb4b..1bf27126c 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ratelimit-disable-headers.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ratelimit-disable-headers.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,17 +59,25 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: ratelimit_cluster
@@ -71,6 +92,14 @@
       loadBalancingWeight: 1
       locality:
         region: ratelimit_cluster/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: ratelimit_cluster
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/ratelimit-endpoint-stats.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ratelimit-endpoint-stats.clusters.yaml
index 6fc0376cb..b0a5b9598 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ratelimit-endpoint-stats.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ratelimit-endpoint-stats.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -20,8 +27,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -31,6 +37,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -39,8 +53,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -50,6 +63,14 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -58,11 +79,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: ratelimit_cluster
@@ -77,6 +98,14 @@
       loadBalancingWeight: 1
       locality:
         region: ratelimit_cluster/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: ratelimit_cluster
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/ratelimit-global-shared.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ratelimit-global-shared.clusters.yaml
index eda9440ea..9f62846ce 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ratelimit-global-shared.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ratelimit-global-shared.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -20,8 +27,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -31,6 +37,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -39,8 +53,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -50,6 +63,14 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -58,8 +79,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -69,6 +89,14 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -77,11 +105,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: ratelimit_cluster
@@ -96,6 +124,14 @@
       loadBalancingWeight: 1
       locality:
         region: ratelimit_cluster/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: ratelimit_cluster
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/ratelimit-headers-and-cidr.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ratelimit-headers-and-cidr.clusters.yaml
index cc53cfb4b..1bf27126c 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ratelimit-headers-and-cidr.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ratelimit-headers-and-cidr.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,17 +59,25 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: ratelimit_cluster
@@ -71,6 +92,14 @@
       loadBalancingWeight: 1
       locality:
         region: ratelimit_cluster/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: ratelimit_cluster
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/ratelimit-multi-global-shared.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ratelimit-multi-global-shared.clusters.yaml
index 6fc0376cb..b0a5b9598 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ratelimit-multi-global-shared.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ratelimit-multi-global-shared.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -20,8 +27,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -31,6 +37,14 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -39,8 +53,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -50,6 +63,14 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -58,11 +79,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: ratelimit_cluster
@@ -77,6 +98,14 @@
       loadBalancingWeight: 1
       locality:
         region: ratelimit_cluster/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: ratelimit_cluster
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/ratelimit-sourceip.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ratelimit-sourceip.clusters.yaml
index c8ebe9beb..39eedb3ac 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ratelimit-sourceip.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ratelimit-sourceip.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,17 +83,25 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: ratelimit_cluster
@@ -88,6 +116,14 @@
       loadBalancingWeight: 1
       locality:
         region: ratelimit_cluster/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: ratelimit_cluster
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/ratelimit.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/ratelimit.clusters.yaml
index c8ebe9beb..39eedb3ac 100644
--- a/internal/xds/translator/testdata/out/xds-ir/ratelimit.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/ratelimit.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,14 +35,21 @@
     serviceName: second-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: second-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -46,14 +59,21 @@
     serviceName: third-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: third-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -63,17 +83,25 @@
     serviceName: fourth-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: fourth-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: ratelimit_cluster
@@ -88,6 +116,14 @@
       loadBalancingWeight: 1
       locality:
         region: ratelimit_cluster/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: ratelimit_cluster
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/request-buffer.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/request-buffer.clusters.yaml
index ba27dfd9d..2d4772df3 100644
--- a/internal/xds/translator/testdata/out/xds-ir/request-buffer.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/request-buffer.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/retry-partial-invalid.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/retry-partial-invalid.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/retry-partial-invalid.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/retry-partial-invalid.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.clusters.yaml
new file mode 100644
index 000000000..054f90bb7
--- /dev/null
+++ b/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.clusters.yaml
@@ -0,0 +1,24 @@
+- circuitBreakers:
+    thresholds:
+    - maxRetries: 1024
+  commonLbConfig: {}
+  connectTimeout: 10s
+  dnsLookupFamily: V4_PREFERRED
+  edsClusterConfig:
+    edsConfig:
+      ads: {}
+      resourceApiVersion: V3
+    serviceName: first-route-dest
+  ignoreHealthOnHostRemoval: true
+  lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
+  name: first-route-dest
+  perConnectionBufferLimitBytes: 32768
+  type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.endpoints.yaml b/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.endpoints.yaml
new file mode 100644
index 000000000..3b3f2d090
--- /dev/null
+++ b/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.endpoints.yaml
@@ -0,0 +1,12 @@
+- clusterName: first-route-dest
+  endpoints:
+  - lbEndpoints:
+    - endpoint:
+        address:
+          socketAddress:
+            address: 1.2.3.4
+            portValue: 50000
+      loadBalancingWeight: 1
+    loadBalancingWeight: 1
+    locality:
+      region: first-route-dest/backend/0
diff --git a/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.listeners.yaml
new file mode 100644
index 000000000..5dd5e46e3
--- /dev/null
+++ b/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.listeners.yaml
@@ -0,0 +1,35 @@
+- address:
+    socketAddress:
+      address: '::'
+      portValue: 10080
+  defaultFilterChain:
+    filters:
+    - name: envoy.filters.network.http_connection_manager
+      typedConfig:
+        '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
+        commonHttpProtocolOptions:
+          headersWithUnderscoresAction: REJECT_REQUEST
+        http2ProtocolOptions:
+          initialConnectionWindowSize: 1048576
+          initialStreamWindowSize: 65536
+          maxConcurrentStreams: 100
+        httpFilters:
+        - name: envoy.filters.http.router
+          typedConfig:
+            '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
+            suppressEnvoyHeaders: true
+        mergeSlashes: true
+        normalizePath: true
+        pathWithEscapedSlashesAction: UNESCAPE_AND_REDIRECT
+        rds:
+          configSource:
+            ads: {}
+            resourceApiVersion: V3
+          routeConfigName: first-listener
+        serverHeaderTransformation: PASS_THROUGH
+        statPrefix: http-10080
+        useRemoteAddress: true
+    name: first-listener
+  maxConnectionsToAcceptPerSocketEvent: 1
+  name: first-listener
+  perConnectionBufferLimitBytes: 32768
diff --git a/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.routes.yaml b/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.routes.yaml
new file mode 100644
index 000000000..1eabe7a1b
--- /dev/null
+++ b/internal/xds/translator/testdata/out/xds-ir/retry-reset-before-request.routes.yaml
@@ -0,0 +1,45 @@
+- ignorePortInHostMatching: true
+  name: first-listener
+  virtualHosts:
+  - domains:
+    - '*'
+    name: first-listener/*
+    routes:
+    - match:
+        prefix: /
+      name: reset-before-request-route
+      route:
+        cluster: first-route-dest
+        retryPolicy:
+          hostSelectionRetryMaxAttempts: "5"
+          numRetries: 3
+          perTryTimeout: 0.250s
+          retryBackOff:
+            baseInterval: 0.100s
+            maxInterval: 10s
+          retryHostPredicate:
+          - name: envoy.retry_host_predicates.previous_hosts
+            typedConfig:
+              '@type': type.googleapis.com/envoy.extensions.retry.host.previous_hosts.v3.PreviousHostsPredicate
+          retryOn: reset-before-request
+        upgradeConfigs:
+        - upgradeType: websocket
+  - domains:
+    - foo
+    name: first-listener/foo
+    routes:
+    - match:
+        prefix: /
+      name: mixed-triggers-route
+      route:
+        cluster: first-route-dest
+        retryPolicy:
+          hostSelectionRetryMaxAttempts: "5"
+          numRetries: 5
+          retryHostPredicate:
+          - name: envoy.retry_host_predicates.previous_hosts
+            typedConfig:
+              '@type': type.googleapis.com/envoy.extensions.retry.host.previous_hosts.v3.PreviousHostsPredicate
+          retryOn: reset,reset-before-request,connect-failure
+        upgradeConfigs:
+        - upgradeType: websocket
diff --git a/internal/xds/translator/testdata/out/xds-ir/retry.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/retry.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/retry.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/retry.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/retry.routes.yaml b/internal/xds/translator/testdata/out/xds-ir/retry.routes.yaml
index 456d6c203..d07883d92 100644
--- a/internal/xds/translator/testdata/out/xds-ir/retry.routes.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/retry.routes.yaml
@@ -57,7 +57,7 @@
           - name: envoy.retry_host_predicates.previous_hosts
             typedConfig:
               '@type': type.googleapis.com/envoy.extensions.retry.host.previous_hosts.v3.PreviousHostsPredicate
-          retryOn: reset,connect-failure
+          retryOn: reset,reset-before-request,connect-failure
           retryPriority:
             name: envoy.retry_priorities.previous_priorities
             typedConfig:
diff --git a/internal/xds/translator/testdata/out/xds-ir/securitypolicy-with-oidc-jwt-authz.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/securitypolicy-with-oidc-jwt-authz.clusters.yaml
index 50f739b77..3318f090e 100644
--- a/internal/xds/translator/testdata/out/xds-ir/securitypolicy-with-oidc-jwt-authz.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/securitypolicy-with-oidc-jwt-authz.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: oidc_example_com_443
@@ -37,6 +44,14 @@
       loadBalancingWeight: 1
       locality:
         region: oidc_example_com_443/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: oidc_example_com_443
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/simple-tls.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/simple-tls.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/simple-tls.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/simple-tls.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/suppress-envoy-headers.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/suppress-envoy-headers.clusters.yaml
index 06e9a8da5..054f90bb7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/suppress-envoy-headers.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/suppress-envoy-headers.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/tcp-endpoint-stats.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tcp-endpoint-stats.clusters.yaml
index 21044f773..6a637e63f 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tcp-endpoint-stats.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tcp-endpoint-stats.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: tcp-route-simple-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-simple-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
diff --git a/internal/xds/translator/testdata/out/xds-ir/tcp-listener-ipfamily.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tcp-listener-ipfamily.clusters.yaml
index 809de35dd..f0255021d 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tcp-listener-ipfamily.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tcp-listener-ipfamily.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: tcp-route-dual-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-dual-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/tcp-req-resp-sizes-stats.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tcp-req-resp-sizes-stats.clusters.yaml
index fc444f5c8..c37470a8b 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tcp-req-resp-sizes-stats.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tcp-req-resp-sizes-stats.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: tcp-route-simple-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-simple-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
diff --git a/internal/xds/translator/testdata/out/xds-ir/tcp-route-complex.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tcp-route-complex.clusters.yaml
index e0827c744..ca6f7b0ad 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tcp-route-complex.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tcp-route-complex.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: tcp-route-complex-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-complex-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/tcp-route-simple.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tcp-route-simple.clusters.yaml
index c6f3d6e60..b66d2ea80 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tcp-route-simple.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tcp-route-simple.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: tcp-route-simple-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-simple-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/tcp-route-tls-terminate.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tcp-route-tls-terminate.clusters.yaml
index 453242900..9417e0320 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tcp-route-tls-terminate.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tcp-route-tls-terminate.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: tls-terminate-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-terminate-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: tls-terminate-hostname-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-terminate-hostname-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/tcp-route-weighted-backend.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tcp-route-weighted-backend.clusters.yaml
index d449d82d3..8e9a7aed1 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tcp-route-weighted-backend.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tcp-route-weighted-backend.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: tcp-route-weighted-backend-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tcp-route-weighted-backend-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/timeout.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/timeout.clusters.yaml
index 17f4bb2b3..20237eab2 100644
--- a/internal/xds/translator/testdata/out/xds-ir/timeout.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/timeout.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 31s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/tls-route-passthrough.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tls-route-passthrough.clusters.yaml
index 08ab48239..9794eef1a 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tls-route-passthrough.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tls-route-passthrough.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: tls-passthrough-foo-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-passthrough-foo-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: tls-passthrough-bar-dest
@@ -37,6 +44,14 @@
       loadBalancingWeight: 1
       locality:
         region: tls-passthrough-bar-dest/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-passthrough-bar-dest
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/tls-with-ciphers-versions-alpn.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tls-with-ciphers-versions-alpn.clusters.yaml
index 4521d562e..e12c8c4e4 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tls-with-ciphers-versions-alpn.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tls-with-ciphers-versions-alpn.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: tls-terminate-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tls-terminate-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/tracing-datadog-uds.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tracing-datadog-uds.clusters.yaml
index 46b6091ff..d1ea7fcfa 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tracing-datadog-uds.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tracing-datadog-uds.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,6 +35,14 @@
     serviceName: tracing-0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tracing-0
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/tracing-datadog.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tracing-datadog.clusters.yaml
index 7d65a07f0..2ba36023e 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tracing-datadog.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tracing-datadog.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: tracing-0
@@ -37,6 +44,14 @@
       loadBalancingWeight: 1
       locality:
         region: tracing-0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tracing-0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/tracing-endpoint-stats.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tracing-endpoint-stats.clusters.yaml
index 69549cacd..dee628c1c 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tracing-endpoint-stats.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tracing-endpoint-stats.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
@@ -20,11 +27,11 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: tracing-0
@@ -39,6 +46,14 @@
       loadBalancingWeight: 1
       locality:
         region: tracing-0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tracing-0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/tracing-zipkin.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tracing-zipkin.clusters.yaml
index 222bb2c6c..7af17a6cb 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tracing-zipkin.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tracing-zipkin.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,17 +11,25 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: tracing-0
@@ -37,6 +44,14 @@
       loadBalancingWeight: 1
       locality:
         region: tracing-0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tracing-0
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/testdata/out/xds-ir/tracing.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/tracing.clusters.yaml
index 58b42a23c..523ecad2b 100644
--- a/internal/xds/translator/testdata/out/xds-ir/tracing.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/tracing.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: direct-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: direct-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
@@ -19,11 +26,11 @@
     thresholds:
     - maxConnections: 2048
       maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 15s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: tracing-0
@@ -38,6 +45,14 @@
       loadBalancingWeight: 1
       locality:
         region: tracing-0/backend/0
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: tracing-0
   outlierDetection:
     baseEjectionTime: 30s
diff --git a/internal/xds/translator/testdata/out/xds-ir/udp-endpoint-stats.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/udp-endpoint-stats.clusters.yaml
index 15499f284..cea7e3b77 100644
--- a/internal/xds/translator/testdata/out/xds-ir/udp-endpoint-stats.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/udp-endpoint-stats.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: udp-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: udp-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
diff --git a/internal/xds/translator/testdata/out/xds-ir/udp-req-resp-sizes-stats.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/udp-req-resp-sizes-stats.clusters.yaml
index 2dd1f5228..c5e09a5fd 100644
--- a/internal/xds/translator/testdata/out/xds-ir/udp-req-resp-sizes-stats.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/udp-req-resp-sizes-stats.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: udp-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: udp-route-dest
   perConnectionBufferLimitBytes: 32768
   trackClusterStats:
diff --git a/internal/xds/translator/testdata/out/xds-ir/udp-route-no-endpoints.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/udp-route-no-endpoints.clusters.yaml
index 62b5062e7..a08a256b8 100644
--- a/internal/xds/translator/testdata/out/xds-ir/udp-route-no-endpoints.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/udp-route-no-endpoints.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: udproute/default/udproute-1/rule/-1
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   metadata:
     filterMetadata:
       envoy-gateway:
diff --git a/internal/xds/translator/testdata/out/xds-ir/udp-route.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/udp-route.clusters.yaml
index 0a1531866..01a573e63 100644
--- a/internal/xds/translator/testdata/out/xds-ir/udp-route.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/udp-route.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: udp-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: udp-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/upstream-tcpkeepalive.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/upstream-tcpkeepalive.clusters.yaml
index 1b1ee8d57..32a3651cf 100644
--- a/internal/xds/translator/testdata/out/xds-ir/upstream-tcpkeepalive.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/upstream-tcpkeepalive.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,6 +11,14 @@
     serviceName: first-route-dest
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: first-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/wasm.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/wasm.clusters.yaml
index 013fb8834..9f2d856ee 100755
--- a/internal/xds/translator/testdata/out/xds-ir/wasm.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/wasm.clusters.yaml
@@ -1,8 +1,7 @@
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -12,14 +11,21 @@
     serviceName: httproute/default/httproute-1/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-1/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   edsClusterConfig:
@@ -29,17 +35,25 @@
     serviceName: httproute/default/httproute-2/rule/0
   ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: httproute/default/httproute-2/rule/0
   perConnectionBufferLimitBytes: 32768
   type: EDS
 - circuitBreakers:
     thresholds:
     - maxRetries: 1024
-  commonLbConfig:
-    localityWeightedLbConfig: {}
+  commonLbConfig: {}
   connectTimeout: 10s
   dnsLookupFamily: V4_PREFERRED
   dnsRefreshRate: 30s
+  ignoreHealthOnHostRemoval: true
   lbPolicy: LEAST_REQUEST
   loadAssignment:
     clusterName: wasm_cluster
@@ -54,6 +68,14 @@
       loadBalancingWeight: 1
       locality:
         region: wasm_cluster/backend/-1
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.least_request
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest
+          localityLbConfig:
+            localityWeightedLbConfig: {}
   name: wasm_cluster
   perConnectionBufferLimitBytes: 32768
   respectDnsTtl: true
diff --git a/internal/xds/translator/translator_test.go b/internal/xds/translator/translator_test.go
index 71163eabb..130fb086f 100644
--- a/internal/xds/translator/translator_test.go
+++ b/internal/xds/translator/translator_test.go
@@ -21,6 +21,7 @@ import (
 	"github.com/google/go-cmp/cmp/cmpopts"
 	"github.com/stretchr/testify/require"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/utils/ptr"
 	"sigs.k8s.io/yaml"
 
 	egv1a1 "github.com/envoyproxy/gateway/api/v1alpha1"
@@ -316,6 +317,15 @@ func TestTranslateXdsWithExtensionErrorsWhenFailOpen(t *testing.T) {
 							egv1a1.XDSCluster,
 							egv1a1.XDSTranslation,
 						},
+						// Enable listeners and routes for PostTranslateModifyHook for these tests
+						Translation: &egv1a1.TranslationConfig{
+							Listener: &egv1a1.ListenerTranslationConfig{
+								IncludeAll: ptr.To(true),
+							},
+							Route: &egv1a1.RouteTranslationConfig{
+								IncludeAll: ptr.To(true),
+							},
+						},
 					},
 				},
 			}
@@ -448,6 +458,15 @@ func TestTranslateXdsWithExtensionErrorsWhenFailClosed(t *testing.T) {
 							egv1a1.XDSHTTPListener,
 							egv1a1.XDSTranslation,
 						},
+						// Enable listeners and routes for PostTranslateModifyHook for these tests
+						Translation: &egv1a1.TranslationConfig{
+							Listener: &egv1a1.ListenerTranslationConfig{
+								IncludeAll: ptr.To(true),
+							},
+							Route: &egv1a1.RouteTranslationConfig{
+								IncludeAll: ptr.To(true),
+							},
+						},
 					},
 				},
 			}
diff --git a/site/content/en/latest/api/extension_types.md b/site/content/en/latest/api/extension_types.md
index 0b2fc9225..2c13e9ed0 100644
--- a/site/content/en/latest/api/extension_types.md
+++ b/site/content/en/latest/api/extension_types.md
@@ -357,6 +357,7 @@ _Appears in:_
 
 | Field | Type | Required | Default | Description |
 | ---   | ---  | ---      | ---     | ---         |
+| `hostname` | _string_ |  false  |  | Hostname defines a hostname endpoint. |
 | `fqdn` | _[FQDNEndpoint](#fqdnendpoint)_ |  false  |  | FQDN defines a FQDN endpoint |
 | `ip` | _[IPEndpoint](#ipendpoint)_ |  false  |  | IP defines an IP endpoint. Supports both IPv4 and IPv6 addresses. |
 | `unix` | _[UnixSocket](#unixsocket)_ |  false  |  | Unix defines the unix domain socket endpoint |
@@ -832,6 +833,20 @@ _Appears in:_
 | `http2` | _[HTTP2Settings](#http2settings)_ |  false  |  | HTTP2 provides HTTP/2 configuration for backend connections. |
 
 
+#### ClusterTranslationConfig
+
+
+
+
+
+_Appears in:_
+- [TranslationConfig](#translationconfig)
+
+| Field | Type | Required | Default | Description |
+| ---   | ---  | ---      | ---     | ---         |
+| `includeAll` | _boolean_ |  false  |  | IncludeAll defines whether all clusters should be included in the translation hook.<br />Default is true for backward compatibility. |
+
+
 #### Compression
 
 
@@ -1635,7 +1650,7 @@ _Appears in:_
 | `backendTLS` | _[BackendTLSConfig](#backendtlsconfig)_ |  false  |  | BackendTLS is the TLS configuration for the Envoy proxy to use when connecting to backends.<br />These settings are applied on backends for which TLS policies are specified. |
 | `ipFamily` | _[IPFamily](#ipfamily)_ |  false  |  | IPFamily specifies the IP family for the EnvoyProxy fleet.<br />This setting only affects the Gateway listener port and does not impact<br />other aspects of the Envoy proxy configuration.<br />If not specified, the system will operate as follows:<br />- It defaults to IPv4 only.<br />- IPv6 and dual-stack environments are not supported in this default configuration.<br />Note: To enable IPv6 or dual-stack functionality, explicit configuration is required. |
 | `preserveRouteOrder` | _boolean_ |  false  |  | PreserveRouteOrder determines if the order of matching for HTTPRoutes is determined by Gateway-API<br />specification (https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.HTTPRouteRule)<br />or preserves the order defined by users in the HTTPRoute's HTTPRouteRule list.<br />Default: False |
-| `disableLuaValidation` | _boolean_ |  false  | false | DisableLuaValidation disables the Lua script validation for Lua EnvoyExtensionPolicies |
+| `luaValidation` | _[LuaValidation](#luavalidation)_ |  false  |  | LuaValidation determines strictness of the Lua script validation for Lua EnvoyExtensionPolicies<br />Default: Strict |
 
 
 #### EnvoyProxyStatus
@@ -1683,7 +1698,7 @@ _Appears in:_
 | `http` | _[HTTPExtAuthService](#httpextauthservice)_ |  true  |  | HTTP defines the HTTP External Authorization service.<br />Either GRPCService or HTTPService must be specified,<br />and only one of them can be provided. |
 | `headersToExtAuth` | _string array_ |  false  |  | HeadersToExtAuth defines the client request headers that will be included<br />in the request to the external authorization service.<br />Note: If not specified, the default behavior for gRPC and HTTP external<br />authorization services is different due to backward compatibility reasons.<br />All headers will be included in the check request to a gRPC authorization server.<br />Only the following headers will be included in the check request to an HTTP<br />authorization server: Host, Method, Path, Content-Length, and Authorization.<br />And these headers will always be included to the check request to an HTTP<br />authorization server by default, no matter whether they are specified<br />in HeadersToExtAuth or not. |
 | `bodyToExtAuth` | _[BodyToExtAuth](#bodytoextauth)_ |  false  |  | BodyToExtAuth defines the Body to Ext Auth configuration. |
-| `failOpen` | _boolean_ |  false  | false | FailOpen is a switch used to control the behavior when a response from the External Authorization service cannot be obtained.<br />If FailOpen is set to true, the system allows the traffic to pass through.<br />Otherwise, if it is set to false or not set (defaulting to false),<br />the system blocks the traffic and returns a HTTP 5xx error, reflecting a fail-closed approach.<br />This setting determines whether to prioritize accessibility over strict security in case of authorization service failure. |
+| `failOpen` | _boolean_ |  false  | false | FailOpen is a switch used to control the behavior when a response from the External Authorization service cannot be obtained.<br />If FailOpen is set to true, the system allows the traffic to pass through.<br />Otherwise, if it is set to false or not set (defaulting to false),<br />the system blocks the traffic and returns a HTTP 5xx error, reflecting a fail-closed approach.<br />This setting determines whether to prioritize accessibility over strict security in case of authorization service failure.<br />If set to true, the External Authorization will also be bypassed if its configuration is invalid. |
 | `recomputeRoute` | _boolean_ |  false  |  | RecomputeRoute clears the route cache and recalculates the routing decision.<br />This field must be enabled if the headers added or modified by the ExtAuth are used for<br />route matching decisions. If the recomputation selects a new route, features targeting<br />the new matched route will be applied. |
 
 
@@ -1702,7 +1717,7 @@ _Appears in:_
 | `backendRefs` | _[BackendRef](#backendref) array_ |  false  |  | BackendRefs references a Kubernetes object that represents the<br />backend server to which the authorization request will be sent. |
 | `backendSettings` | _[ClusterSettings](#clustersettings)_ |  false  |  | BackendSettings holds configuration for managing the connection<br />to the backend. |
 | `messageTimeout` | _[Duration](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.Duration)_ |  false  |  | MessageTimeout is the timeout for a response to be returned from the external processor<br />Default: 200ms |
-| `failOpen` | _boolean_ |  false  |  | FailOpen defines if requests or responses that cannot be processed due to connectivity to the<br />external processor are terminated or passed-through.<br />Default: false |
+| `failOpen` | _boolean_ |  false  | false | FailOpen is a switch used to control the behavior when failing to call the external processor.<br />If FailOpen is set to true, the system bypasses the ExtProc extension and<br />allows the traffic to pass through. If it is set to false or<br />not set (defaulting to false), the system blocks the traffic and returns<br />an HTTP 5xx error.<br />If set to true, the ExtProc extension will also be bypassed if the configuration is invalid. |
 | `processingMode` | _[ExtProcProcessingMode](#extprocprocessingmode)_ |  false  |  | ProcessingMode defines how request and response body is processed<br />Default: header and body are not sent to the external processor |
 | `metadata` | _[ExtProcMetadata](#extprocmetadata)_ |  false  |  | Refer to Kubernetes API documentation for fields of `metadata`. |
 
@@ -1820,6 +1835,7 @@ _Appears in:_
 
 | Field | Type | Required | Default | Description |
 | ---   | ---  | ---      | ---     | ---         |
+| `hostname` | _string_ |  false  |  | Hostname defines a hostname endpoint. |
 | `fqdn` | _[FQDNEndpoint](#fqdnendpoint)_ |  false  |  | FQDN defines a FQDN endpoint |
 | `ip` | _[IPEndpoint](#ipendpoint)_ |  false  |  | IP defines an IP endpoint. Supports both IPv4 and IPv6 addresses. |
 | `unix` | _[UnixSocket](#unixsocket)_ |  false  |  | Unix defines the unix domain socket endpoint |
@@ -2169,6 +2185,7 @@ _Appears in:_
 | ---   | ---  | ---      | ---     | ---         |
 | `requestReceivedTimeout` | _[Duration](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.Duration)_ |  false  |  | RequestReceivedTimeout is the duration envoy waits for the complete request reception. This timer starts upon request<br />initiation and stops when either the last byte of the request is sent upstream or when the response begins. |
 | `idleTimeout` | _[Duration](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.Duration)_ |  false  |  | IdleTimeout for an HTTP connection. Idle time is defined as a period in which there are no active requests in the connection.<br />Default: 1 hour. |
+| `streamIdleTimeout` | _[Duration](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.Duration)_ |  false  |  |  The stream idle timeout defines the amount of time a stream can exist without any upstream or downstream activity.<br /> Default: 5 minutes. |
 
 
 #### HTTPCredentialInjectionFilter
@@ -3025,6 +3042,20 @@ _Appears in:_
 | `disable` | _boolean_ |  true  |  | Disable provides the option to turn off leader election, which is enabled by default. |
 
 
+#### ListenerTranslationConfig
+
+
+
+
+
+_Appears in:_
+- [TranslationConfig](#translationconfig)
+
+| Field | Type | Required | Default | Description |
+| ---   | ---  | ---      | ---     | ---         |
+| `includeAll` | _boolean_ |  false  |  | IncludeAll defines whether all listeners should be included in the translation hook.<br />Default is false. |
+
+
 #### LiteralCustomTag
 
 
@@ -3154,6 +3185,22 @@ _Appears in:_
 | `valueRef` | _[LocalObjectReference](#localobjectreference)_ |  false  |  | ValueRef has the source code specified as a local object reference.<br />Only a reference to ConfigMap is supported.<br />The value of key `lua` in the ConfigMap will be used.<br />If the key is not found, the first value in the ConfigMap will be used. |
 
 
+#### LuaValidation
+
+_Underlying type:_ _string_
+
+
+
+_Appears in:_
+- [EnvoyProxySpec](#envoyproxyspec)
+
+| Value | Description |
+| ----- | ----------- |
+| `Strict` | LuaValidationStrict is the default level and checks for issues during script execution.<br />Recommended if your scripts only use the standard Envoy Lua stream handle API.<br />For supported APIs, see: https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter#stream-handle-api<br /> | 
+| `Syntax` | LuaValidationSyntax checks for syntax errors in the Lua script.<br />Note that this is not a full runtime validation and does not check for issues during script execution.<br />This is recommended if your scripts use external libraries that are not supported by Lua runtime validation.<br /> | 
+| `Disabled` | LuaValidationDisabled disables all validations of Lua scripts.<br />Scripts will be accepted and executed without any validation checks.<br />This is not recommended unless both runtime and syntax validations are failing unexpectedly.<br /> | 
+
+
 #### LuaValueType
 
 _Underlying type:_ _string_
@@ -4350,6 +4397,20 @@ _Appears in:_
 
 
 
+#### RouteTranslationConfig
+
+
+
+
+
+_Appears in:_
+- [TranslationConfig](#translationconfig)
+
+| Field | Type | Required | Default | Description |
+| ---   | ---  | ---      | ---     | ---         |
+| `includeAll` | _boolean_ |  false  |  | IncludeAll defines whether all routes should be included in the translation hook.<br />Default is false. |
+
+
 #### RoutingType
 
 _Underlying type:_ _string_
@@ -4367,6 +4428,20 @@ _Appears in:_
 
 
 
+#### SecretTranslationConfig
+
+
+
+
+
+_Appears in:_
+- [TranslationConfig](#translationconfig)
+
+| Field | Type | Required | Default | Description |
+| ---   | ---  | ---      | ---     | ---         |
+| `includeAll` | _boolean_ |  false  |  | IncludeAll defines whether all secrets should be included in the translation hook.<br />Default is true for backward compatibility. |
+
+
 #### SecurityPolicy
 
 
@@ -4868,6 +4943,23 @@ _Appears in:_
 | `Datadog` |  | 
 
 
+#### TranslationConfig
+
+
+
+TranslationConfig defines the configuration for the translation hook.
+
+_Appears in:_
+- [XDSTranslatorHooks](#xdstranslatorhooks)
+
+| Field | Type | Required | Default | Description |
+| ---   | ---  | ---      | ---     | ---         |
+| `listener` | _[ListenerTranslationConfig](#listenertranslationconfig)_ |  false  |  | Listener defines the configuration for the listener translation hook. |
+| `route` | _[RouteTranslationConfig](#routetranslationconfig)_ |  false  |  | Route defines the configuration for the route translation hook. |
+| `cluster` | _[ClusterTranslationConfig](#clustertranslationconfig)_ |  false  |  | Cluster defines the configuration for the cluster translation hook. |
+| `secret` | _[SecretTranslationConfig](#secrettranslationconfig)_ |  false  |  | Secret defines the configuration for the secret translation hook. |
+
+
 #### TriggerEnum
 
 _Underlying type:_ _string_
@@ -4882,6 +4974,7 @@ _Appears in:_
 | `5xx` | The upstream server responds with any 5xx response code, or does not respond at all (disconnect/reset/read timeout).<br />Includes connect-failure and refused-stream.<br /> | 
 | `gateway-error` | The response is a gateway error (502,503 or 504).<br /> | 
 | `reset` | The upstream server does not respond at all (disconnect/reset/read timeout.)<br /> | 
+| `reset-before-request` | Like reset, but only retry if the request headers have not been sent to the upstream server.<br /> | 
 | `connect-failure` | Connection failure to the upstream server (connect timeout, etc.). (Included in *5xx*)<br /> | 
 | `retriable-4xx` | The upstream server responds with a retriable 4xx response code.<br />Currently, the only response code in this category is 409.<br /> | 
 | `refused-stream` | The upstream server resets the stream with a REFUSED_STREAM error code.<br /> | 
@@ -4927,7 +5020,7 @@ _Appears in:_
 | `rootID` | _string_ |  true  |  | RootID is a unique ID for a set of extensions in a VM which will share a<br />RootContext and Contexts if applicable (e.g., an Wasm HttpFilter and an Wasm AccessLog).<br />If left blank, all extensions with a blank root_id with the same vm_id will share Context(s).<br />Note: RootID must match the root_id parameter used to register the Context in the Wasm code. |
 | `code` | _[WasmCodeSource](#wasmcodesource)_ |  true  |  | Code is the Wasm code for the extension. |
 | `config` | _[JSON](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#json-v1-apiextensions-k8s-io)_ |  false  |  | Config is the configuration for the Wasm extension.<br />This configuration will be passed as a JSON string to the Wasm extension. |
-| `failOpen` | _boolean_ |  false  | false | FailOpen is a switch used to control the behavior when a fatal error occurs<br />during the initialization or the execution of the Wasm extension.<br />If FailOpen is set to true, the system bypasses the Wasm extension and<br />allows the traffic to pass through. Otherwise, if it is set to false or<br />not set (defaulting to false), the system blocks the traffic and returns<br />an HTTP 5xx error. |
+| `failOpen` | _boolean_ |  false  | false | FailOpen is a switch used to control the behavior when a fatal error occurs<br />during the initialization or the execution of the Wasm extension.<br />If FailOpen is set to true, the system bypasses the Wasm extension and<br />allows the traffic to pass through. If it is set to false or<br />not set (defaulting to false), the system blocks the traffic and returns<br />an HTTP 5xx error.<br />If set to true, the Wasm extension will also be bypassed if the configuration is invalid. |
 | `env` | _[WasmEnv](#wasmenv)_ |  false  |  | Env configures the environment for the Wasm extension |
 
 
@@ -5041,6 +5134,7 @@ _Appears in:_
 | ---   | ---  | ---      | ---     | ---         |
 | `pre` | _[XDSTranslatorHook](#xdstranslatorhook) array_ |  true  |  |  |
 | `post` | _[XDSTranslatorHook](#xdstranslatorhook) array_ |  true  |  |  |
+| `translation` | _[TranslationConfig](#translationconfig)_ |  true  |  | Translation defines the configuration for the translation hook. |
 
 
 #### XFCCCertData
diff --git a/site/content/en/latest/concepts/introduction/gateway_api_extensions/backend-traffic-policy.md b/site/content/en/latest/concepts/introduction/gateway_api_extensions/backend-traffic-policy.md
index b0313539e..995d66e7d 100644
--- a/site/content/en/latest/concepts/introduction/gateway_api_extensions/backend-traffic-policy.md
+++ b/site/content/en/latest/concepts/introduction/gateway_api_extensions/backend-traffic-policy.md
@@ -69,6 +69,77 @@ In this example `my-route` and `my-gateway` would both affect the route. However
 
 Lastly, it's important to note that even when you apply a policy to a Gateway, the policy's effects are tracked separately for each backend service referenced in your routes. For example, if you set up circuit breaking on a Gateway with multiple backend services, each backend service will have its own independent circuit breaker counter. This ensures that issues with one backend service don't affect the others.
 
+## Policy Merging
+
+BackendTrafficPolicy supports merging configurations using the `mergeType` field, which allows route-level policies to combine with gateway-level policies rather than completely overriding them. This enables layered policy strategies where platform teams can set baseline configurations at the Gateway level, while application teams can add specific policies for their routes.
+
+### Merge Types
+
+- **StrategicMerge**: Uses Kubernetes strategic merge patch semantics, providing intelligent merging for complex data structures including arrays
+- **JSONMerge**: Uses RFC 7396 JSON Merge Patch semantics, with simple replacement strategy where arrays are completely replaced
+
+### Example Usage
+
+Here's an example demonstrating policy merging for rate limiting:
+
+```yaml
+# Platform team: Gateway-level policy with global abuse prevention
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: BackendTrafficPolicy
+metadata:
+  name: global-backendtrafficpolicy
+spec:
+  rateLimit:
+    type: Global
+    global:
+      rules:
+      - clientSelectors:
+        - sourceCIDR:
+            type: Distinct
+            value: 0.0.0.0/0
+        limit:
+          requests: 100
+          unit: Second
+        shared: true
+  targetRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: eg
+
+---
+# Application team: Route-level policy with specific limits
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: BackendTrafficPolicy
+metadata:
+  name: route-backendtrafficpolicy
+spec:
+  mergeType: StrategicMerge  # Enables merging with gateway policy
+  rateLimit:
+    type: Global
+    global:
+      rules:
+      - clientSelectors:
+        - sourceCIDR:
+            type: Distinct
+            value: 0.0.0.0/0
+        limit:
+          requests: 5
+          unit: Minute
+        shared: false
+  targetRefs:
+  - group: gateway.networking.k8s.io
+    kind: HTTPRoute
+    name: signup-service-httproute
+```
+
+In this example, the route-level policy merges with the gateway-level policy, resulting in both rate limits being enforced: the global 100 requests/second abuse limit and the route-specific 5 requests/minute limit.
+
+### Key Constraints
+
+- The `mergeType` field can only be set on policies targeting child resources (like HTTPRoute), not parent resources (like Gateway)
+- When `mergeType` is unset, no merging occurs - only the most specific policy takes effect
+- The merged configuration combines both policies, enabling layered protection strategies
+
 ## Related Resources
 
 - [Circuit Breakers](../../../tasks/traffic/circuit-breaker.md)
diff --git a/site/content/en/latest/install/gateway-addons-helm-api.md b/site/content/en/latest/install/gateway-addons-helm-api.md
index df002772c..0ec037671 100644
--- a/site/content/en/latest/install/gateway-addons-helm-api.md
+++ b/site/content/en/latest/install/gateway-addons-helm-api.md
@@ -38,6 +38,7 @@ An Add-ons Helm chart for Envoy Gateway
 | alloy.alloy.configMap.content | string | `"// Write your Alloy config here:\nlogging {\n  level = \"info\"\n  format = \"logfmt\"\n}\nloki.write \"alloy\" {\n  endpoint {\n    url = \"http://loki.monitoring.svc:3100/loki/api/v1/push\"\n  }\n}\n// discovery.kubernetes allows you to find scrape targets from Kubernetes resources.\n// It watches cluster state and ensures targets are continually synced with what is currently running in your cluster.\ndiscovery.kubernetes \"pod\" {\n  role = \"pod\"\n}\n\n// discovery.relabel rewrites the label set of the input targets by applying one or more relabeling rules.\n// If no rules are defined, then the input targets are exported as-is.\ndiscovery.relabel \"pod_logs\" {\n  targets = discovery.kubernetes.pod.targets\n\n  // Label creation - \"namespace\" field from \"__meta_kubernetes_namespace\"\n  rule {\n    source_labels = [\"__meta_kubernetes_namespace\"]\n    action = \"replace\"\n    target_label = \"namespace\"\n  }\n\n  // Label creation - \"pod\" field from \"__meta_kubernetes_pod_name\"\n  rule {\n    source_labels = [\"__meta_kubernetes_pod_name\"]\n    action = \"replace\"\n    target_label = \"pod\"\n  }\n\n  // Label creation - \"container\" field from \"__meta_kubernetes_pod_container_name\"\n  rule {\n    source_labels = [\"__meta_kubernetes_pod_container_name\"]\n    action = \"replace\"\n    target_label = \"container\"\n  }\n\n  // Label creation -  \"app\" field from \"__meta_kubernetes_pod_label_app_kubernetes_io_name\"\n  rule {\n    source_labels = [\"__meta_kubernetes_pod_label_app_kubernetes_io_name\"]\n    action = \"replace\"\n    target_label = \"app\"\n  }\n\n  // Label creation -  \"job\" field from \"__meta_kubernetes_namespace\" and \"__meta_kubernetes_pod_container_name\"\n  // Concatenate values __meta_kubernetes_namespace/__meta_kubernetes_pod_container_name\n  rule {\n    source_labels = [\"__meta_kubernetes_namespace\", \"__meta_kubernetes_pod_container_name\"]\n    action = \"replace\"\n    target_label = \"job\"\n    separator = \"/\"\n    replacement = \"$1\"\n  }\n\n  // Label creation - \"container\" field from \"__meta_kubernetes_pod_uid\" and \"__meta_kubernetes_pod_container_name\"\n  // Concatenate values __meta_kubernetes_pod_uid/__meta_kubernetes_pod_container_name.log\n  rule {\n    source_labels = [\"__meta_kubernetes_pod_uid\", \"__meta_kubernetes_pod_container_name\"]\n    action = \"replace\"\n    target_label = \"__path__\"\n    separator = \"/\"\n    replacement = \"/var/log/pods/*$1/*.log\"\n  }\n\n  // Label creation -  \"container_runtime\" field from \"__meta_kubernetes_pod_container_id\"\n  rule {\n    source_labels = [\"__meta_kubernetes_pod_container_id\"]\n    action = \"replace\"\n    target_label = \"container_runtime\"\n    regex = \"^(\\\\S+):\\\\/\\\\/.+$\"\n    replacement = \"$1\"\n  }\n}\n\n// loki.source.kubernetes tails logs from Kubernetes containers using the Kubernetes API.\nloki.source.kubernetes \"pod_logs\" {\n  targets    = discovery.relabel.pod_logs.output\n  forward_to = [loki.process.pod_logs.receiver]\n}\n// loki.process receives log entries from other Loki components, applies one or more processing stages,\n// and forwards the results to the list of receivers in the component’s arguments.\nloki.process \"pod_logs\" {\n  stage.static_labels {\n      values = {\n        cluster = \"envoy-gateway\",\n      }\n  }\n\n  forward_to = [loki.write.alloy.receiver]\n}"` |  |
 | alloy.enabled | bool | `false` |  |
 | alloy.fullnameOverride | string | `"alloy"` |  |
+| dashboard.annotations | object | `{}` |  |
 | dashboard.labels | object | `{}` |  |
 | fluent-bit.config.filters | string | `"[FILTER]\n    Name kubernetes\n    Match kube.*\n    Merge_Log On\n    Keep_Log Off\n    K8S-Logging.Parser On\n    K8S-Logging.Exclude On\n\n[FILTER]\n    Name grep\n    Match kube.*\n    Regex $kubernetes['container_name'] ^envoy$\n\n[FILTER]\n    Name parser\n    Match kube.*\n    Key_Name log\n    Parser envoy\n    Reserve_Data True\n"` |  |
 | fluent-bit.config.inputs | string | `"[INPUT]\n    Name tail\n    Path /var/log/containers/*.log\n    multiline.parser docker, cri\n    Tag kube.*\n    Mem_Buf_Limit 5MB\n    Skip_Long_Lines On\n"` |  |
diff --git a/site/content/en/latest/tasks/extensibility/extension-server.md b/site/content/en/latest/tasks/extensibility/extension-server.md
index 63b865e81..a6a83f310 100644
--- a/site/content/en/latest/tasks/extensibility/extension-server.md
+++ b/site/content/en/latest/tasks/extensibility/extension-server.md
@@ -18,22 +18,113 @@ especially when using the same extension server across different Envoy Gateway v
 
 ## Introduction
 
-One of the Envoy Gateway project goals is to "provide a common foundation for vendors to 
+One of the Envoy Gateway project goals is to "provide a common foundation for vendors to
 build value-added products without having to re-engineer fundamental interactions". The
 Envoy Gateway Extension Server provides a mechanism where Envoy Gateway tracks all provider
 resources and then calls a set of hooks that allow the generated xDS configuration to be
 modified before it is sent to Envoy Proxy. See the [design documentation][] for full details.
 
+## Extension Hooks Overview
+
+Envoy Gateway provides several extension hooks that are called at different stages of the xDS translation process. These hooks allow extensions to modify various aspects of the generated xDS configuration:
+
+### Available Hooks
+
+| Hook Type | Hook Method Name | Purpose | Resources Modified | Execution Context |
+|-----------|------------------|---------|-------------------|-------------------|
+| `Route` | `PostRouteModifyHook` | Modify individual routes | Single `envoy.config.route.v3.Route` | Per-route, only for routes with extension filters |
+| `Cluster` | `PostClusterModifyHook` | Modify clusters for custom backends | Single `envoy.config.cluster.v3.Cluster` | Per-cluster, only for custom backend clusters |
+| `VirtualHost` | `PostVirtualHostModifyHook` | Modify virtual hosts and add custom routes | Single `envoy.config.route.v3.VirtualHost` | Per-virtual-host |
+| `HTTPListener` | `PostHTTPListenerModifyHook` | Modify HTTP listeners | Single `envoy.config.listener.v3.Listener` | Per-listener |
+| `Translation` | `PostTranslateModifyHook` | Global modification of all xDS resources | All clusters, secrets, listeners, and routes | Once per translation cycle |
+
+### Hook Execution Order
+
+The hooks are executed in the following order during xDS translation:
+
+1. **Route Processing Phase**
+   - `Route` hook (`PostRouteModifyHook`): Called for each route that has extension filters attached
+   - `Cluster` hook (`PostClusterModifyHook`): Called for each cluster generated from custom backend references
+
+2. **Virtual Host Processing Phase**
+   - `VirtualHost` hook (`PostVirtualHostModifyHook`): Called for each virtual host after all routes are processed
+
+3. **Listener Processing Phase**
+   - `HTTPListener` hook (`PostHTTPListenerModifyHook`): Called for each HTTP listener after virtual hosts are configured
+
+4. **Final Translation Phase**
+   - `Translation` hook (`PostTranslateModifyHook`): Called once with all generated clusters, secrets, listeners, and routes
+
+### Hook Details
+
+#### Route Hook (`PostRouteModifyHook`)
+
+- **When called**: After each individual route is generated from an HTTPRoute with extension filters
+- **Input**: Single route, hostnames, and extension resources from the HTTPRoute
+- **Output**: Modified route
+- **Use cases**: Add route-specific filters, modify route configuration, add typed per-filter config
+
+#### Cluster Hook (`PostClusterModifyHook`)
+
+- **When called**: During cluster generation for custom backend references only
+- **Input**: Single cluster and extension resources from the backend reference
+- **Output**: Modified cluster
+- **Use cases**: Configure custom backend clusters, add health checks, modify load balancing
+
+#### VirtualHost Hook (`PostVirtualHostModifyHook`)
+
+- **When called**: After all routes for a virtual host are processed
+- **Input**: Complete virtual host with all its routes
+- **Output**: Modified virtual host (can add/remove/modify routes)
+- **Use cases**: Add virtual host-level configuration, inject additional routes
+
+#### HTTPListener Hook (`PostHTTPListenerModifyHook`)
+
+- **When called**: After listener is fully configured with all virtual hosts
+- **Input**: Complete HTTP listener and associated extension policies
+- **Output**: Modified listener
+- **Use cases**: Add listener filters, modify listener configuration, add authentication
+
+#### Translation Hook (`PostTranslateModifyHook`)
+
+- **When called**: After all individual resources are generated and processed
+- **Input**: All clusters, secrets, listeners, and routes, plus extension policies
+- **Output**: Complete set of modified resources
+- **Use cases**: Global resource injection, cross-resource modifications, cleanup operations
+
+### Configuration
+
+Extensions must specify which hooks they want to use in the `extensionManager.hooks` configuration:
+
+```yaml
+extensionManager:
+  hooks:
+    xdsTranslator:
+      post:
+        - Route          # Enable route modification hook
+        - VirtualHost    # Enable virtual host modification hook
+        - HTTPListener   # Enable HTTP listener modification hook
+        - Cluster        # Enable cluster modification hook
+        - Translation    # Enable global translation hook
+      # Configure which resources to include in PostTranslateModifyHook
+      # Default: true for clusters and secrets (for backward compatibility)
+      # Default: false for listeners and routes (for backward compatibility)
+      translation:
+        listener:
+          includeAll: true
+        route:
+          includeAll: true
+```
+
 This task sets up an example extension server that adds the Envoy Proxy Basic Authentication
-HTTP filter to all the listeners generated by Envoy Gateway. The example extension server 
+HTTP filter to all the listeners generated by Envoy Gateway. The example extension server
 includes its own CRD which allows defining username/password pairs that will be accepted by
-the Envoy Proxy. 
+the Envoy Proxy.
 
 **Note:** Envoy Gateway supports adding Basic Authentication to routes using a [SecurityPolicy][].
 See [this task](../security/basic-auth) for the preferred way to configure Basic 
 Authentication.
 
-
 ## Quickstart
 
 ### Prerequisites
diff --git a/site/content/en/latest/tasks/observability/gateway-exported-metrics.md b/site/content/en/latest/tasks/observability/gateway-exported-metrics.md
index 9df7bc0ee..510ea5b82 100644
--- a/site/content/en/latest/tasks/observability/gateway-exported-metrics.md
+++ b/site/content/en/latest/tasks/observability/gateway-exported-metrics.md
@@ -23,6 +23,7 @@ Envoy Gateway collects the following metrics in Watching Components:
 | `watchable_subscribe_duration_seconds` | How long in seconds a subscribed watchable queue is handled. |
 | `watchable_subscribe_total`            | Total number of subscribed watchable queue.                  |
 | `watchable_panics_recovered_total`     | Total recovered panics in the watchable infrastructure.      |
+| `watchable_publish_total`              | Total number of published event to watchable queue.          |
 
 Each metric includes the `runner` label to identify the corresponding components,
 the relationship between label values and components is as follows:
diff --git a/site/content/en/latest/tasks/traffic/global-rate-limit.md b/site/content/en/latest/tasks/traffic/global-rate-limit.md
index 63f940b15..8b2ccd193 100644
--- a/site/content/en/latest/tasks/traffic/global-rate-limit.md
+++ b/site/content/en/latest/tasks/traffic/global-rate-limit.md
@@ -1213,6 +1213,225 @@ server: envoy
 
 ```
 
+## Rate Limit Policy Merging
+
+This example demonstrates how to implement a layered rate limiting strategy using BackendTrafficPolicy merging. This approach allows platform teams to set global abuse prevention limits at the Gateway level, while application teams can define more specific rate limits for their individual routes.
+
+In this scenario:
+- **Platform Team**: Manages a Gateway-level BackendTrafficPolicy that applies a global abuse rate limit (100 requests/second) across all traffic
+- **Application Team**: Manages a Route-level BackendTrafficPolicy that applies a more restrictive limit (5 requests/minute) for their specific signup service
+
+The route-level policy uses `mergeType: StrategicMerge` to combine with the gateway-level policy, ensuring both limits are enforced. The global limit acts as an abuse prevention mechanism, while the route-specific limit protects the signup service from overload.
+
+{{< tabpane text=true >}}
+{{% tab header="Apply from stdin" %}}
+
+```shell
+cat <<EOF | kubectl apply -f -
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: BackendTrafficPolicy
+metadata:
+  name: global-backendtrafficpolicy
+spec:
+  rateLimit:
+    type: Global
+    global:
+      rules:
+      - clientSelectors:
+        - sourceCIDR:
+            type: Distinct
+            value: 0.0.0.0/0
+        limit:
+          requests: 100
+          unit: Second
+        shared: true
+  targetRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: eg
+---
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: BackendTrafficPolicy
+metadata:
+  name: route-backendtrafficpolicy
+spec:
+  mergeType: StrategicMerge
+  rateLimit:
+    type: Global
+    global:
+      rules:
+      - clientSelectors:
+        - sourceCIDR:
+            type: Distinct
+            value: 0.0.0.0/0
+        limit:
+          requests: 5
+          unit: Minute
+        shared: false
+  targetRefs:
+  - group: gateway.networking.k8s.io
+    kind: HTTPRoute
+    name: signup-service-httproute
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: signup-service-httproute
+spec:
+  parentRefs:
+  - name: eg
+  hostnames:
+  - signup.example
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /signup
+    backendRefs:
+    - group: ""
+      kind: Service
+      name: backend
+      port: 3000
+EOF
+```
+
+{{% /tab %}}
+{{% tab header="Apply from file" %}}
+Save and apply the following resources to your cluster:
+
+```yaml
+---
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: BackendTrafficPolicy
+metadata:
+  name: global-backendtrafficpolicy
+spec:
+  rateLimit:
+    type: Global
+    global:
+      rules:
+      - clientSelectors:
+        - sourceCIDR:
+            type: Distinct
+            value: 0.0.0.0/0
+        limit:
+          requests: 100
+          unit: Second
+        shared: true
+  targetRefs:
+  - group: gateway.networking.k8s.io
+    kind: Gateway
+    name: eg
+---
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: BackendTrafficPolicy
+metadata:
+  name: route-backendtrafficpolicy
+spec:
+  mergeType: StrategicMerge
+  rateLimit:
+    type: Global
+    global:
+      rules:
+      - clientSelectors:
+        - sourceCIDR:
+            type: Distinct
+            value: 0.0.0.0/0
+        limit:
+          requests: 5
+          unit: Minute
+        shared: false
+  targetRefs:
+  - group: gateway.networking.k8s.io
+    kind: HTTPRoute
+    name: signup-service-httproute
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: signup-service-httproute
+spec:
+  parentRefs:
+  - name: eg
+  hostnames:
+  - signup.example
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /signup
+    backendRefs:
+    - group: ""
+      kind: Service
+      name: backend
+      port: 3000
+```
+
+{{% /tab %}}
+{{< /tabpane >}}
+
+### Key Configuration Details
+
+- **Gateway-level Policy**: Uses `shared: true` to create a shared rate limit bucket that applies across all routes in the Gateway
+- **Route-level Policy**: Uses `shared: false` to create a dedicated rate limit bucket for this specific route
+- **Merge Type**: The `mergeType: StrategicMerge` field enables the route policy to merge with the gateway policy rather than override it
+
+### Testing the Merged Rate Limits
+
+Let's verify that both rate limits are enforced. The signup service should be limited to 5 requests per minute, but also subject to the global 100 requests/second abuse limit.
+
+First, let's test the route-specific limit by sending 6 requests within a minute:
+
+```shell
+for i in {1..6}; do curl -I --header "Host: signup.example" http://${GATEWAY_HOST}/signup ; sleep 1; done
+```
+
+You should see the first 5 requests succeed and the 6th request receive a `429 Too Many Requests` response:
+
+```console
+HTTP/1.1 200 OK
+content-type: application/json
+x-content-type-options: nosniff
+date: Wed, 08 Feb 2023 02:33:31 GMT
+content-length: 460
+x-envoy-upstream-service-time: 4
+server: envoy
+
+HTTP/1.1 200 OK
+content-type: application/json
+x-content-type-options: nosniff
+date: Wed, 08 Feb 2023 02:33:32 GMT
+content-length: 460
+x-envoy-upstream-service-time: 2
+server: envoy
+
+...
+
+HTTP/1.1 429 Too Many Requests
+x-envoy-ratelimited: true
+date: Wed, 08 Feb 2023 02:33:36 GMT
+server: envoy
+transfer-encoding: chunked
+```
+
+The global abuse limit would activate if traffic across all routes in the Gateway exceeds 100 requests/second, providing an additional layer of protection managed by the platform team.
+
+### Use Cases and Team Responsibilities
+
+**Platform Team Responsibilities:**
+- Define Gateway-level policies with global abuse rate limits
+- Set reasonable baseline protections that apply to all applications
+- Use `shared: true` for limits that should be enforced across multiple routes
+- Monitor and adjust global limits based on infrastructure capacity
+
+**Application Team Responsibilities:**  
+- Define Route-level policies with application-specific rate limits
+- Use `mergeType: StrategicMerge` to combine with platform policies
+- Set `shared: false` for limits specific to their application's requirements
+- Implement rate limits that protect their specific service from overload
+
+This layered approach ensures both infrastructure protection and application-specific controls work together effectively.
+
 ### (Optional) Editing Kubernetes Resources settings for the Rate Limit Service
 
 * The default installation of Envoy Gateway installs a default [EnvoyGateway][] configuration and provides the initial rate
diff --git a/test/cel-validation/envoyextensionpolicy_test.go b/test/cel-validation/envoyextensionpolicy_test.go
index 195d45dd0..7202634be 100644
--- a/test/cel-validation/envoyextensionpolicy_test.go
+++ b/test/cel-validation/envoyextensionpolicy_test.go
@@ -308,6 +308,39 @@ func TestEnvoyExtensionPolicyTarget(t *testing.T) {
 			},
 			wantErrors: []string{},
 		},
+		{
+			desc: "ExtProc with BackendRef to ServiceImport",
+			mutate: func(sp *egv1a1.EnvoyExtensionPolicy) {
+				sp.Spec = egv1a1.EnvoyExtensionPolicySpec{
+					ExtProc: []egv1a1.ExtProc{
+						{
+							BackendCluster: egv1a1.BackendCluster{
+								BackendRefs: []egv1a1.BackendRef{
+									{
+										BackendObjectReference: gwapiv1.BackendObjectReference{
+											Group: ptr.To(gwapiv1.Group("multicluster.x-k8s.io")),
+											Kind:  ptr.To(gwapiv1.Kind("ServiceImport")),
+											Name:  "grpc-proc-service-import",
+											Port:  ptr.To(gwapiv1.PortNumber(80)),
+										},
+									},
+								},
+							},
+						},
+					},
+					PolicyTargetReferences: egv1a1.PolicyTargetReferences{
+						TargetRef: &gwapiv1a2.LocalPolicyTargetReferenceWithSectionName{
+							LocalPolicyTargetReference: gwapiv1a2.LocalPolicyTargetReference{
+								Group: "gateway.networking.k8s.io",
+								Kind:  "Gateway",
+								Name:  "eg",
+							},
+						},
+					},
+				}
+			},
+			wantErrors: []string{},
+		},
 		{
 			desc: "ExtProc with invalid BackendRef Group",
 			mutate: func(sp *egv1a1.EnvoyExtensionPolicy) {
@@ -338,7 +371,7 @@ func TestEnvoyExtensionPolicyTarget(t *testing.T) {
 					},
 				}
 			},
-			wantErrors: []string{"spec.extProc[0]: Invalid value: \"object\": BackendRefs only supports Core and gateway.envoyproxy.io group"},
+			wantErrors: []string{"spec.extProc[0]: Invalid value: \"object\": BackendRefs only supports Core, multicluster.x-k8s.io, and gateway.envoyproxy.io groups"},
 		},
 		{
 			desc: "ExtProc with invalid BackendRef Kind",
@@ -370,7 +403,7 @@ func TestEnvoyExtensionPolicyTarget(t *testing.T) {
 					},
 				}
 			},
-			wantErrors: []string{"spec.extProc[0]: Invalid value: \"object\": BackendRefs only supports Service and Backend kind"},
+			wantErrors: []string{"spec.extProc[0]: Invalid value: \"object\": BackendRefs only supports Service, ServiceImport, and Backend kind"},
 		},
 		{
 			desc: "ExtProc with invalid fields",
@@ -414,6 +447,112 @@ func TestEnvoyExtensionPolicyTarget(t *testing.T) {
 				"spec.extProc[0].processingMode.request.body: Unsupported value: \"not-a-body-mode\": supported values: \"Streamed\", \"Buffered\", \"BufferedPartial\"",
 			},
 		},
+		{
+			desc: "valid ExtProc with request attributes and failOpen true",
+			mutate: func(sp *egv1a1.EnvoyExtensionPolicy) {
+				sp.Spec = egv1a1.EnvoyExtensionPolicySpec{
+					ExtProc: []egv1a1.ExtProc{
+						{
+							BackendCluster: egv1a1.BackendCluster{
+								BackendRefs: []egv1a1.BackendRef{
+									{
+										BackendObjectReference: gwapiv1.BackendObjectReference{
+											Name: "grpc-proc-service",
+											Port: ptr.To(gwapiv1.PortNumber(80)),
+										},
+									},
+								},
+							},
+							ProcessingMode: &egv1a1.ExtProcProcessingMode{
+								Request: &egv1a1.ProcessingModeOptions{
+									Attributes: []string{"request.headers"},
+								},
+							},
+							FailOpen: ptr.To(true),
+						},
+					},
+					PolicyTargetReferences: egv1a1.PolicyTargetReferences{
+						TargetRef: &gwapiv1a2.LocalPolicyTargetReferenceWithSectionName{
+							LocalPolicyTargetReference: gwapiv1a2.LocalPolicyTargetReference{
+								Group: "gateway.networking.k8s.io",
+								Kind:  "Gateway",
+								Name:  "eg",
+							},
+						},
+					},
+				}
+			},
+			wantErrors: []string{},
+		},
+		{
+			desc: "valid ExtProc with response attributes and failOpen true",
+			mutate: func(sp *egv1a1.EnvoyExtensionPolicy) {
+				sp.Spec = egv1a1.EnvoyExtensionPolicySpec{
+					ExtProc: []egv1a1.ExtProc{
+						{
+							BackendCluster: egv1a1.BackendCluster{
+								BackendRefs: []egv1a1.BackendRef{
+									{
+										BackendObjectReference: gwapiv1.BackendObjectReference{
+											Name: "grpc-proc-service",
+											Port: ptr.To(gwapiv1.PortNumber(80)),
+										},
+									},
+								},
+							},
+							ProcessingMode: &egv1a1.ExtProcProcessingMode{
+								Response: &egv1a1.ProcessingModeOptions{
+									Attributes: []string{"response.headers"},
+								},
+							},
+							FailOpen: ptr.To(true),
+						},
+					},
+					PolicyTargetReferences: egv1a1.PolicyTargetReferences{
+						TargetRef: &gwapiv1a2.LocalPolicyTargetReferenceWithSectionName{
+							LocalPolicyTargetReference: gwapiv1a2.LocalPolicyTargetReference{
+								Group: "gateway.networking.k8s.io",
+								Kind:  "Gateway",
+								Name:  "eg",
+							},
+						},
+					},
+				}
+			},
+			wantErrors: []string{},
+		},
+		{
+			desc: "valid ExtProc with failOpen true",
+			mutate: func(sp *egv1a1.EnvoyExtensionPolicy) {
+				sp.Spec = egv1a1.EnvoyExtensionPolicySpec{
+					ExtProc: []egv1a1.ExtProc{
+						{
+							BackendCluster: egv1a1.BackendCluster{
+								BackendRefs: []egv1a1.BackendRef{
+									{
+										BackendObjectReference: gwapiv1.BackendObjectReference{
+											Name: "grpc-proc-service",
+											Port: ptr.To(gwapiv1.PortNumber(80)),
+										},
+									},
+								},
+							},
+							FailOpen: ptr.To(true),
+						},
+					},
+					PolicyTargetReferences: egv1a1.PolicyTargetReferences{
+						TargetRef: &gwapiv1a2.LocalPolicyTargetReferenceWithSectionName{
+							LocalPolicyTargetReference: gwapiv1a2.LocalPolicyTargetReference{
+								Group: "gateway.networking.k8s.io",
+								Kind:  "Gateway",
+								Name:  "eg",
+							},
+						},
+					},
+				}
+			},
+			wantErrors: []string{},
+		},
 		{
 			desc: "valid ExtProc without FullDuplexStreamed body and failOpen true",
 			mutate: func(sp *egv1a1.EnvoyExtensionPolicy) {
diff --git a/test/cel-validation/securitypolicy_test.go b/test/cel-validation/securitypolicy_test.go
index ebaa5522e..cd9109b40 100644
--- a/test/cel-validation/securitypolicy_test.go
+++ b/test/cel-validation/securitypolicy_test.go
@@ -521,6 +521,39 @@ func TestSecurityPolicyTarget(t *testing.T) {
 			},
 			wantErrors: []string{},
 		},
+		{
+			desc: "GRPC external auth service with backendRefs to ServiceImport",
+			mutate: func(sp *egv1a1.SecurityPolicy) {
+				sp.Spec = egv1a1.SecurityPolicySpec{
+					ExtAuth: &egv1a1.ExtAuth{
+						GRPC: &egv1a1.GRPCExtAuthService{
+							BackendCluster: egv1a1.BackendCluster{
+								BackendRefs: []egv1a1.BackendRef{
+									{
+										BackendObjectReference: gwapiv1.BackendObjectReference{
+											Group: ptr.To(gwapiv1.Group("multicluster.x-k8s.io")),
+											Name:  "grpc-auth-service",
+											Kind:  ptr.To(gwapiv1a2.Kind("ServiceImport")),
+											Port:  ptr.To(gwapiv1.PortNumber(80)),
+										},
+									},
+								},
+							},
+						},
+					},
+					PolicyTargetReferences: egv1a1.PolicyTargetReferences{
+						TargetRef: &gwapiv1a2.LocalPolicyTargetReferenceWithSectionName{
+							LocalPolicyTargetReference: gwapiv1a2.LocalPolicyTargetReference{
+								Group: "gateway.networking.k8s.io",
+								Kind:  "Gateway",
+								Name:  "eg",
+							},
+						},
+					},
+				}
+			},
+			wantErrors: []string{},
+		},
 		{
 			desc: "empty GRPC external auth service",
 			mutate: func(sp *egv1a1.SecurityPolicy) {
@@ -604,6 +637,39 @@ func TestSecurityPolicyTarget(t *testing.T) {
 			},
 			wantErrors: []string{},
 		},
+		{
+			desc: "HTTP external auth service with backendRefs to ServiceImport",
+			mutate: func(sp *egv1a1.SecurityPolicy) {
+				sp.Spec = egv1a1.SecurityPolicySpec{
+					ExtAuth: &egv1a1.ExtAuth{
+						HTTP: &egv1a1.HTTPExtAuthService{
+							BackendCluster: egv1a1.BackendCluster{
+								BackendRefs: []egv1a1.BackendRef{
+									{
+										BackendObjectReference: gwapiv1.BackendObjectReference{
+											Group: ptr.To(gwapiv1.Group("multicluster.x-k8s.io")),
+											Name:  "grpc-auth-service",
+											Kind:  ptr.To(gwapiv1a2.Kind("ServiceImport")),
+											Port:  ptr.To(gwapiv1.PortNumber(80)),
+										},
+									},
+								},
+							},
+						},
+					},
+					PolicyTargetReferences: egv1a1.PolicyTargetReferences{
+						TargetRef: &gwapiv1a2.LocalPolicyTargetReferenceWithSectionName{
+							LocalPolicyTargetReference: gwapiv1a2.LocalPolicyTargetReference{
+								Group: "gateway.networking.k8s.io",
+								Kind:  "Gateway",
+								Name:  "eg",
+							},
+						},
+					},
+				}
+			},
+			wantErrors: []string{},
+		},
 		{
 			desc: "empty HTTP external auth service",
 			mutate: func(sp *egv1a1.SecurityPolicy) {
@@ -712,7 +778,7 @@ func TestSecurityPolicyTarget(t *testing.T) {
 				}
 			},
 			wantErrors: []string{
-				" BackendRefs only supports Core and gateway.envoyproxy.io group.",
+				" BackendRefs only supports Core, multicluster.x-k8s.io, and gateway.envoyproxy.io groups.",
 			},
 		},
 		{
@@ -745,7 +811,7 @@ func TestSecurityPolicyTarget(t *testing.T) {
 					},
 				}
 			},
-			wantErrors: []string{"BackendRefs only supports Service and Backend kind."},
+			wantErrors: []string{"BackendRefs only supports Service, ServiceImport, and Backend kind."},
 		},
 		{
 			desc: "grpc extAuth service invalid Group",
@@ -778,7 +844,7 @@ func TestSecurityPolicyTarget(t *testing.T) {
 				}
 			},
 			wantErrors: []string{
-				"BackendRefs only supports Core and gateway.envoyproxy.io group.",
+				"BackendRefs only supports Core, multicluster.x-k8s.io, and gateway.envoyproxy.io groups.",
 			},
 		},
 		{
@@ -812,7 +878,7 @@ func TestSecurityPolicyTarget(t *testing.T) {
 				}
 			},
 			wantErrors: []string{
-				"spec.extAuth.grpc: Invalid value: \"object\": BackendRefs only supports Service and Backend kind.",
+				"spec.extAuth.grpc: Invalid value: \"object\": BackendRefs only supports Service, ServiceImport, and Backend kind.",
 			},
 		},
 
diff --git a/test/e2e/testdata/httproute-to-backend-fqdn.yaml b/test/e2e/testdata/httproute-to-backend-fqdn.yaml
index bef40eecd..ffa67316f 100644
--- a/test/e2e/testdata/httproute-to-backend-fqdn.yaml
+++ b/test/e2e/testdata/httproute-to-backend-fqdn.yaml
@@ -14,7 +14,7 @@ spec:
     backendRefs:
     - group: gateway.envoyproxy.io
       kind: Backend
-      name: backend-fqdn-http2
+      name: backend-fqdn
 ---
 apiVersion: gateway.envoyproxy.io/v1alpha1
 kind: Backend
diff --git a/test/helm/gateway-crds-helm/all.out.yaml b/test/helm/gateway-crds-helm/all.out.yaml
index 2e543f636..5f3999a69 100644
--- a/test/helm/gateway-crds-helm/all.out.yaml
+++ b/test/helm/gateway-crds-helm/all.out.yaml
@@ -17405,6 +17405,12 @@ spec:
                       - hostname
                       - port
                       type: object
+                    hostname:
+                      description: Hostname defines a hostname endpoint.
+                      maxLength: 253
+                      minLength: 1
+                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                      type: string
                     ip:
                       description: IP defines an IP endpoint. Supports both IPv4 and
                         IPv6 addresses.
@@ -19287,6 +19293,7 @@ spec:
                           - 5xx
                           - gateway-error
                           - reset
+                          - reset-before-request
                           - connect-failure
                           - retriable-4xx
                           - refused-stream
@@ -20684,6 +20691,12 @@ spec:
                           initiation and stops when either the last byte of the request is sent upstream or when the response begins.
                         pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
                         type: string
+                      streamIdleTimeout:
+                        description: |2-
+                           The stream idle timeout defines the amount of time a stream can exist without any upstream or downstream activity.
+                           Default: 5 minutes.
+                        pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
+                        type: string
                     type: object
                   tcp:
                     description: Timeout settings for TCP.
@@ -22279,6 +22292,7 @@ spec:
                                     - 5xx
                                     - gateway-error
                                     - reset
+                                    - reset-before-request
                                     - connect-failure
                                     - retriable-4xx
                                     - refused-stream
@@ -22356,10 +22370,16 @@ spec:
                           type: object
                       type: object
                     failOpen:
+                      default: false
                       description: |-
-                        FailOpen defines if requests or responses that cannot be processed due to connectivity to the
-                        external processor are terminated or passed-through.
-                        Default: false
+                        FailOpen is a switch used to control the behavior when failing to call the external processor.
+
+                        If FailOpen is set to true, the system bypasses the ExtProc extension and
+                        allows the traffic to pass through. If it is set to false or
+                        not set (defaulting to false), the system blocks the traffic and returns
+                        an HTTP 5xx error.
+
+                        If set to true, the ExtProc extension will also be bypassed if the configuration is invalid.
                       type: boolean
                     messageTimeout:
                       description: |-
@@ -22457,19 +22477,23 @@ spec:
                   x-kubernetes-validations:
                   - message: BackendRefs must be used, backendRef is not supported.
                     rule: '!has(self.backendRef)'
-                  - message: BackendRefs only supports Service and Backend kind.
+                  - message: BackendRefs only supports Service, ServiceImport, and
+                      Backend kind.
                     rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                      == ''Service'' || f.kind == ''Backend'') : true'
-                  - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                      group.
+                      == ''Service'' || f.kind == ''ServiceImport'' || f.kind == ''Backend'')
+                      : true'
+                  - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                      and gateway.envoyproxy.io groups.
                     rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                      == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                      == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                      ''gateway.envoyproxy.io'')) : true'
                   - message: If FullDuplexStreamed body processing mode is used, FailOpen
                       must be false.
-                    rule: '!(has(self.failOpen) && self.failOpen == true && ((has(self.processingMode.request.body)
+                    rule: '!(has(self.failOpen) && self.failOpen == true && has(self.processingMode)
+                      && ((has(self.processingMode.request) && has(self.processingMode.request.body)
                       && self.processingMode.request.body == ''FullDuplexStreamed'')
-                      || (has(self.processingMode.response.body) && self.processingMode.response.body
-                      == ''FullDuplexStreamed'')))'
+                      || (has(self.processingMode.response) && has(self.processingMode.response.body)
+                      && self.processingMode.response.body == ''FullDuplexStreamed'')))'
                 maxItems: 16
                 type: array
               lua:
@@ -22978,10 +23002,13 @@ spec:
                       description: |-
                         FailOpen is a switch used to control the behavior when a fatal error occurs
                         during the initialization or the execution of the Wasm extension.
+
                         If FailOpen is set to true, the system bypasses the Wasm extension and
-                        allows the traffic to pass through. Otherwise, if it is set to false or
+                        allows the traffic to pass through. If it is set to false or
                         not set (defaulting to false), the system blocks the traffic and returns
                         an HTTP 5xx error.
+
+                        If set to true, the Wasm extension will also be bypassed if the configuration is invalid.
                       type: boolean
                     name:
                       description: |-
@@ -24078,11 +24105,6 @@ spec:
                   the number of cpuset threads on the platform.
                 format: int32
                 type: integer
-              disableLuaValidation:
-                default: false
-                description: DisableLuaValidation disables the Lua script validation
-                  for Lua EnvoyExtensionPolicies
-                type: boolean
               extraArgs:
                 description: |-
                   ExtraArgs defines additional command line options that are provided to Envoy.
@@ -24250,6 +24272,14 @@ spec:
                       and the log level is the value. If unspecified, defaults to "default: warn".
                     type: object
                 type: object
+              luaValidation:
+                description: |-
+                  LuaValidation determines strictness of the Lua script validation for Lua EnvoyExtensionPolicies
+                  Default: Strict
+                enum:
+                - Strict
+                - Disabled
+                type: string
               mergeGateways:
                 description: |-
                   MergeGateways defines if Gateway resources should be merged onto the same Envoy Proxy Infrastructure.
@@ -35316,6 +35346,7 @@ spec:
                                                       - 5xx
                                                       - gateway-error
                                                       - reset
+                                                      - reset-before-request
                                                       - connect-failure
                                                       - retriable-4xx
                                                       - refused-stream
@@ -36388,6 +36419,7 @@ spec:
                                                       - 5xx
                                                       - gateway-error
                                                       - reset
+                                                      - reset-before-request
                                                       - connect-failure
                                                       - retriable-4xx
                                                       - refused-stream
@@ -37539,6 +37571,7 @@ spec:
                                                 - 5xx
                                                 - gateway-error
                                                 - reset
+                                                - reset-before-request
                                                 - connect-failure
                                                 - retriable-4xx
                                                 - refused-stream
@@ -38612,6 +38645,7 @@ spec:
                                           - 5xx
                                           - gateway-error
                                           - reset
+                                          - reset-before-request
                                           - connect-failure
                                           - retriable-4xx
                                           - refused-stream
@@ -39632,6 +39666,8 @@ spec:
                       Otherwise, if it is set to false or not set (defaulting to false),
                       the system blocks the traffic and returns a HTTP 5xx error, reflecting a fail-closed approach.
                       This setting determines whether to prioritize accessibility over strict security in case of authorization service failure.
+
+                      If set to true, the External Authorization will also be bypassed if its configuration is invalid.
                     type: boolean
                   grpc:
                     description: |-
@@ -40498,6 +40534,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream
@@ -40578,13 +40615,16 @@ spec:
                     x-kubernetes-validations:
                     - message: backendRef or backendRefs needs to be set
                       rule: has(self.backendRef) || self.backendRefs.size() > 0
-                    - message: BackendRefs only supports Service and Backend kind.
+                    - message: BackendRefs only supports Service, ServiceImport, and
+                        Backend kind.
                       rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                        == ''Service'' || f.kind == ''Backend'') : true'
-                    - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                        group.
+                        == ''Service'' || f.kind == ''ServiceImport'' || f.kind ==
+                        ''Backend'') : true'
+                    - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                        and gateway.envoyproxy.io groups.
                       rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                        == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                        == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                        ''gateway.envoyproxy.io'')) : true'
                   headersToExtAuth:
                     description: |-
                       HeadersToExtAuth defines the client request headers that will be included
@@ -41465,6 +41505,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream
@@ -41566,13 +41607,16 @@ spec:
                     x-kubernetes-validations:
                     - message: backendRef or backendRefs needs to be set
                       rule: has(self.backendRef) || self.backendRefs.size() > 0
-                    - message: BackendRefs only supports Service and Backend kind.
+                    - message: BackendRefs only supports Service, ServiceImport, and
+                        Backend kind.
                       rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                        == ''Service'' || f.kind == ''Backend'') : true'
-                    - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                        group.
+                        == ''Service'' || f.kind == ''ServiceImport'' || f.kind ==
+                        ''Backend'') : true'
+                    - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                        and gateway.envoyproxy.io groups.
                       rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                        == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                        == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                        ''gateway.envoyproxy.io'')) : true'
                   recomputeRoute:
                     description: |-
                       RecomputeRoute clears the route cache and recalculates the routing decision.
@@ -42639,6 +42683,7 @@ spec:
                                             - 5xx
                                             - gateway-error
                                             - reset
+                                            - reset-before-request
                                             - connect-failure
                                             - retriable-4xx
                                             - refused-stream
@@ -42763,6 +42808,51 @@ spec:
                       [Authentication Request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest).
                     minLength: 1
                     type: string
+                  clientIDRef:
+                    description: |-
+                      The Kubernetes secret which contains the client ID to be used in the
+                      [Authentication Request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest).
+                      Exactly one of clientID or clientIDRef must be set.
+                      This is an Opaque secret. The client ID should be stored in the key "client-id".
+                    properties:
+                      group:
+                        default: ""
+                        description: |-
+                          Group is the group of the referent. For example, "gateway.networking.k8s.io".
+                          When unspecified or empty string, core API group is inferred.
+                        maxLength: 253
+                        pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                        type: string
+                      kind:
+                        default: Secret
+                        description: Kind is kind of the referent. For example "Secret".
+                        maxLength: 63
+                        minLength: 1
+                        pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
+                        type: string
+                      name:
+                        description: Name is the name of the referent.
+                        maxLength: 253
+                        minLength: 1
+                        type: string
+                      namespace:
+                        description: |-
+                          Namespace is the namespace of the referenced object. When unspecified, the local
+                          namespace is inferred.
+
+                          Note that when a namespace different than the local namespace is specified,
+                          a ReferenceGrant object is required in the referent namespace to allow that
+                          namespace's owner to accept the reference. See the ReferenceGrant
+                          documentation for details.
+
+                          Support: Core
+                        maxLength: 63
+                        minLength: 1
+                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
+                        type: string
+                    required:
+                    - name
+                    type: object
                   clientSecret:
                     description: |-
                       The Kubernetes secret which contains the OIDC client secret to be used in the
@@ -43800,6 +43890,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream
diff --git a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
index fb50314e4..23fa70706 100644
--- a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
+++ b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
@@ -93,6 +93,12 @@ spec:
                       - hostname
                       - port
                       type: object
+                    hostname:
+                      description: Hostname defines a hostname endpoint.
+                      maxLength: 253
+                      minLength: 1
+                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                      type: string
                     ip:
                       description: IP defines an IP endpoint. Supports both IPv4 and
                         IPv6 addresses.
@@ -1975,6 +1981,7 @@ spec:
                           - 5xx
                           - gateway-error
                           - reset
+                          - reset-before-request
                           - connect-failure
                           - retriable-4xx
                           - refused-stream
@@ -3372,6 +3379,12 @@ spec:
                           initiation and stops when either the last byte of the request is sent upstream or when the response begins.
                         pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
                         type: string
+                      streamIdleTimeout:
+                        description: |2-
+                           The stream idle timeout defines the amount of time a stream can exist without any upstream or downstream activity.
+                           Default: 5 minutes.
+                        pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
+                        type: string
                     type: object
                   tcp:
                     description: Timeout settings for TCP.
@@ -4967,6 +4980,7 @@ spec:
                                     - 5xx
                                     - gateway-error
                                     - reset
+                                    - reset-before-request
                                     - connect-failure
                                     - retriable-4xx
                                     - refused-stream
@@ -5044,10 +5058,16 @@ spec:
                           type: object
                       type: object
                     failOpen:
+                      default: false
                       description: |-
-                        FailOpen defines if requests or responses that cannot be processed due to connectivity to the
-                        external processor are terminated or passed-through.
-                        Default: false
+                        FailOpen is a switch used to control the behavior when failing to call the external processor.
+
+                        If FailOpen is set to true, the system bypasses the ExtProc extension and
+                        allows the traffic to pass through. If it is set to false or
+                        not set (defaulting to false), the system blocks the traffic and returns
+                        an HTTP 5xx error.
+
+                        If set to true, the ExtProc extension will also be bypassed if the configuration is invalid.
                       type: boolean
                     messageTimeout:
                       description: |-
@@ -5145,19 +5165,23 @@ spec:
                   x-kubernetes-validations:
                   - message: BackendRefs must be used, backendRef is not supported.
                     rule: '!has(self.backendRef)'
-                  - message: BackendRefs only supports Service and Backend kind.
+                  - message: BackendRefs only supports Service, ServiceImport, and
+                      Backend kind.
                     rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                      == ''Service'' || f.kind == ''Backend'') : true'
-                  - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                      group.
+                      == ''Service'' || f.kind == ''ServiceImport'' || f.kind == ''Backend'')
+                      : true'
+                  - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                      and gateway.envoyproxy.io groups.
                     rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                      == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                      == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                      ''gateway.envoyproxy.io'')) : true'
                   - message: If FullDuplexStreamed body processing mode is used, FailOpen
                       must be false.
-                    rule: '!(has(self.failOpen) && self.failOpen == true && ((has(self.processingMode.request.body)
+                    rule: '!(has(self.failOpen) && self.failOpen == true && has(self.processingMode)
+                      && ((has(self.processingMode.request) && has(self.processingMode.request.body)
                       && self.processingMode.request.body == ''FullDuplexStreamed'')
-                      || (has(self.processingMode.response.body) && self.processingMode.response.body
-                      == ''FullDuplexStreamed'')))'
+                      || (has(self.processingMode.response) && has(self.processingMode.response.body)
+                      && self.processingMode.response.body == ''FullDuplexStreamed'')))'
                 maxItems: 16
                 type: array
               lua:
@@ -5666,10 +5690,13 @@ spec:
                       description: |-
                         FailOpen is a switch used to control the behavior when a fatal error occurs
                         during the initialization or the execution of the Wasm extension.
+
                         If FailOpen is set to true, the system bypasses the Wasm extension and
-                        allows the traffic to pass through. Otherwise, if it is set to false or
+                        allows the traffic to pass through. If it is set to false or
                         not set (defaulting to false), the system blocks the traffic and returns
                         an HTTP 5xx error.
+
+                        If set to true, the Wasm extension will also be bypassed if the configuration is invalid.
                       type: boolean
                     name:
                       description: |-
@@ -6766,11 +6793,6 @@ spec:
                   the number of cpuset threads on the platform.
                 format: int32
                 type: integer
-              disableLuaValidation:
-                default: false
-                description: DisableLuaValidation disables the Lua script validation
-                  for Lua EnvoyExtensionPolicies
-                type: boolean
               extraArgs:
                 description: |-
                   ExtraArgs defines additional command line options that are provided to Envoy.
@@ -6938,6 +6960,14 @@ spec:
                       and the log level is the value. If unspecified, defaults to "default: warn".
                     type: object
                 type: object
+              luaValidation:
+                description: |-
+                  LuaValidation determines strictness of the Lua script validation for Lua EnvoyExtensionPolicies
+                  Default: Strict
+                enum:
+                - Strict
+                - Disabled
+                type: string
               mergeGateways:
                 description: |-
                   MergeGateways defines if Gateway resources should be merged onto the same Envoy Proxy Infrastructure.
@@ -18004,6 +18034,7 @@ spec:
                                                       - 5xx
                                                       - gateway-error
                                                       - reset
+                                                      - reset-before-request
                                                       - connect-failure
                                                       - retriable-4xx
                                                       - refused-stream
@@ -19076,6 +19107,7 @@ spec:
                                                       - 5xx
                                                       - gateway-error
                                                       - reset
+                                                      - reset-before-request
                                                       - connect-failure
                                                       - retriable-4xx
                                                       - refused-stream
@@ -20227,6 +20259,7 @@ spec:
                                                 - 5xx
                                                 - gateway-error
                                                 - reset
+                                                - reset-before-request
                                                 - connect-failure
                                                 - retriable-4xx
                                                 - refused-stream
@@ -21300,6 +21333,7 @@ spec:
                                           - 5xx
                                           - gateway-error
                                           - reset
+                                          - reset-before-request
                                           - connect-failure
                                           - retriable-4xx
                                           - refused-stream
@@ -22320,6 +22354,8 @@ spec:
                       Otherwise, if it is set to false or not set (defaulting to false),
                       the system blocks the traffic and returns a HTTP 5xx error, reflecting a fail-closed approach.
                       This setting determines whether to prioritize accessibility over strict security in case of authorization service failure.
+
+                      If set to true, the External Authorization will also be bypassed if its configuration is invalid.
                     type: boolean
                   grpc:
                     description: |-
@@ -23186,6 +23222,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream
@@ -23266,13 +23303,16 @@ spec:
                     x-kubernetes-validations:
                     - message: backendRef or backendRefs needs to be set
                       rule: has(self.backendRef) || self.backendRefs.size() > 0
-                    - message: BackendRefs only supports Service and Backend kind.
+                    - message: BackendRefs only supports Service, ServiceImport, and
+                        Backend kind.
                       rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                        == ''Service'' || f.kind == ''Backend'') : true'
-                    - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                        group.
+                        == ''Service'' || f.kind == ''ServiceImport'' || f.kind ==
+                        ''Backend'') : true'
+                    - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                        and gateway.envoyproxy.io groups.
                       rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                        == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                        == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                        ''gateway.envoyproxy.io'')) : true'
                   headersToExtAuth:
                     description: |-
                       HeadersToExtAuth defines the client request headers that will be included
@@ -24153,6 +24193,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream
@@ -24254,13 +24295,16 @@ spec:
                     x-kubernetes-validations:
                     - message: backendRef or backendRefs needs to be set
                       rule: has(self.backendRef) || self.backendRefs.size() > 0
-                    - message: BackendRefs only supports Service and Backend kind.
+                    - message: BackendRefs only supports Service, ServiceImport, and
+                        Backend kind.
                       rule: 'has(self.backendRefs) ? self.backendRefs.all(f, f.kind
-                        == ''Service'' || f.kind == ''Backend'') : true'
-                    - message: BackendRefs only supports Core and gateway.envoyproxy.io
-                        group.
+                        == ''Service'' || f.kind == ''ServiceImport'' || f.kind ==
+                        ''Backend'') : true'
+                    - message: BackendRefs only supports Core, multicluster.x-k8s.io,
+                        and gateway.envoyproxy.io groups.
                       rule: 'has(self.backendRefs) ? (self.backendRefs.all(f, f.group
-                        == "" || f.group == ''gateway.envoyproxy.io'')) : true'
+                        == "" || f.group == ''multicluster.x-k8s.io'' || f.group ==
+                        ''gateway.envoyproxy.io'')) : true'
                   recomputeRoute:
                     description: |-
                       RecomputeRoute clears the route cache and recalculates the routing decision.
@@ -25327,6 +25371,7 @@ spec:
                                             - 5xx
                                             - gateway-error
                                             - reset
+                                            - reset-before-request
                                             - connect-failure
                                             - retriable-4xx
                                             - refused-stream
@@ -25451,6 +25496,51 @@ spec:
                       [Authentication Request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest).
                     minLength: 1
                     type: string
+                  clientIDRef:
+                    description: |-
+                      The Kubernetes secret which contains the client ID to be used in the
+                      [Authentication Request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest).
+                      Exactly one of clientID or clientIDRef must be set.
+                      This is an Opaque secret. The client ID should be stored in the key "client-id".
+                    properties:
+                      group:
+                        default: ""
+                        description: |-
+                          Group is the group of the referent. For example, "gateway.networking.k8s.io".
+                          When unspecified or empty string, core API group is inferred.
+                        maxLength: 253
+                        pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                        type: string
+                      kind:
+                        default: Secret
+                        description: Kind is kind of the referent. For example "Secret".
+                        maxLength: 63
+                        minLength: 1
+                        pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
+                        type: string
+                      name:
+                        description: Name is the name of the referent.
+                        maxLength: 253
+                        minLength: 1
+                        type: string
+                      namespace:
+                        description: |-
+                          Namespace is the namespace of the referenced object. When unspecified, the local
+                          namespace is inferred.
+
+                          Note that when a namespace different than the local namespace is specified,
+                          a ReferenceGrant object is required in the referent namespace to allow that
+                          namespace's owner to accept the reference. See the ReferenceGrant
+                          documentation for details.
+
+                          Support: Core
+                        maxLength: 63
+                        minLength: 1
+                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
+                        type: string
+                    required:
+                    - name
+                    type: object
                   clientSecret:
                     description: |-
                       The Kubernetes secret which contains the OIDC client secret to be used in the
@@ -26488,6 +26578,7 @@ spec:
                                       - 5xx
                                       - gateway-error
                                       - reset
+                                      - reset-before-request
                                       - connect-failure
                                       - retriable-4xx
                                       - refused-stream