suxess-it / sx-cnp-oss

6 stars 1 forks source link

Update Helm release cost-analyzer to v2.4.0 #600

Closed renovate[bot] closed 2 weeks ago

renovate[bot] commented 2 weeks ago

This PR contains the following updates:

Package Update Change
cost-analyzer minor 2.3.5 -> 2.4.0

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.



This PR was generated by Mend Renovate. View the repository job log.

github-actions[bot] commented 2 weeks ago
Changes Rendered Chart ```diff diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml 2024-09-17 19:12:34.976809256 +0000 @@ -6,9 +6,9 @@ name: release-name-cloud-cost namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: cost-analyzer app.kubernetes.io/instance: release-name app: cost-analyzer diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml 2024-09-17 19:12:34.976809256 +0000 @@ -6,9 +6,9 @@ name: release-name-aggregator namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app: aggregator spec: selector: diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml 2024-09-17 19:12:34.976809256 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer roleRef: @@ -28,9 +28,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer roleRef: diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml 2024-09-17 19:12:34.976809256 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer rules: @@ -92,9 +92,9 @@ name: release-name-cost-analyzer labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer rules: diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml 2024-09-17 19:12:34.976809256 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: @@ -28,9 +28,10 @@ labels: app.kubernetes.io/name: cost-analyzer app.kubernetes.io/instance: release-name app: cost-analyzer - + annotations: + checksum/configs: 42af62fec1204e0dc234dc2db4f0bd19004ab3aa1bc161f1c10c7abe0dfea6d2 spec: securityContext: fsGroup: 1001 fsGroupChangePolicy: OnRootMismatch @@ -54,9 +55,9 @@ persistentVolumeClaim: claimName: release-name-cost-analyzer initContainers: containers: - - image: gcr.io/kubecost1/cost-model:prod-2.3.5 + - image: gcr.io/kubecost1/cost-model:prod-2.4.0 name: cost-model securityContext: allowPrivilegeEscalation: false capabilities: @@ -96,9 +97,9 @@ env: - name: GRAFANA_ENABLED value: "false" - name: HELM_VALUES - value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTUiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMS40In0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6Imtpd2lncmlkL2s4cy1zaWRlY2FyIiwidGFnIjoiMS4yNy4yIn0sInJlc291cmNlcyI6e319LCJzbXRwIjp7ImV4aXN0aW5nU2VjcmV0IjoiIn0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1ldHJpY3MiOnt9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsRmlsZVN0b3JlRW5hYmxlZCI6dHJ1ZSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXRsV2Vla2x5U3RvcmVEdXJhdGlvbldlZWtzIjo1MywiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAiLCJ3YXJtQ2FjaGUiOmZhbHNlfSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJQVkVuYWJsZWQiOmZhbHNlLCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImRlcGxveW1lbnRBbm5vdGF0aW9ucyI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTIuMCJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ== + value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiY2dyLmRldi9jaGFpbmd1YXJkL2dyYWZhbmEiLCJ0YWciOiJsYXRlc3QifSwibGRhcCI6eyJjb25maWciOiIiLCJleGlzdGluZ1NlY3JldCI6IiJ9LCJsaXZlbmVzc1Byb2JlIjp7ImZhaWx1cmVUaHJlc2hvbGQiOjEwLCJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9LCJpbml0aWFsRGVsYXlTZWNvbmRzIjo2MCwidGltZW91dFNlY29uZHMiOjMwfSwibmFtZXNwYWNlX2Rhc2hib2FyZHMiOiJrdWJlY29zdCIsIm5hbWVzcGFjZV9kYXRhc291cmNlcyI6Imt1YmVjb3N0Iiwibm9kZVNlbGVjdG9yIjp7fSwicGx1Z2lucyI6W10sInBvZEFubm90YXRpb25zIjp7fSwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInJlYWRpbmVzc1Byb2JlIjp7Imh0dHBHZXQiOnsicGF0aCI6Ii9hcGkvaGVhbHRoIiwicG9ydCI6MzAwMH19LCJyZXBsaWNhcyI6MSwicmVzb3VyY2VzIjp7fSwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInBvcnQiOjgwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImNyZWF0ZSI6dHJ1ZSwibmFtZSI6IiJ9LCJzaWRlY2FyIjp7ImRhc2hib2FyZHMiOnsiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlcnJvcl90aHJvdHRsZV9zbGVlcCI6MCwiZm9sZGVyIjoiL3RtcC9kYXNoYm9hcmRzIiwibGFiZWwiOiJncmFmYW5hX2Rhc2hib2FyZCIsImxhYmVsVmFsdWUiOiIxIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiY2dyLmRldi9jaGFpbmd1YXJkL2s4cy1zaWRlY2FyIiwidGFnIjoibGF0ZXN0In0sInJlc291cmNlcyI6e319LCJzbXRwIjp7ImV4aXN0aW5nU2VjcmV0IjoiIn0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1ldHJpY3MiOnt9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsRmlsZVN0b3JlRW5hYmxlZCI6dHJ1ZSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAiLCJ3YXJtQ2FjaGUiOmZhbHNlfSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJQVkVuYWJsZWQiOmZhbHNlLCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIyMgRW5hYmxlcyBzY3JhcGluZyBvZiBOVklESUEgR1BVIG1ldHJpY3MgdmlhIGRjZ20tZXhwb3J0ZXIuIFNjcmFwZXMgYWxsXG4jIyBlbmRwb2ludHMgd2hpY2ggY29udGFpbiBcImRjZ20tZXhwb3J0ZXJcIiBpbiBsYWJlbHMgXCJhcHBcIixcbiMjIFwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50XCIsIG9yIFwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZVwiIHdpdGggYSBjYXNlXG4jIyBpbnNlbnNpdGl2ZSBtYXRjaC5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJkZXBsb3ltZW50QW5ub3RhdGlvbnMiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJzeC1jbnAtb3NzIn0sInNjcmFwZV9pbnRlcnZhbCI6IjFtIiwic2NyYXBlX3RpbWVvdXQiOiI2MHMifSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjZ3IuZGV2L2NoYWluZ3VhcmQvcHJvbWV0aGV1cyIsInRhZyI6ImxhdGVzdCJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ== - name: READ_ONLY value: "false" - name: PROMETHEUS_SERVER_ENDPOINT valueFrom: @@ -144,10 +145,8 @@ - name: ETL_DAILY_STORE_DURATION_DAYS value: "91" - name: ETL_HOURLY_STORE_DURATION_HOURS value: "49" - - name: ETL_WEEKLY_STORE_DURATION_WEEKS - value: "53" - name: ETL_FILE_STORE_ENABLED value: "true" - name: ETL_ASSET_RECONCILIATION_ENABLED value: "true" @@ -184,9 +183,9 @@ - name: WATERFOWL_ENABLED value: "true" - name: DIAGNOSTICS_RUN_IN_COST_MODEL value: "false" - - image: gcr.io/kubecost1/frontend:prod-2.3.5 + - image: gcr.io/kubecost1/frontend:prod-2.4.0 env: - name: GET_HOSTS_FROM value: dns name: cost-analyzer-frontend @@ -199,8 +198,12 @@ readOnlyRootFilesystem: true volumeMounts: - name: tmp mountPath: /tmp + - name: tmp + mountPath: /var/lib/nginx/tmp + - name: tmp + mountPath: /var/run - name: nginx-conf mountPath: /etc/nginx/conf.d/ resources: requests: @@ -230,9 +233,9 @@ drop: - ALL privileged: false readOnlyRootFilesystem: true - image: gcr.io/kubecost1/cost-model:prod-2.3.5 + image: gcr.io/kubecost1/cost-model:prod-2.4.0 readinessProbe: httpGet: path: /healthz port: 9004 @@ -272,17 +275,21 @@ - name: DB_CONCURRENT_INGESTION_COUNT value: "1" - name: ETL_DAILY_STORE_DURATION_DAYS value: "91" + - name: ETL_HOURLY_STORE_DURATION_HOURS + value: "49" + - name: CONTAINER_RESOURCE_USAGE_RETENTION_DAYS + value: "1" - name: DB_TRIM_MEMORY_ON_CLOSE value: "true" - name: KUBECOST_NAMESPACE value: default - name: GRAFANA_ENABLED value: "false" - name: cloud-cost - image: gcr.io/kubecost1/cost-model:prod-2.3.5 + image: gcr.io/kubecost1/cost-model:prod-2.4.0 readinessProbe: httpGet: path: /healthz diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: @@ -82,9 +82,9 @@ add_header Cache-Control "max-age=300"; location / { try_files $uri $uri/ /index.html; } - add_header ETag "2.3.5"; + add_header ETag "2.4.0"; listen 9090; listen [::]:9090; location /api/ { proxy_pass http://api/; @@ -246,8 +246,24 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + location = /model/savings/nodeGroupSizingETL { + proxy_read_timeout 300; + proxy_pass http://aggregator/savings/nodeGroupSizingETL; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/savings/recommendations/allowLists { + proxy_read_timeout 300; + proxy_pass http://aggregator/savings/recommendations/allowLists; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/cloudCost { proxy_read_timeout 300; proxy_pass http://aggregator/cloudCost; proxy_redirect off; @@ -374,16 +390,8 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } - location = /model/reports/advanced { - proxy_read_timeout 300; - proxy_pass http://aggregator/reports/advanced; - proxy_redirect off; - proxy_set_header Connection ""; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } location = /model/reports/cloudCost { proxy_read_timeout 300; proxy_pass http://aggregator/reports/cloudCost; proxy_redirect off; @@ -529,8 +537,48 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + location = /model/collection/configs { + proxy_read_timeout 300; + proxy_pass http://aggregator/collection/configs; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/resources { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/resources; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/resources/timeseries { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/resources/timeseries; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/costs { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/costs; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/costs/timeseries { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/costs/timeseries; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/networkinsights { proxy_read_timeout 300; proxy_pass http://aggregator/networkinsights; proxy_redirect off; @@ -769,8 +817,24 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + location = /model/getIngestionConfig { + proxy_read_timeout 300; + proxy_pass http://aggregator/getIngestionConfig; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/setIngestionConfig { + proxy_read_timeout 300; + proxy_pass http://aggregator/setIngestionConfig; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/enablements { proxy_read_timeout 300; proxy_pass http://aggregator/enablements; proxy_redirect off; @@ -940,8 +1004,51 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + + # alert end points with v2 will be routed to aggregator server + location = /model/v2/alerts { + proxy_read_timeout 300; + proxy_pass http://aggregator/alerts; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location ~* ^/model/v2/alerts/(.*) { + proxy_read_timeout 300; + proxy_pass http://aggregator/alerts/$1; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + # alert end points without any version will be routed to model server + location = /model/alerts { + proxy_read_timeout 300; + proxy_pass http://model/alerts; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location ~* ^/model/alerts/(.*) { + proxy_read_timeout 300; + proxy_pass http://model/alerts/$1; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location ~* ^/model/reports/(.*)/schedule/test { + proxy_read_timeout 300; + proxy_pass http://aggregator/reports/$1/schedule/test; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/hideOrphanedResources { default_type 'application/json'; add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS' always; @@ -991,9 +1098,20 @@ "pluginsEnabled": "false", "carbonEstimatesEnabled": "false", "clusterControllerEnabled": "false", "forecastingEnabled": "true", - "chartVersion": "2.3.5" + "chartVersion": "2.4.0", + "hourlyDataRetention": "49", + "dailyDataRetention": "91", + "hideDiagnostics": "false", + "hideOrphanedResources": "false", + "hideKubecostActions": "false", + "hideReservedInstances": "false", + "hideSpotCommander": "false", + "hideUnclaimedVolumes": "false", + "hideCloudIntegrationsUI": "false", + "hideBellIcon": "false", + "hideTeams": "false" } '; } } diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml 2024-09-17 19:12:34.976809256 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml 2024-09-17 19:13:02.028948073 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,8 +7,8 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-prom-benchmark labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-workload-aggregator labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-workload-metrics labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml 2024-09-17 19:13:01.900947384 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml 2024-09-17 19:12:34.976809256 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -6,8 +6,8 @@ name: smtp-configs namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml 2024-09-17 19:12:34.976809256 +0000 @@ -5,9 +5,9 @@ metadata: name: release-name-forecasting namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: forecasting app.kubernetes.io/instance: release-name app: forecasting @@ -38,9 +38,9 @@ type: RuntimeDefault restartPolicy: Always containers: - name: forecasting - image: gcr.io/kubecost1/kubecost-modeling:v0.1.15 + image: gcr.io/kubecost1/kubecost-modeling:v0.1.16 volumeMounts: - name: tmp mountPath: /tmp securityContext: diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml 2024-09-17 19:12:34.976809256 +0000 @@ -5,9 +5,9 @@ metadata: name: release-name-forecasting namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: forecasting app.kubernetes.io/instance: release-name app: forecasting diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" @@ -621,14 +621,117 @@ ], "timeFrom": "", "title": "CPU throttle percent", "type": "timeseries" + }, + { + "datasource": { + "default": false, + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "NVIDIA GPU usage for this container.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 14 + }, + "id": 100, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.4.7", + "targets": [ + { + "datasource": { + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "DCGM_FI_PROF_GR_ENGINE_ACTIVE{namespace=~\"$namespace\",container=~\"$container\",pod=~\"$pod\"}", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "__auto", + "metric": "container_cpu", + "refId": "A", + "step": 10 + } + ], + "timeFrom": "", + "title": "GPU Usage", + "type": "timeseries" } ], "refresh": "", "revision": 1, - "schemaVersion": 38, - "style": "dark", + "schemaVersion": 39, "tags": [ "kubecost", "utilization", "metrics" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-configmap.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-configmap.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-configmap.yaml 2024-09-17 19:12:34.972809235 +0000 @@ -167,8 +167,22 @@ - names: - release-name-aggregator type: 'A' port: 9004 + ## Enables scraping of NVIDIA GPU metrics via dcgm-exporter. Scrapes all + ## endpoints which contain "dcgm-exporter" in labels "app", + ## "app.kubernetes.io/component", or "app.kubernetes.io/name" with a case + ## insensitive match. + ## Refs: + ## https://github.com/NVIDIA/gpu-operator/blob/d4316a415bbd684ce8416a88042305fc1a093aa4/assets/state-dcgm-exporter/0600_service.yaml#L7 + ## https://github.com/NVIDIA/dcgm-exporter/blob/54fd1ca137c66511a87a720390613680b9bdabdd/deployment/templates/service.yaml#L23 + - job_name: kubecost-dcgm-exporter + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - source_labels: [__meta_kubernetes_pod_label_app, __meta_kubernetes_pod_label_app_kubernetes_io_component, __meta_kubernetes_pod_label_app_kubernetes_io_name] + action: keep + regex: (?i)(.*dcgm-exporter.*|.*dcgm-exporter.*|.*dcgm-exporter.*) recording_rules.yml: | {} rules: | diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-deployment.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-deployment.yaml --- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-deployment.yaml 2024-09-17 19:13:02.032948093 +0000 +++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-deployment.yaml 2024-09-17 19:12:34.976809256 +0000 @@ -20,10 +20,11 @@ strategy: type: Recreate template: metadata: + annotations: + checksum/configs: 42af62fec1204e0dc234dc2db4f0bd19004ab3aa1bc161f1c10c7abe0dfea6d2 labels: - component: "server" app: prometheus release: release-name heritage: Helm @@ -31,9 +32,9 @@ serviceAccountName: release-name-prometheus-server containers: - name: prometheus-server - image: "quay.io/prometheus/prometheus:v2.52.0" + image: "cgr.dev/chainguard/prometheus:latest" imagePullPolicy: "IfNotPresent" args: - --storage.tsdb.retention.time=97h - --config.file=/etc/config/prometheus.yml diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml 2024-09-17 19:13:01.744946545 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -6,9 +6,9 @@ name: release-name-cloud-cost namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: cost-analyzer app.kubernetes.io/instance: release-name app: cost-analyzer diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml 2024-09-17 19:13:01.744946545 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -6,9 +6,9 @@ name: release-name-aggregator namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app: aggregator spec: selector: diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml 2024-09-17 19:13:01.744946545 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer roleRef: @@ -28,9 +28,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer roleRef: diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml 2024-09-17 19:13:01.744946545 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer rules: @@ -92,9 +92,9 @@ name: release-name-cost-analyzer labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer rules: diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: ```
github-actions[bot] commented 2 weeks ago
Changes Default Values ```diff diff -U 4 -r out-default-values/target/kubecost_default-values.out out-default-values/pr/kubecost_default-values.out --- out-default-values/target/kubecost_default-values.out 2024-09-17 19:13:02.076948330 +0000 +++ out-default-values/pr/kubecost_default-values.out 2024-09-17 19:12:35.016809476 +0000 @@ -62,8 +62,29 @@ # basicAuth: # username: user # password: pwd + # Azure Monitor Managed Service for Prometheus + # See https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/azure-monitor/essentials/prometheus-metrics-overview.md for information + # and https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/prometheus-remote-write-virtual-machines for more information on setting this up + ammsp: + enabled: false + prometheusServerEndpoint: http://localhost:8081/ + remoteWriteService: $ + queryEndpoint: $ + + aadAuthProxy: + enabled: false + # per https://github.com/Azure/aad-auth-proxy/releases/tag/0.1.0-main-04-10-2024-7067ac84 + image: $ # Example: mcr.microsoft.com/azuremonitor/auth-proxy/prod/aad-auth-proxy/images/aad-auth-proxy:0.1.0-main-04-10-2024-7067ac84 + imagePullPolicy: IfNotPresent + name: aad-auth-proxy + port: 8081 + audience: https://prometheus.monitor.azure.com/.default + identityType: userAssigned + aadClientId: $ + aadTenantId: $ + notifications: # Kubecost alerting configuration # Ref: http://docs.kubecost.com/alerts # alertConfigs: @@ -177,23 +198,8 @@ filters: - property: "cluster" value: "cluster-one" - # Set saved Advanced report(s) accessible from /reports - # Ref: http://docs.kubecost.com/saved-reports - advancedReports: - enabled: false # If true, overwrites report parameters set through UI - reports: - - title: "Example Advanced Report 0" - window: "7d" - aggregateBy: "namespace" - filters: # same as allocation api filters Ref: https://docs.kubecost.com/apis/filters-api - - key: "cluster" # Ref: https://docs.kubecost.com/apis/filters-api#allocation-apis-request-sizing-v2-api - operator: ":" # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators - value: "dev" - cloudBreakdown: "service" - cloudJoin: "label:kubernetes_namespace" - # Set saved Cloud Cost report(s) accessible from /reports # Ref: http://docs.kubecost.com/saved-reports cloudCostReports: enabled: false # If true, overwrites report parameters set through UI @@ -553,13 +559,11 @@ # fullImageName overrides the default image construction logic. The exact # image provided (registry, image, tag) will be used for cost-model. # fullImageName: - # extraEnv: - # - name: SOME_VARIABLE - # value: "some_value" # securityContext: # readOnlyRootFilesystem: true + # Build local cost allocation cache warmCache: false # Run allocation ETL pipelines etl: true @@ -568,24 +572,58 @@ # The total number of days the ETL pipelines will build # Set to 0 to disable daily ETL (not recommended) etlDailyStoreDurationDays: 91 # The total number of hours the ETL pipelines will build - # Set to 0 to disable hourly ETL (not recommended) + # Set to 0 to disable hourly ETL (recommended for large environments) # Must be < prometheus server retention, otherwise empty data may overwrite # known-good data etlHourlyStoreDurationHours: 49 - # The total number of weeks the ETL pipelines will build - # Set to 0 to disable weekly ETL (not recommended) - # The default is 53 to ensure at least a year of coverage (371 days) - etlWeeklyStoreDurationWeeks: 53 # For deploying kubecost in a cluster that does not self-monitor etlReadOnlyMode: false - # The name of the Secret containing a bucket config for ETL backup. - # etlBucketConfigSecret: - # The name of the Secret containing a bucket config for Federated storage. The contents should be stored - # under a key named federated-store.yaml. - # federatedStorageConfigSecret: "" + ## The name of the Secret containing a bucket config for Federated storage. + ## The contents should be stored under a key named federated-store.yaml. + ## Ref: https://docs.kubecost.com/install-and-configure/install/multi-cluster/long-term-storage-configuration + # federatedStorageConfigSecret: federated-store + + ## Federated storage config can be supplied via a secret or the yaml block + ## below when using the block below, only a single provider is supported, + ## others are for example purposes. + ## Ref: https://docs.kubecost.com/install-and-configure/install/multi-cluster/long-term-storage-configuration + # federatedStorageConfig: |- + # # AWS EXAMPLE + # type: S3 + # config: + # bucket: kubecost-federated-storage-bucket + # endpoint: s3.amazonaws.com + # region: us-east-1 + # # best practice is to use pod identities to access AWS resources. Otherwise it is possible to use an access_key and secret_key + # access_key: "" + # secret_key: "" + # # AZURE EXAMPLE + # type: AZURE + # config: + # storage_account: "" + # storage_account_key: "" + # container: "" + # max_retries: 0 + # # GCP EXAMPLE + # type: GCS + # config: + # bucket: kubecost-federated-storage-bucket + # service_account: |- + # { + # "type": "service_account", + # "project_id": "...", + # "private_key_id": "...", + # "private_key": "...", + # "client_email": "...", + # "client_id": "...", + # "auth_uri": "https://accounts.google.com/o/oauth2/auth", + # "token_uri": "https://oauth2.googleapis.com/token", + # "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + # "client_x509_cert_url": "" + # } # Installs Kubecost/OpenCost plugins plugins: enabled: false @@ -673,13 +711,18 @@ failureThreshold: 200 extraArgs: [] # Optional. A list of extra environment variables to be added to the cost-model container. - # extraEnv: [] - # - name: LOG_LEVEL - # value: trace - # - name: LOG_FORMAT - # value: json + # extraEnv: + # - name: LOG_LEVEL + # value: trace + # - name: LOG_FORMAT + # value: json + # # When false, Kubecost will not show Asset costs for local disks physically + # # attached to nodes (e.g. ephemeral storage). This needs to be applied to + # # each cluster monitored. + # - name: ASSET_INCLUDE_LOCAL_DISK_COST + # value: "true" # creates an ingress directly to the model container, for API access ingress: enabled: false @@ -705,9 +748,13 @@ # port: 40000 # targetPort: 40000 # containerPort: 40000 -# etlUtils is a utility currently used by Kubecost internal support to implement specific functionality related to Thanos conversion. +## etlUtils is a utility typically used by Enterprise customers transitioning +## from v1 to v2 of Kubecost. It translates the data from the "/etl" dir of the +## bucket, to the "/federated" dir of the bucket. +## Ref: https://docs.kubecost.com/install-and-configure/install/multi-cluster/federated-etl/thanos-migration-guide +## etlUtils: enabled: false fullImageName: null resources: {} @@ -889,8 +936,23 @@ port: 9008 {{- else }} port: 9004 {{- end }} + ## Enables scraping of NVIDIA GPU metrics via dcgm-exporter. Scrapes all + ## endpoints which contain "dcgm-exporter" in labels "app", + ## "app.kubernetes.io/component", or "app.kubernetes.io/name" with a case + ## insensitive match. + ## Refs: + ## https://github.com/NVIDIA/gpu-operator/blob/d4316a415bbd684ce8416a88042305fc1a093aa4/assets/state-dcgm-exporter/0600_service.yaml#L7 + ## https://github.com/NVIDIA/dcgm-exporter/blob/54fd1ca137c66511a87a720390613680b9bdabdd/deployment/templates/service.yaml#L23 + - job_name: kubecost-dcgm-exporter + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - source_labels: [__meta_kubernetes_pod_label_app, __meta_kubernetes_pod_label_app_kubernetes_io_component, __meta_kubernetes_pod_label_app_kubernetes_io_name] + action: keep + regex: (?i)(.*dcgm-exporter.*|.*dcgm-exporter.*|.*dcgm-exporter.*) + server: # If clusterIDConfigmap is defined, instead use user-generated configmap with key CLUSTER_ID # to use as unique cluster ID in kubecost cost-analyzer deployment. # This overrides the cluster_id set in prometheus.server.global.external_labels. @@ -911,10 +973,10 @@ ## Prometheus server container image ## image: - repository: quay.io/prometheus/prometheus - tag: v2.52.0 + repository: cgr.dev/chainguard/prometheus + tag: latest pullPolicy: IfNotPresent ## prometheus server priorityClassName ## @@ -1322,10 +1384,10 @@ ## alertmanager container image ## image: - repository: quay.io/prometheus/alertmanager - tag: v0.27.0 + repository: cgr.dev/chainguard/prometheus-alertmanager + tag: latest pullPolicy: IfNotPresent ## alertmanager priorityClassName ## @@ -1608,10 +1670,10 @@ ## configmap-reload container image ## image: - repository: quay.io/prometheus-operator/prometheus-config-reloader - tag: v0.74.0 + repository: cgr.dev/chainguard/prometheus-config-reloader + tag: latest pullPolicy: IfNotPresent ## Additional configmap-reload container arguments ## @@ -1648,10 +1710,10 @@ ## configmap-reload container image ## image: - repository: quay.io/prometheus-operator/prometheus-config-reloader - tag: v0.74.0 + repository: cgr.dev/chainguard/prometheus-config-reloader + tag: latest pullPolicy: IfNotPresent ## Additional configmap-reload container arguments ## @@ -1705,9 +1767,9 @@ ## node-exporter container image ## image: repository: prom/node-exporter - tag: v1.8.0 + tag: v1.8.2 pullPolicy: IfNotPresent ## node-exporter priorityClassName ## @@ -1832,9 +1894,9 @@ ## pushgateway container image ## image: repository: prom/pushgateway - tag: v1.8.0 + tag: v1.9.0 pullPolicy: IfNotPresent ## pushgateway priorityClassName ## @@ -2256,9 +2318,9 @@ networkCosts: enabled: false image: repository: gcr.io/kubecost1/kubecost-network-costs - tag: v0.17.3 + tag: v0.17.6 imagePullPolicy: IfNotPresent updateStrategy: type: RollingUpdate # For existing Prometheus Installs, use the serviceMonitor: or prometheusScrape below. @@ -2414,9 +2476,9 @@ # fullImageName overrides the default image construction logic. The exact # image provided (registry, image, tag) will be used for the forecasting # container. # Example: fullImageName: gcr.io/kubecost1/forecasting:v0.0.1 - fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.15 + fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.16 imagePullPolicy: IfNotPresent # Resource specification block for the forecasting container. resources: @@ -2460,11 +2522,10 @@ initialDelaySeconds: 10 periodSeconds: 10 failureThreshold: 200 -## The Kubecost Aggregator is a high scale implementation of Kubecost intended -## for large datasets and/or high query load. At present, this should only be -## enabled when recommended by Kubecost staff. +## The Kubecost Aggregator is the primary query backend for Kubecost +## Ref: https://docs.kubecost.com/install-and-configure/install/multi-cluster/federated-etl/aggregator ## kubecostAggregator: # deployMethod determines how Aggregator is deployed. Current options are # "singlepod" (within cost-analyzer Pod) "statefulset" (separate @@ -2480,13 +2541,14 @@ # For legacy configuration support, `enabled: true` overrides deployMethod # and causes `deployMethod: "statefulset"` enabled: false - # the below settings should only be modified with support from Kubecost staff # Replicas sets the number of Aggregator replicas. It only has an effect if # `deployMethod: "statefulset"` replicas: 1 + logLevel: info + # stagingEmptyDirSizeLimit changes how large the "staging" # /var/configs/waterfowl emptyDir is. It only takes effect in StatefulSet # configurations of Aggregator, other configurations are unaffected. # @@ -2503,24 +2565,20 @@ # the default of 25 is sufficient for 95%+ of users. This should only be modified # after consulting with Kubecost's support team numDBCopyPartitions: 25 - # env: has been removed to avoid unknown issues that would be caused by - # customizations that were required to run aggregator in previous versions - # extraEnv: can be used to add new environment variables to the aggregator pod - - logLevel: info - # How many threads the read database is configured with (i.e. Kubecost API / # UI queries). If increasing this value, it is recommended to increase the # aggregator's memory requests & limits. # default: 1 dbReadThreads: 1 + # How many threads the write database is configured with (i.e. ingestion of # new data from S3). If increasing this value, it is recommended to increase # the aggregator's memory requests & limits. # default: 1 dbWriteThreads: 1 + # How many threads to use when ingesting Asset/Allocation/CloudCost data # from the federated store bucket. In most cases the default is sufficient, # but can be increased if trying to backfill historical data. # default: 1 @@ -2532,11 +2590,10 @@ # such that dbMemoryLimit + dbWriteMemoryLimit < the total memory available # to the aggregator pod. # default: 0GB is no limit dbMemoryLimit: 0GB - # Memory limit applied to write database connections. - # default: 0GB is no limit dbWriteMemoryLimit: 0GB + # How much data to ingest from the federated store bucket, and how much data # to keep in the DB before rolling the data off. # # Note: If increasing this value to backfill historical data, it will take @@ -2545,8 +2602,26 @@ # refresh and concurrency env vars. # # default: 91 etlDailyStoreDurationDays: 91 + + # How much hourly data to ingest from the federated store bucket, and how much + # to keep in the DB before rolling the data off. + # + # In high scale environments setting this to `0` can improve performance if hourly + # resolution is not a requirement. + # + # default: 49 + etlHourlyStoreDurationHours: 49 + + # How much container resource usage data to retain in the DB, in terms of days. + # + # In high scale environments setting this to `0` can improve performance if hourly + # resolution is not a requirement. + # + # default: 1 + containerResourceUsageRetentionDays: 1 + # Trim memory on close, only change if advised by Kubecost support. dbTrimMemoryOnClose: true persistentConfigsStorage: @@ -2664,13 +2739,16 @@ image: jaegertracing/all-in-one imageVersion: latest # containerSecurityContext: + service: + labels: {} + ## Kubecost Multi-cluster Diagnostics (beta) ## A single view into the health of all agent clusters. Each agent cluster sends ## its diagnostic data to a storage bucket. Future versions may include ## repairing & alerting from the primary. -## Ref: https://docs.kubecost.com/install-and-configure/install/multi-cluster-diagnostics +## Ref: https://docs.kubecost.com/install-and-configure/install/multi-cluster/multi-cluster-diagnostics ## diagnostics: enabled: true @@ -2717,9 +2795,9 @@ clusterController: enabled: false image: repository: gcr.io/kubecost1/cluster-controller - tag: v0.16.8 + tag: v0.16.9 imagePullPolicy: IfNotPresent ## PriorityClassName ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass priorityClassName: "" @@ -2931,10 +3009,10 @@ failureThreshold: 10 ## Container image settings for the Grafana deployment image: - repository: grafana/grafana - tag: 11.1.4 + repository: cgr.dev/chainguard/grafana + tag: latest pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -2968,9 +3046,12 @@ port: 80 annotations: {} labels: {} - ## Ingress service for the Grafana deployment + ## This template is not needed and is not supported. + ## It is here for backwards compatibility. + ## Kubecost exposes grafana by default with the + ## top level ingress template under /grafana/ ingress: enabled: false annotations: {} # kubernetes.io/ingress.class: nginx @@ -3125,10 +3206,10 @@ ## Grafana sidecars that collect the configmaps with specified label and stores the included files them into the respective folders ## Requires at least Grafana 5 to work and can't be used together with parameters dashboardProviders, datasources and dashboards sidecar: image: - repository: kiwigrid/k8s-sidecar - tag: 1.27.2 + repository: cgr.dev/chainguard/k8s-sidecar + tag: latest pullPolicy: IfNotPresent resources: {} dashboards: enabled: true @@ -3339,8 +3420,9 @@ # azureClientPassword: fake key # Only use if your values.yaml are stored encrypted. Otherwise provide an existing secret via serviceKeySecretName # azureOfferDurableID: "MS-AZR-0003p" # discount: "" # percentage discount applied to compute # negotiatedDiscount: "" # custom negotiated cloud provider discount +# standardDiscount: "" # custom negotiated cloud provider discount, applied to all incoming asset compute costs in a federated environment. Overrides negotiatedDiscount on any cluster in the federated environment. # defaultIdle: false # serviceKeySecretName: "" # Use an existing AWS or Azure secret with format as in aws-service-key-secret.yaml or azure-service-key-secret.yaml. Leave blank if using createServiceKeySecret # createServiceKeySecret: true # Creates a secret representing your cloud service key based on data in values.yaml. If you are storing unencrypted values, add a secret manually # sharedNamespaces: "" # namespaces with shared workloads, example value: "kube-system\,ingress-nginx\,kubecost\,monitoring" @@ -3367,8 +3449,22 @@ # } # secretname: smtpconfigsecret # Reference an existing k8s secret created from a file named smtp.json of format specified by config above. If the secretname is specified, a configmap with the key will not be created. # mountPath: "/some/custom/path/smtp.json" # (use instead of secretname) Declare the path at which the SMTP config file is mounted (eg. by a secrets provisioner). The file must be of format specified by config above. # carbonEstimates: false # Enables Kubecost beta carbon estimation endpoints /assets/carbon and /allocations/carbon +# The below options to hide UI elements are only supported in Enterprise +# hideDiagnostics: false # useful if the primary is not monitored. Supported in limited environments. +# hideOrphanedResources: false # OrphanedResources works on the primary-cluster's cloud-provider only. +# hideKubecostActions: false +# hideReservedInstances: false +# hideSpotCommander: false +# hideUnclaimedVolumes: false +# hideCloudIntegrationsUI: false +# hideBellIcon: false +# hideTeams: false +# savingsRecommendationsAllowLists: # Define select list of instance types to be evaluated in computing Savings Recommendations +# AWS: [] +# GCP: [] +# Azure: [] ## Specify an existing Kubernetes Secret holding the cloud integration information. This Secret must contain ## a key with name `cloud-integration.json` and the contents must be in a specific format. It is expected ## to exist in the release Namespace. This is mutually exclusive with cloudIntegrationJSON where only one must be defined. ```
github-actions[bot] commented 2 weeks ago
Changes Rendered Chart ```diff diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml 2024-09-17 19:13:01.744946545 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: @@ -28,9 +28,10 @@ labels: app.kubernetes.io/name: cost-analyzer app.kubernetes.io/instance: release-name app: cost-analyzer - + annotations: + checksum/configs: 42af62fec1204e0dc234dc2db4f0bd19004ab3aa1bc161f1c10c7abe0dfea6d2 spec: securityContext: fsGroup: 1001 fsGroupChangePolicy: OnRootMismatch @@ -54,9 +55,9 @@ persistentVolumeClaim: claimName: release-name-cost-analyzer initContainers: containers: - - image: gcr.io/kubecost1/cost-model:prod-2.3.5 + - image: gcr.io/kubecost1/cost-model:prod-2.4.0 name: cost-model securityContext: allowPrivilegeEscalation: false capabilities: @@ -96,9 +97,9 @@ env: - name: GRAFANA_ENABLED value: "false" - name: HELM_VALUES - value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTUiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMS40In0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6Imtpd2lncmlkL2s4cy1zaWRlY2FyIiwidGFnIjoiMS4yNy4yIn0sInJlc291cmNlcyI6e319LCJzbXRwIjp7ImV4aXN0aW5nU2VjcmV0IjoiIn0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiYW5ub3RhdGlvbnMiOnsiY2VydC1tYW5hZ2VyLmlvL2NsdXN0ZXItaXNzdWVyIjoibGV0c2VuY3J5cHQtc3RhZ2luZyJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwicGF0aFR5cGUiOiJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwicGF0aHMiOlsiLyJdLCJ0bHMiOlt7Imhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwic2VjcmV0TmFtZSI6Imt1YmVjb3N0LXNlcnZlci10bHMifV19LCJpbml0Q2hvd25EYXRhIjp7InJlc291cmNlcyI6e319LCJpbml0Q2hvd25EYXRhSW1hZ2UiOiJidXN5Ym94Iiwia3ViZWNvc3REZXBsb3ltZW50Ijp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwicmVwbGljYXMiOjF9LCJrdWJlY29zdEZyb250ZW5kIjp7ImRlcGxveU1ldGhvZCI6InNpbmdsZXBvZCIsImRlcGxveW1lbnRTdHJhdGVneSI6e30sImVuYWJsZWQiOnRydWUsImhhUmVwbGljYXMiOjIsImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9mcm9udGVuZCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImlwdjYiOnsiZW5hYmxlZCI6dHJ1ZX0sImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMTBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXNlRGVmYXVsdEZxZG4iOmZhbHNlfSwia3ViZWNvc3RNZXRyaWNzIjp7fSwia3ViZWNvc3RNb2RlbCI6eyJjb250YWluZXJTdGF0c0VuYWJsZWQiOnRydWUsImV0bCI6dHJ1ZSwiZXRsRGFpbHlTdG9yZUR1cmF0aW9uRGF5cyI6OTEsImV0bEZpbGVTdG9yZUVuYWJsZWQiOnRydWUsImV0bEhvdXJseVN0b3JlRHVyYXRpb25Ib3VycyI6NDksImV0bFJlYWRPbmx5TW9kZSI6ZmFsc2UsImV0bFdlZWtseVN0b3JlRHVyYXRpb25XZWVrcyI6NTMsImV4dHJhQXJncyI6W10sImV4dHJhUG9ydHMiOltdLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvY29zdC1tb2RlbCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJtYXhRdWVyeUNvbmN1cnJlbmN5Ijo1LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIyMDBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXRjT2Zmc2V0IjoiKzAwOjAwIiwid2FybUNhY2hlIjpmYWxzZX0sImt1YmVjb3N0UHJvZHVjdENvbmZpZ3MiOnsiY2x1c3Rlck5hbWUiOiJzeC1jbnAtb3NzIERlbW8iLCJjbHVzdGVyUHJvZmlsZSI6ImRldmVsb3BtZW50IiwiY3VycmVuY3lDb2RlIjoiRVVSIiwiY3VzdG9tUHJpY2VzRW5hYmxlZCI6dHJ1ZSwiZGVmYXVsdE1vZGVsUHJpY2luZyI6eyJDUFUiOiIyOC4wIiwiR1BVIjoiNjkzLjUwIiwiUkFNIjoiMy4wOSIsImVuYWJsZWQiOnRydWUsImludGVybmV0TmV0d29ya0VncmVzcyI6IjAuMTIiLCJyZWdpb25OZXR3b3JrRWdyZXNzIjoiMC4wMSIsInNwb3RDUFUiOiI0Ljg2Iiwic3BvdEdQVSI6IjIyNS4wIiwic3BvdFJBTSI6IjAuNjUiLCJzdG9yYWdlIjoiMC4wNCIsInpvbmVOZXR3b3JrRWdyZXNzIjoiMC4wMSJ9fSwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhbm5vdGF0aW9ucyI6e30sImRiUFZFbmFibGVkIjpmYWxzZSwiZGJTaXplIjoiNUdpIiwiZW5hYmxlZCI6dHJ1ZSwibGFiZWxzIjp7fSwic2l6ZSI6IjVHaSJ9LCJwcm9tZXRoZXVzIjp7ImFsZXJ0bWFuYWdlckZpbGVzIjp7ImFsZXJ0bWFuYWdlci55bWwiOnsiZ2xvYmFsIjp7fSwicmVjZWl2ZXJzIjpbeyJuYW1lIjoiZGVmYXVsdC1yZWNlaXZlciJ9XSwicm91dGUiOnsiZ3JvdXBfaW50ZXJ2YWwiOiI1bSIsImdyb3VwX3dhaXQiOiIxMHMiLCJyZWNlaXZlciI6ImRlZmF1bHQtcmVjZWl2ZXIiLCJyZXBlYXRfaW50ZXJ2YWwiOiIzaCJ9fX0sImNvbmZpZ21hcFJlbG9hZCI6e30sImV4dHJhU2NyYXBlQ29uZmlncyI6Ii0gam9iX25hbWU6IGt1YmVjb3N0XG4gIGhvbm9yX2xhYmVsczogdHJ1ZVxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImNvc3QtYW5hbHl6ZXIuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAgcG9ydDogOTAwM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtbmV0d29ya2luZ1xuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBwb2RcbiAgcmVsYWJlbF9jb25maWdzOlxuICAjIFNjcmFwZSBvbmx5IHRoZSB0aGUgdGFyZ2V0cyBtYXRjaGluZyB0aGUgZm9sbG93aW5nIG1ldGFkYXRhXG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2luc3RhbmNlXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIGt1YmVjb3N0XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAgbmV0d29yay1jb3N0c1xuLSBqb2JfbmFtZToga3ViZWNvc3QtYWdncmVnYXRvclxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImFnZ3JlZ2F0b3Iuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAge3stIGlmIG9yIC5WYWx1ZXMuc2FtbC5lbmFibGVkIC5WYWx1ZXMub2lkYy5lbmFibGVkIH19XG4gICAgcG9ydDogOTAwOFxuICAgIHt7LSBlbHNlIH19XG4gICAgcG9ydDogOTAwNFxuICAgIHt7LSBlbmQgfX1cbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJkZXBsb3ltZW50QW5ub3RhdGlvbnMiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJzeC1jbnAtb3NzIn0sInNjcmFwZV9pbnRlcnZhbCI6IjFtIiwic2NyYXBlX3RpbWVvdXQiOiI2MHMifSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJxdWF5LmlvL3Byb21ldGhldXMvcHJvbWV0aGV1cyIsInRhZyI6InYyLjUyLjAifSwibGl2ZW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsImxpdmVuZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsImxpdmVuZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJsaXZlbmVzc1Byb2JlVGltZW91dCI6MywibmFtZSI6InNlcnZlciIsIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYWNjZXNzTW9kZXMiOlsiUmVhZFdyaXRlT25jZSJdLCJhbm5vdGF0aW9ucyI6e30sImVuYWJsZWQiOnRydWUsImV4aXN0aW5nQ2xhaW0iOiIiLCJtb3VudFBhdGgiOiIvZGF0YSIsInNpemUiOiIzMkdpIiwic3ViUGF0aCI6IiJ9LCJwb2RBbm5vdGF0aW9ucyI6e30sInBvZExhYmVscyI6e30sInByZWZpeFVSTCI6IiIsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmVhZGluZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJyZWFkaW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwicmVhZGluZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJyZWFkaW5lc3NQcm9iZVRpbWVvdXQiOjMsInJlbW90ZVJlYWQiOnt9LCJyZW1vdGVXcml0ZSI6e30sInJlcGxpY2FDb3VudCI6MSwicmVzb3VyY2VzIjp7fSwicmV0ZW50aW9uIjoiOTdoIiwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImNsdXN0ZXJJUCI6IiIsImV4dGVybmFsSVBzIjpbXSwibGFiZWxzIjp7fSwibG9hZEJhbGFuY2VySVAiOiIiLCJsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMiOltdLCJzZXJ2aWNlUG9ydCI6ODAsInNlc3Npb25BZmZpbml0eSI6Ik5vbmUiLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAwLCJ0b2xlcmF0aW9ucyI6W119LCJzZXJ2ZXJGaWxlcyI6eyJhbGVydGluZ19ydWxlcy55bWwiOnt9LCJhbGVydHMiOnt9LCJwcm9tZXRoZXVzLnltbCI6eyJydWxlX2ZpbGVzIjpbIi9ldGMvY29uZmlnL3JlY29yZGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9hbGVydGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9ydWxlcyIsIi9ldGMvY29uZmlnL2FsZXJ0cyJdLCJzY3JhcGVfY29uZmlncyI6W3siam9iX25hbWUiOiJwcm9tZXRoZXVzIiwic3RhdGljX2NvbmZpZ3MiOlt7InRhcmdldHMiOlsibG9jYWxob3N0OjkwOTAiXX1dfSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzLWNhZHZpc29yIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9zcGVjX2NwdV9zaGFyZXN8Y29udGFpbmVyX3NwZWNfbWVtb3J5X2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y2Fkdmlzb3JfdmVyc2lvbl9pbmZvfGt1YmVjb3N0X3B2X2luZm8pIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbImNvbnRhaW5lciJdLCJ0YXJnZXRfbGFiZWwiOiJjb250YWluZXJfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsicG9kIl0sInRhcmdldF9sYWJlbCI6InBvZF9uYW1lIn1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MvY2Fkdmlzb3IiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoa3ViZWxldF92b2x1bWVfc3RhdHNfdXNlZF9ieXRlcykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImpvYl9uYW1lIjoia3ViZXJuZXRlcy1zZXJ2aWNlLWVuZHBvaW50cyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6ImVuZHBvaW50cyJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbnxjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2dwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlc3xjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxEQ0dNX0ZJX0RFVl9HUFVfVVRJTHxkZXBsb3ltZW50X21hdGNoX2xhYmVsc3xrdWJlX2RhZW1vbnNldF9zdGF0dXNfZGVzaXJlZF9udW1iZXJfc2NoZWR1bGVkfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19udW1iZXJfcmVhZHl8a3ViZV9kZXBsb3ltZW50X3NwZWNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzX2F2YWlsYWJsZXxrdWJlX2pvYl9zdGF0dXNfZmFpbGVkfGt1YmVfbmFtZXNwYWNlX2Fubm90YXRpb25zfGt1YmVfbmFtZXNwYWNlX2xhYmVsc3xrdWJlX25vZGVfaW5mb3xrdWJlX25vZGVfbGFiZWxzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGV8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eXxrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NvbmRpdGlvbnxrdWJlX3BlcnNpc3RlbnR2b2x1bWVfY2FwYWNpdHlfYnl0ZXN8a3ViZV9wZXJzaXN0ZW50dm9sdW1lX3N0YXR1c19waGFzZXxrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9pbmZvfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX3Jlc291cmNlX3JlcXVlc3RzX3N0b3JhZ2VfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX2luZm98a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcmVzdGFydHNfdG90YWx8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19ydW5uaW5nfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfdGVybWluYXRlZF9yZWFzb258a3ViZV9wb2RfbGFiZWxzfGt1YmVfcG9kX293bmVyfGt1YmVfcG9kX3N0YXR1c19waGFzZXxrdWJlX3JlcGxpY2FzZXRfb3duZXJ8a3ViZV9zdGF0ZWZ1bHNldF9yZXBsaWNhc3xrdWJlX3N0YXRlZnVsc2V0X3N0YXR1c19yZXBsaWNhc3xrdWJlY29zdF9jbHVzdGVyX2luZm98a3ViZWNvc3RfY2x1c3Rlcl9tYW5hZ2VtZW50X2Nvc3R8a3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8a3ViZWNvc3RfbG9hZF9iYWxhbmNlcl9jb3N0fGt1YmVjb3N0X25ldHdvcmtfaW50ZXJuZXRfZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19yZWdpb25fZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya196b25lX2VncmVzc19jb3N0fGt1YmVjb3N0X25vZGVfaXNfc3BvdHxrdWJlY29zdF9wb2RfbmV0d29ya19lZ3Jlc3NfYnl0ZXNfdG90YWx8bm9kZV9jcHVfaG91cmx5X2Nvc3R8bm9kZV9jcHVfc2Vjb25kc190b3RhbHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWRfdG90YWx8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWR8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWRfdG90YWx8bm9kZV9maWxlc3lzdGVtX2RldmljZV9lcnJvcnxub2RlX2dwdV9jb3VudHxub2RlX2dwdV9ob3VybHlfY29zdHxub2RlX21lbW9yeV9CdWZmZXJzX2J5dGVzfG5vZGVfbWVtb3J5X0NhY2hlZF9ieXRlc3xub2RlX21lbW9yeV9NZW1BdmFpbGFibGVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtRnJlZV9ieXRlc3xub2RlX21lbW9yeV9NZW1Ub3RhbF9ieXRlc3xub2RlX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8bm9kZV9yYW1faG91cmx5X2Nvc3R8bm9kZV90b3RhbF9ob3VybHlfY29zdHxwb2RfcHZjX2FsbG9jYXRpb258cHZfaG91cmx5X2Nvc3R8c2VydmljZV9zZWxlY3Rvcl9sYWJlbHN8c3RhdGVmdWxTZXRfbWF0Y2hfbGFiZWxzfGt1YmVjb3N0X3B2X2luZm98dXApIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4Ijp0cnVlLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjcmFwZSJdfSx7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IiguKm5vZGUtZXhwb3J0ZXJ8a3ViZWNvc3QtbmV0d29yay1jb3N0cykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX2VuZHBvaW50c19uYW1lIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKGh0dHBzPykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjaGVtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX3NjaGVtZV9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wYXRoIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihbXjpdKykoPzo6XFxkKyk/OyhcXGQrKSIsInJlcGxhY2VtZW50IjoiJDE6JDIiLCJzb3VyY2VfbGFiZWxzIjpbIl9fYWRkcmVzc19fIiwiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydCJdLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsiYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbGFiZWxfKC4rKSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbmFtZXNwYWNlIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZXNwYWNlIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19wb2Rfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbm9kZSJ9XX1dfSwicmVjb3JkaW5nX3J1bGVzLnltbCI6e30sInJ1bGVzIjp7Imdyb3VwcyI6W3sibmFtZSI6IkNQVSIsInJ1bGVzIjpbeyJleHByIjoic3VtKHJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZTpyYXRlNW0ifSx7ImV4cHIiOiJyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZV9ub3N1bTpyYXRlNW0ifSx7ImV4cHIiOiJhdmcoaXJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJQT0RcIiwgY29udGFpbmVyIT1cIlwifVs1bV0pKSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX2NwdV91c2FnZV9pcmF0ZSJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSIsInJlY29yZCI6Imt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn1dfSx7Im5hbWUiOiJTYXZpbmdzIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9XX1dfX0sInNlcnZpY2VBY2NvdW50cyI6eyJhbGVydG1hbmFnZXIiOnsiY3JlYXRlIjp0cnVlfSwibm9kZUV4cG9ydGVyIjp7ImNyZWF0ZSI6dHJ1ZX0sInB1c2hnYXRld2F5Ijp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX19fSwicmVwb3J0aW5nIjp7ImVycm9yUmVwb3J0aW5nIjp0cnVlLCJsb2dDb2xsZWN0aW9uIjp0cnVlLCJwcm9kdWN0QW5hbHl0aWNzIjp0cnVlLCJ2YWx1ZXNSZXBvcnRpbmciOnRydWV9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwibm9kZVBvcnQiOnt9LCJwb3J0Ijo5MDkwLCJ0YXJnZXRQb3J0Ijo5MDkwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0= + value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiY2dyLmRldi9jaGFpbmd1YXJkL2dyYWZhbmEiLCJ0YWciOiJsYXRlc3QifSwibGRhcCI6eyJjb25maWciOiIiLCJleGlzdGluZ1NlY3JldCI6IiJ9LCJsaXZlbmVzc1Byb2JlIjp7ImZhaWx1cmVUaHJlc2hvbGQiOjEwLCJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9LCJpbml0aWFsRGVsYXlTZWNvbmRzIjo2MCwidGltZW91dFNlY29uZHMiOjMwfSwibmFtZXNwYWNlX2Rhc2hib2FyZHMiOiJrdWJlY29zdCIsIm5hbWVzcGFjZV9kYXRhc291cmNlcyI6Imt1YmVjb3N0Iiwibm9kZVNlbGVjdG9yIjp7fSwicGx1Z2lucyI6W10sInBvZEFubm90YXRpb25zIjp7fSwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInJlYWRpbmVzc1Byb2JlIjp7Imh0dHBHZXQiOnsicGF0aCI6Ii9hcGkvaGVhbHRoIiwicG9ydCI6MzAwMH19LCJyZXBsaWNhcyI6MSwicmVzb3VyY2VzIjp7fSwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInBvcnQiOjgwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImNyZWF0ZSI6dHJ1ZSwibmFtZSI6IiJ9LCJzaWRlY2FyIjp7ImRhc2hib2FyZHMiOnsiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlcnJvcl90aHJvdHRsZV9zbGVlcCI6MCwiZm9sZGVyIjoiL3RtcC9kYXNoYm9hcmRzIiwibGFiZWwiOiJncmFmYW5hX2Rhc2hib2FyZCIsImxhYmVsVmFsdWUiOiIxIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiY2dyLmRldi9jaGFpbmd1YXJkL2s4cy1zaWRlY2FyIiwidGFnIjoibGF0ZXN0In0sInJlc291cmNlcyI6e319LCJzbXRwIjp7ImV4aXN0aW5nU2VjcmV0IjoiIn0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiYW5ub3RhdGlvbnMiOnsiY2VydC1tYW5hZ2VyLmlvL2NsdXN0ZXItaXNzdWVyIjoibGV0c2VuY3J5cHQtc3RhZ2luZyJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwicGF0aFR5cGUiOiJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwicGF0aHMiOlsiLyJdLCJ0bHMiOlt7Imhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwic2VjcmV0TmFtZSI6Imt1YmVjb3N0LXNlcnZlci10bHMifV19LCJpbml0Q2hvd25EYXRhIjp7InJlc291cmNlcyI6e319LCJpbml0Q2hvd25EYXRhSW1hZ2UiOiJidXN5Ym94Iiwia3ViZWNvc3REZXBsb3ltZW50Ijp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwicmVwbGljYXMiOjF9LCJrdWJlY29zdEZyb250ZW5kIjp7ImRlcGxveU1ldGhvZCI6InNpbmdsZXBvZCIsImRlcGxveW1lbnRTdHJhdGVneSI6e30sImVuYWJsZWQiOnRydWUsImhhUmVwbGljYXMiOjIsImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9mcm9udGVuZCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImlwdjYiOnsiZW5hYmxlZCI6dHJ1ZX0sImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMTBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXNlRGVmYXVsdEZxZG4iOmZhbHNlfSwia3ViZWNvc3RNZXRyaWNzIjp7fSwia3ViZWNvc3RNb2RlbCI6eyJjb250YWluZXJTdGF0c0VuYWJsZWQiOnRydWUsImV0bCI6dHJ1ZSwiZXRsRGFpbHlTdG9yZUR1cmF0aW9uRGF5cyI6OTEsImV0bEZpbGVTdG9yZUVuYWJsZWQiOnRydWUsImV0bEhvdXJseVN0b3JlRHVyYXRpb25Ib3VycyI6NDksImV0bFJlYWRPbmx5TW9kZSI6ZmFsc2UsImV4dHJhQXJncyI6W10sImV4dHJhUG9ydHMiOltdLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvY29zdC1tb2RlbCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJtYXhRdWVyeUNvbmN1cnJlbmN5Ijo1LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIyMDBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXRjT2Zmc2V0IjoiKzAwOjAwIiwid2FybUNhY2hlIjpmYWxzZX0sImt1YmVjb3N0UHJvZHVjdENvbmZpZ3MiOnsiY2x1c3Rlck5hbWUiOiJzeC1jbnAtb3NzIERlbW8iLCJjbHVzdGVyUHJvZmlsZSI6ImRldmVsb3BtZW50IiwiY3VycmVuY3lDb2RlIjoiRVVSIiwiY3VzdG9tUHJpY2VzRW5hYmxlZCI6dHJ1ZSwiZGVmYXVsdE1vZGVsUHJpY2luZyI6eyJDUFUiOiIyOC4wIiwiR1BVIjoiNjkzLjUwIiwiUkFNIjoiMy4wOSIsImVuYWJsZWQiOnRydWUsImludGVybmV0TmV0d29ya0VncmVzcyI6IjAuMTIiLCJyZWdpb25OZXR3b3JrRWdyZXNzIjoiMC4wMSIsInNwb3RDUFUiOiI0Ljg2Iiwic3BvdEdQVSI6IjIyNS4wIiwic3BvdFJBTSI6IjAuNjUiLCJzdG9yYWdlIjoiMC4wNCIsInpvbmVOZXR3b3JrRWdyZXNzIjoiMC4wMSJ9fSwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhbm5vdGF0aW9ucyI6e30sImRiUFZFbmFibGVkIjpmYWxzZSwiZGJTaXplIjoiNUdpIiwiZW5hYmxlZCI6dHJ1ZSwibGFiZWxzIjp7fSwic2l6ZSI6IjVHaSJ9LCJwcm9tZXRoZXVzIjp7ImFsZXJ0bWFuYWdlckZpbGVzIjp7ImFsZXJ0bWFuYWdlci55bWwiOnsiZ2xvYmFsIjp7fSwicmVjZWl2ZXJzIjpbeyJuYW1lIjoiZGVmYXVsdC1yZWNlaXZlciJ9XSwicm91dGUiOnsiZ3JvdXBfaW50ZXJ2YWwiOiI1bSIsImdyb3VwX3dhaXQiOiIxMHMiLCJyZWNlaXZlciI6ImRlZmF1bHQtcmVjZWl2ZXIiLCJyZXBlYXRfaW50ZXJ2YWwiOiIzaCJ9fX0sImNvbmZpZ21hcFJlbG9hZCI6e30sImV4dHJhU2NyYXBlQ29uZmlncyI6Ii0gam9iX25hbWU6IGt1YmVjb3N0XG4gIGhvbm9yX2xhYmVsczogdHJ1ZVxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImNvc3QtYW5hbHl6ZXIuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAgcG9ydDogOTAwM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtbmV0d29ya2luZ1xuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBwb2RcbiAgcmVsYWJlbF9jb25maWdzOlxuICAjIFNjcmFwZSBvbmx5IHRoZSB0aGUgdGFyZ2V0cyBtYXRjaGluZyB0aGUgZm9sbG93aW5nIG1ldGFkYXRhXG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2luc3RhbmNlXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIGt1YmVjb3N0XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAgbmV0d29yay1jb3N0c1xuLSBqb2JfbmFtZToga3ViZWNvc3QtYWdncmVnYXRvclxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImFnZ3JlZ2F0b3Iuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAge3stIGlmIG9yIC5WYWx1ZXMuc2FtbC5lbmFibGVkIC5WYWx1ZXMub2lkYy5lbmFibGVkIH19XG4gICAgcG9ydDogOTAwOFxuICAgIHt7LSBlbHNlIH19XG4gICAgcG9ydDogOTAwNFxuICAgIHt7LSBlbmQgfX1cbiMjIEVuYWJsZXMgc2NyYXBpbmcgb2YgTlZJRElBIEdQVSBtZXRyaWNzIHZpYSBkY2dtLWV4cG9ydGVyLiBTY3JhcGVzIGFsbFxuIyMgZW5kcG9pbnRzIHdoaWNoIGNvbnRhaW4gXCJkY2dtLWV4cG9ydGVyXCIgaW4gbGFiZWxzIFwiYXBwXCIsXG4jIyBcImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudFwiLCBvciBcImFwcC5rdWJlcm5ldGVzLmlvL25hbWVcIiB3aXRoIGEgY2FzZVxuIyMgaW5zZW5zaXRpdmUgbWF0Y2guXG4jIyBSZWZzOlxuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9ncHUtb3BlcmF0b3IvYmxvYi9kNDMxNmE0MTViYmQ2ODRjZTg0MTZhODgwNDIzMDVmYzFhMDkzYWE0L2Fzc2V0cy9zdGF0ZS1kY2dtLWV4cG9ydGVyLzA2MDBfc2VydmljZS55YW1sI0w3XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2RjZ20tZXhwb3J0ZXIvYmxvYi81NGZkMWNhMTM3YzY2NTExYTg3YTcyMDM5MDYxMzY4MGI5YmRhYmRkL2RlcGxveW1lbnQvdGVtcGxhdGVzL3NlcnZpY2UueWFtbCNMMjNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWRjZ20tZXhwb3J0ZXJcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogZW5kcG9pbnRzXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwLCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fY29tcG9uZW50LCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICg/aSkoLipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLiopXG4iLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhZmZpbml0eSI6e30sImFsZXJ0bWFuYWdlcnMiOltdLCJiYXNlVVJMIjoiIiwiY29uZmlnTWFwT3ZlcnJpZGVOYW1lIjoiIiwiY29uZmlnUGF0aCI6Ii9ldGMvY29uZmlnL3Byb21ldGhldXMueW1sIiwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7fSwiZGVwbG95bWVudEFubm90YXRpb25zIjp7fSwiZW1wdHlEaXIiOnsic2l6ZUxpbWl0IjoiIn0sImVuYWJsZWQiOnRydWUsImVudiI6W10sImV4dHJhQXJncyI6eyJxdWVyeS5tYXgtY29uY3VycmVuY3kiOjEsInF1ZXJ5Lm1heC1zYW1wbGVzIjoxMDAwMDAwMDB9LCJleHRyYUNvbmZpZ21hcE1vdW50cyI6W10sImV4dHJhRmxhZ3MiOlsid2ViLmVuYWJsZS1saWZlY3ljbGUiXSwiZXh0cmFIb3N0UGF0aE1vdW50cyI6W10sImV4dHJhSW5pdENvbnRhaW5lcnMiOltdLCJleHRyYVNlY3JldE1vdW50cyI6W10sImV4dHJhVm9sdW1lTW91bnRzIjpbXSwiZXh0cmFWb2x1bWVzIjpbXSwiZ2xvYmFsIjp7ImV2YWx1YXRpb25faW50ZXJ2YWwiOiIxbSIsImV4dGVybmFsX2xhYmVscyI6eyJjbHVzdGVyX2lkIjoic3gtY25wLW9zcyJ9LCJzY3JhcGVfaW50ZXJ2YWwiOiIxbSIsInNjcmFwZV90aW1lb3V0IjoiNjBzIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiY2dyLmRldi9jaGFpbmd1YXJkL3Byb21ldGhldXMiLCJ0YWciOiJsYXRlc3QifSwibGl2ZW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsImxpdmVuZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsImxpdmVuZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJsaXZlbmVzc1Byb2JlVGltZW91dCI6MywibmFtZSI6InNlcnZlciIsIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYWNjZXNzTW9kZXMiOlsiUmVhZFdyaXRlT25jZSJdLCJhbm5vdGF0aW9ucyI6e30sImVuYWJsZWQiOnRydWUsImV4aXN0aW5nQ2xhaW0iOiIiLCJtb3VudFBhdGgiOiIvZGF0YSIsInNpemUiOiIzMkdpIiwic3ViUGF0aCI6IiJ9LCJwb2RBbm5vdGF0aW9ucyI6e30sInBvZExhYmVscyI6e30sInByZWZpeFVSTCI6IiIsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmVhZGluZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJyZWFkaW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwicmVhZGluZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJyZWFkaW5lc3NQcm9iZVRpbWVvdXQiOjMsInJlbW90ZVJlYWQiOnt9LCJyZW1vdGVXcml0ZSI6e30sInJlcGxpY2FDb3VudCI6MSwicmVzb3VyY2VzIjp7fSwicmV0ZW50aW9uIjoiOTdoIiwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImNsdXN0ZXJJUCI6IiIsImV4dGVybmFsSVBzIjpbXSwibGFiZWxzIjp7fSwibG9hZEJhbGFuY2VySVAiOiIiLCJsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMiOltdLCJzZXJ2aWNlUG9ydCI6ODAsInNlc3Npb25BZmZpbml0eSI6Ik5vbmUiLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAwLCJ0b2xlcmF0aW9ucyI6W119LCJzZXJ2ZXJGaWxlcyI6eyJhbGVydGluZ19ydWxlcy55bWwiOnt9LCJhbGVydHMiOnt9LCJwcm9tZXRoZXVzLnltbCI6eyJydWxlX2ZpbGVzIjpbIi9ldGMvY29uZmlnL3JlY29yZGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9hbGVydGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9ydWxlcyIsIi9ldGMvY29uZmlnL2FsZXJ0cyJdLCJzY3JhcGVfY29uZmlncyI6W3siam9iX25hbWUiOiJwcm9tZXRoZXVzIiwic3RhdGljX2NvbmZpZ3MiOlt7InRhcmdldHMiOlsibG9jYWxob3N0OjkwOTAiXX1dfSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzLWNhZHZpc29yIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9zcGVjX2NwdV9zaGFyZXN8Y29udGFpbmVyX3NwZWNfbWVtb3J5X2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y2Fkdmlzb3JfdmVyc2lvbl9pbmZvfGt1YmVjb3N0X3B2X2luZm8pIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbImNvbnRhaW5lciJdLCJ0YXJnZXRfbGFiZWwiOiJjb250YWluZXJfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsicG9kIl0sInRhcmdldF9sYWJlbCI6InBvZF9uYW1lIn1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MvY2Fkdmlzb3IiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoa3ViZWxldF92b2x1bWVfc3RhdHNfdXNlZF9ieXRlcykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImpvYl9uYW1lIjoia3ViZXJuZXRlcy1zZXJ2aWNlLWVuZHBvaW50cyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6ImVuZHBvaW50cyJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbnxjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2dwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlc3xjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxEQ0dNX0ZJX0RFVl9HUFVfVVRJTHxkZXBsb3ltZW50X21hdGNoX2xhYmVsc3xrdWJlX2RhZW1vbnNldF9zdGF0dXNfZGVzaXJlZF9udW1iZXJfc2NoZWR1bGVkfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19udW1iZXJfcmVhZHl8a3ViZV9kZXBsb3ltZW50X3NwZWNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzX2F2YWlsYWJsZXxrdWJlX2pvYl9zdGF0dXNfZmFpbGVkfGt1YmVfbmFtZXNwYWNlX2Fubm90YXRpb25zfGt1YmVfbmFtZXNwYWNlX2xhYmVsc3xrdWJlX25vZGVfaW5mb3xrdWJlX25vZGVfbGFiZWxzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGV8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eXxrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NvbmRpdGlvbnxrdWJlX3BlcnNpc3RlbnR2b2x1bWVfY2FwYWNpdHlfYnl0ZXN8a3ViZV9wZXJzaXN0ZW50dm9sdW1lX3N0YXR1c19waGFzZXxrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9pbmZvfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX3Jlc291cmNlX3JlcXVlc3RzX3N0b3JhZ2VfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX2luZm98a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcmVzdGFydHNfdG90YWx8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19ydW5uaW5nfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfdGVybWluYXRlZF9yZWFzb258a3ViZV9wb2RfbGFiZWxzfGt1YmVfcG9kX293bmVyfGt1YmVfcG9kX3N0YXR1c19waGFzZXxrdWJlX3JlcGxpY2FzZXRfb3duZXJ8a3ViZV9zdGF0ZWZ1bHNldF9yZXBsaWNhc3xrdWJlX3N0YXRlZnVsc2V0X3N0YXR1c19yZXBsaWNhc3xrdWJlY29zdF9jbHVzdGVyX2luZm98a3ViZWNvc3RfY2x1c3Rlcl9tYW5hZ2VtZW50X2Nvc3R8a3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8a3ViZWNvc3RfbG9hZF9iYWxhbmNlcl9jb3N0fGt1YmVjb3N0X25ldHdvcmtfaW50ZXJuZXRfZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19yZWdpb25fZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya196b25lX2VncmVzc19jb3N0fGt1YmVjb3N0X25vZGVfaXNfc3BvdHxrdWJlY29zdF9wb2RfbmV0d29ya19lZ3Jlc3NfYnl0ZXNfdG90YWx8bm9kZV9jcHVfaG91cmx5X2Nvc3R8bm9kZV9jcHVfc2Vjb25kc190b3RhbHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWRfdG90YWx8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWR8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWRfdG90YWx8bm9kZV9maWxlc3lzdGVtX2RldmljZV9lcnJvcnxub2RlX2dwdV9jb3VudHxub2RlX2dwdV9ob3VybHlfY29zdHxub2RlX21lbW9yeV9CdWZmZXJzX2J5dGVzfG5vZGVfbWVtb3J5X0NhY2hlZF9ieXRlc3xub2RlX21lbW9yeV9NZW1BdmFpbGFibGVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtRnJlZV9ieXRlc3xub2RlX21lbW9yeV9NZW1Ub3RhbF9ieXRlc3xub2RlX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8bm9kZV9yYW1faG91cmx5X2Nvc3R8bm9kZV90b3RhbF9ob3VybHlfY29zdHxwb2RfcHZjX2FsbG9jYXRpb258cHZfaG91cmx5X2Nvc3R8c2VydmljZV9zZWxlY3Rvcl9sYWJlbHN8c3RhdGVmdWxTZXRfbWF0Y2hfbGFiZWxzfGt1YmVjb3N0X3B2X2luZm98dXApIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4Ijp0cnVlLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjcmFwZSJdfSx7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IiguKm5vZGUtZXhwb3J0ZXJ8a3ViZWNvc3QtbmV0d29yay1jb3N0cykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX2VuZHBvaW50c19uYW1lIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKGh0dHBzPykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjaGVtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX3NjaGVtZV9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wYXRoIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihbXjpdKykoPzo6XFxkKyk/OyhcXGQrKSIsInJlcGxhY2VtZW50IjoiJDE6JDIiLCJzb3VyY2VfbGFiZWxzIjpbIl9fYWRkcmVzc19fIiwiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydCJdLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsiYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbGFiZWxfKC4rKSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbmFtZXNwYWNlIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZXNwYWNlIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19wb2Rfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbm9kZSJ9XX1dfSwicmVjb3JkaW5nX3J1bGVzLnltbCI6e30sInJ1bGVzIjp7Imdyb3VwcyI6W3sibmFtZSI6IkNQVSIsInJ1bGVzIjpbeyJleHByIjoic3VtKHJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZTpyYXRlNW0ifSx7ImV4cHIiOiJyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZV9ub3N1bTpyYXRlNW0ifSx7ImV4cHIiOiJhdmcoaXJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJQT0RcIiwgY29udGFpbmVyIT1cIlwifVs1bV0pKSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX2NwdV91c2FnZV9pcmF0ZSJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSIsInJlY29yZCI6Imt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn1dfSx7Im5hbWUiOiJTYXZpbmdzIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9XX1dfX0sInNlcnZpY2VBY2NvdW50cyI6eyJhbGVydG1hbmFnZXIiOnsiY3JlYXRlIjp0cnVlfSwibm9kZUV4cG9ydGVyIjp7ImNyZWF0ZSI6dHJ1ZX0sInB1c2hnYXRld2F5Ijp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX19fSwicmVwb3J0aW5nIjp7ImVycm9yUmVwb3J0aW5nIjp0cnVlLCJsb2dDb2xsZWN0aW9uIjp0cnVlLCJwcm9kdWN0QW5hbHl0aWNzIjp0cnVlLCJ2YWx1ZXNSZXBvcnRpbmciOnRydWV9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwibm9kZVBvcnQiOnt9LCJwb3J0Ijo5MDkwLCJ0YXJnZXRQb3J0Ijo5MDkwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0= - name: READ_ONLY value: "false" - name: PROMETHEUS_SERVER_ENDPOINT valueFrom: @@ -144,10 +145,8 @@ - name: ETL_DAILY_STORE_DURATION_DAYS value: "91" - name: ETL_HOURLY_STORE_DURATION_HOURS value: "49" - - name: ETL_WEEKLY_STORE_DURATION_WEEKS - value: "53" - name: ETL_FILE_STORE_ENABLED value: "true" - name: ETL_ASSET_RECONCILIATION_ENABLED value: "true" @@ -184,9 +183,9 @@ - name: WATERFOWL_ENABLED value: "true" - name: DIAGNOSTICS_RUN_IN_COST_MODEL value: "false" - - image: gcr.io/kubecost1/frontend:prod-2.3.5 + - image: gcr.io/kubecost1/frontend:prod-2.4.0 env: - name: GET_HOSTS_FROM value: dns name: cost-analyzer-frontend @@ -199,8 +198,12 @@ readOnlyRootFilesystem: true volumeMounts: - name: tmp mountPath: /tmp + - name: tmp + mountPath: /var/lib/nginx/tmp + - name: tmp + mountPath: /var/run - name: nginx-conf mountPath: /etc/nginx/conf.d/ resources: requests: @@ -230,9 +233,9 @@ drop: - ALL privileged: false readOnlyRootFilesystem: true - image: gcr.io/kubecost1/cost-model:prod-2.3.5 + image: gcr.io/kubecost1/cost-model:prod-2.4.0 readinessProbe: httpGet: path: /healthz port: 9004 @@ -272,17 +275,21 @@ - name: DB_CONCURRENT_INGESTION_COUNT value: "1" - name: ETL_DAILY_STORE_DURATION_DAYS value: "91" + - name: ETL_HOURLY_STORE_DURATION_HOURS + value: "49" + - name: CONTAINER_RESOURCE_USAGE_RETENTION_DAYS + value: "1" - name: DB_TRIM_MEMORY_ON_CLOSE value: "true" - name: KUBECOST_NAMESPACE value: default - name: GRAFANA_ENABLED value: "false" - name: cloud-cost - image: gcr.io/kubecost1/cost-model:prod-2.3.5 + image: gcr.io/kubecost1/cost-model:prod-2.4.0 readinessProbe: httpGet: path: /healthz diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: @@ -82,9 +82,9 @@ add_header Cache-Control "max-age=300"; location / { try_files $uri $uri/ /index.html; } - add_header ETag "2.3.5"; + add_header ETag "2.4.0"; listen 9090; listen [::]:9090; location /api/ { proxy_pass http://api/; @@ -246,8 +246,24 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + location = /model/savings/nodeGroupSizingETL { + proxy_read_timeout 300; + proxy_pass http://aggregator/savings/nodeGroupSizingETL; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/savings/recommendations/allowLists { + proxy_read_timeout 300; + proxy_pass http://aggregator/savings/recommendations/allowLists; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/cloudCost { proxy_read_timeout 300; proxy_pass http://aggregator/cloudCost; proxy_redirect off; @@ -374,16 +390,8 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } - location = /model/reports/advanced { - proxy_read_timeout 300; - proxy_pass http://aggregator/reports/advanced; - proxy_redirect off; - proxy_set_header Connection ""; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } location = /model/reports/cloudCost { proxy_read_timeout 300; proxy_pass http://aggregator/reports/cloudCost; proxy_redirect off; @@ -529,8 +537,48 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + location = /model/collection/configs { + proxy_read_timeout 300; + proxy_pass http://aggregator/collection/configs; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/resources { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/resources; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/resources/timeseries { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/resources/timeseries; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/costs { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/costs; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/costs/timeseries { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/costs/timeseries; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/networkinsights { proxy_read_timeout 300; proxy_pass http://aggregator/networkinsights; proxy_redirect off; @@ -769,8 +817,24 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + location = /model/getIngestionConfig { + proxy_read_timeout 300; + proxy_pass http://aggregator/getIngestionConfig; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/setIngestionConfig { + proxy_read_timeout 300; + proxy_pass http://aggregator/setIngestionConfig; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/enablements { proxy_read_timeout 300; proxy_pass http://aggregator/enablements; proxy_redirect off; @@ -940,8 +1004,51 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + + # alert end points with v2 will be routed to aggregator server + location = /model/v2/alerts { + proxy_read_timeout 300; + proxy_pass http://aggregator/alerts; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location ~* ^/model/v2/alerts/(.*) { + proxy_read_timeout 300; + proxy_pass http://aggregator/alerts/$1; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + # alert end points without any version will be routed to model server + location = /model/alerts { + proxy_read_timeout 300; + proxy_pass http://model/alerts; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location ~* ^/model/alerts/(.*) { + proxy_read_timeout 300; + proxy_pass http://model/alerts/$1; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location ~* ^/model/reports/(.*)/schedule/test { + proxy_read_timeout 300; + proxy_pass http://aggregator/reports/$1/schedule/test; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/hideOrphanedResources { default_type 'application/json'; add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS' always; @@ -991,9 +1098,20 @@ "pluginsEnabled": "false", "carbonEstimatesEnabled": "false", "clusterControllerEnabled": "false", "forecastingEnabled": "true", - "chartVersion": "2.3.5" + "chartVersion": "2.4.0", + "hourlyDataRetention": "49", + "dailyDataRetention": "91", + "hideDiagnostics": "false", + "hideOrphanedResources": "false", + "hideKubecostActions": "false", + "hideReservedInstances": "false", + "hideSpotCommander": "false", + "hideUnclaimedVolumes": "false", + "hideCloudIntegrationsUI": "false", + "hideBellIcon": "false", + "hideTeams": "false" } '; } } diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml 2024-09-17 19:13:01.744946545 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer annotations: diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml 2024-09-17 19:13:01.744946545 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,8 +7,8 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml 2024-09-17 19:13:01.744946545 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -6,8 +6,8 @@ name: smtp-configs namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml 2024-09-17 19:13:01.744946545 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -5,9 +5,9 @@ metadata: name: release-name-forecasting namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: forecasting app.kubernetes.io/instance: release-name app: forecasting @@ -38,9 +38,9 @@ type: RuntimeDefault restartPolicy: Always containers: - name: forecasting - image: gcr.io/kubecost1/kubecost-modeling:v0.1.15 + image: gcr.io/kubecost1/kubecost-modeling:v0.1.16 volumeMounts: - name: tmp mountPath: /tmp securityContext: diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml 2024-09-17 19:13:01.744946545 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -5,9 +5,9 @@ metadata: name: release-name-forecasting namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: forecasting app.kubernetes.io/instance: release-name app: forecasting diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" @@ -621,14 +621,117 @@ ], "timeFrom": "", "title": "CPU throttle percent", "type": "timeseries" + }, + { + "datasource": { + "default": false, + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "NVIDIA GPU usage for this container.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 14 + }, + "id": 100, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.4.7", + "targets": [ + { + "datasource": { + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "DCGM_FI_PROF_GR_ENGINE_ACTIVE{namespace=~\"$namespace\",container=~\"$container\",pod=~\"$pod\"}", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "__auto", + "metric": "container_cpu", + "refId": "A", + "step": 10 + } + ], + "timeFrom": "", + "title": "GPU Usage", + "type": "timeseries" } ], "refresh": "", "revision": 1, - "schemaVersion": 38, - "style": "dark", + "schemaVersion": 39, "tags": [ "kubecost", "utilization", "metrics" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-prometheus-metrics-template.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-aggregator.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-workload-metrics.yaml 2024-09-17 19:12:34.692807700 +0000 @@ -7,9 +7,9 @@ namespace: kubecost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-configmap.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-configmap.yaml 2024-09-17 19:13:01.740946523 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-configmap.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -167,8 +167,22 @@ - names: - release-name-aggregator type: 'A' port: 9004 + ## Enables scraping of NVIDIA GPU metrics via dcgm-exporter. Scrapes all + ## endpoints which contain "dcgm-exporter" in labels "app", + ## "app.kubernetes.io/component", or "app.kubernetes.io/name" with a case + ## insensitive match. + ## Refs: + ## https://github.com/NVIDIA/gpu-operator/blob/d4316a415bbd684ce8416a88042305fc1a093aa4/assets/state-dcgm-exporter/0600_service.yaml#L7 + ## https://github.com/NVIDIA/dcgm-exporter/blob/54fd1ca137c66511a87a720390613680b9bdabdd/deployment/templates/service.yaml#L23 + - job_name: kubecost-dcgm-exporter + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - source_labels: [__meta_kubernetes_pod_label_app, __meta_kubernetes_pod_label_app_kubernetes_io_component, __meta_kubernetes_pod_label_app_kubernetes_io_name] + action: keep + regex: (?i)(.*dcgm-exporter.*|.*dcgm-exporter.*|.*dcgm-exporter.*) recording_rules.yml: | {} rules: | diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-deployment.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-deployment.yaml --- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-deployment.yaml 2024-09-17 19:13:01.744946545 +0000 +++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus-server-deployment.yaml 2024-09-17 19:12:34.696807721 +0000 @@ -20,10 +20,11 @@ strategy: type: Recreate template: metadata: + annotations: + checksum/configs: 42af62fec1204e0dc234dc2db4f0bd19004ab3aa1bc161f1c10c7abe0dfea6d2 labels: - component: "server" app: prometheus release: release-name heritage: Helm @@ -31,9 +32,9 @@ serviceAccountName: release-name-prometheus-server containers: - name: prometheus-server - image: "quay.io/prometheus/prometheus:v2.52.0" + image: "cgr.dev/chainguard/prometheus:latest" imagePullPolicy: "IfNotPresent" args: - --storage.tsdb.retention.time=97h - --config.file=/etc/config/prometheus.yml diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -6,9 +6,9 @@ name: release-name-cloud-cost namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: cost-analyzer app.kubernetes.io/instance: release-name app: cost-analyzer diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -6,9 +6,9 @@ name: release-name-aggregator namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app: aggregator spec: selector: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer roleRef: @@ -28,9 +28,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer roleRef: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer rules: @@ -92,9 +92,9 @@ name: release-name-cost-analyzer labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer rules: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: ```
github-actions[bot] commented 2 weeks ago
Changes Rendered Chart ```diff diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: @@ -28,9 +28,10 @@ labels: app.kubernetes.io/name: cost-analyzer app.kubernetes.io/instance: release-name app: cost-analyzer - + annotations: + checksum/configs: df39c8c97973bf17e82ad1fd93580703097aa6d7afa71ed48b9ecbcef5173f10 spec: securityContext: fsGroup: 1001 fsGroupChangePolicy: OnRootMismatch @@ -54,9 +55,9 @@ persistentVolumeClaim: claimName: release-name-cost-analyzer initContainers: containers: - - image: gcr.io/kubecost1/cost-model:prod-2.3.5 + - image: gcr.io/kubecost1/cost-model:prod-2.4.0 name: cost-model securityContext: allowPrivilegeEscalation: false capabilities: @@ -96,9 +97,9 @@ env: - name: GRAFANA_ENABLED value: "false" - name: HELM_VALUES - value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTUiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMS40In0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6Imtpd2lncmlkL2s4cy1zaWRlY2FyIiwidGFnIjoiMS4yNy4yIn0sInJlc291cmNlcyI6e319LCJzbXRwIjp7ImV4aXN0aW5nU2VjcmV0IjoiIn0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiYW5ub3RhdGlvbnMiOnsiY2VydC5nYXJkZW5lci5jbG91ZC9wdXJwb3NlIjoibWFuYWdlZCIsImRucy5nYXJkZW5lci5jbG91ZC9jbGFzcyI6ImdhcmRlbiIsImRucy5nYXJkZW5lci5jbG91ZC9kbnNuYW1lcyI6Imt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCIsImRucy5nYXJkZW5lci5jbG91ZC90dGwiOiIxODAifSwiY2xhc3NOYW1lIjoibmdpbngiLCJlbmFibGVkIjp0cnVlLCJob3N0cyI6WyJrdWJlY29zdC5sYWIuc3V4ZXNzaXQuazhzLmNsb3VkLnVpYmsuYWMuYXQiXSwicGF0aFR5cGUiOiJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwicGF0aHMiOlsiLyJdLCJ0bHMiOlt7Imhvc3RzIjpbImt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1ldHJpY3MiOnt9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsRmlsZVN0b3JlRW5hYmxlZCI6dHJ1ZSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXRsV2Vla2x5U3RvcmVEdXJhdGlvbldlZWtzIjo1MywiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAiLCJ3YXJtQ2FjaGUiOmZhbHNlfSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn0sImdyYWZhbmFVUkwiOiJodHRwczovL2dyYWZhbmEubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0In0sIm5ldHdvcmtDb3N0cyI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiYWRkaXRpb25hbFNlY3VyaXR5Q29udGV4dCI6e30sImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJjb25maWciOnsiZGVzdGluYXRpb25zIjp7ImNyb3NzLXJlZ2lvbiI6W10sImRpcmVjdC1jbGFzc2lmaWNhdGlvbiI6W10sImluLXJlZ2lvbiI6W10sImluLXpvbmUiOlsiMTI3LjAuMC4wLzgiLCIxNjkuMjU0LjAuMC8xNiIsIjEwLjAuMC4wLzgiLCIxNzIuMTYuMC4wLzEyIiwiMTkyLjE2OC4wLjAvMTYiXSwiaW50ZXJuZXQiOltdfSwic2VydmljZXMiOnsiYW1hem9uLXdlYi1zZXJ2aWNlcyI6dHJ1ZSwiYXp1cmUtY2xvdWQtc2VydmljZXMiOnRydWUsImdvb2dsZS1jbG91ZC1zZXJ2aWNlcyI6dHJ1ZX19LCJlbmFibGVkIjp0cnVlLCJleHRyYUFyZ3MiOltdLCJoZWFsdGhDaGVja1Byb2JlcyI6e30sImltYWdlIjp7InJlcG9zaXRvcnkiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW5ldHdvcmstY29zdHMiLCJ0YWciOiJ2MC4xNy4zIn0sImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxvZ0xldmVsIjoiaW5mbyIsIm5vZGVTZWxlY3RvciI6e30sInBvcnQiOjMwMDEsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicHJvbWV0aGV1c1NjcmFwZSI6ZmFsc2UsInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiNTAwbSJ9LCJyZXF1ZXN0cyI6eyJjcHUiOiI1MG0iLCJtZW1vcnkiOiIyME1pIn19LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fX0sInRvbGVyYXRpb25zIjpbXSwidHJhZmZpY0xvZ2dpbmciOnRydWUsInVwZGF0ZVN0cmF0ZWd5Ijp7InR5cGUiOiJSb2xsaW5nVXBkYXRlIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJQVkVuYWJsZWQiOmZhbHNlLCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImRlcGxveW1lbnRBbm5vdGF0aW9ucyI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTIuMCJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJwcm9tZXRoZXVzUnVsZSI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiZW5hYmxlZCI6dHJ1ZX0sInJlcG9ydGluZyI6eyJlcnJvclJlcG9ydGluZyI6dHJ1ZSwibG9nQ29sbGVjdGlvbiI6dHJ1ZSwicHJvZHVjdEFuYWx5dGljcyI6dHJ1ZSwidmFsdWVzUmVwb3J0aW5nIjp0cnVlfSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sIm5vZGVQb3J0Ijp7fSwicG9ydCI6OTA5MCwidGFyZ2V0UG9ydCI6OTA5MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX0sInNlcnZpY2VNb25pdG9yIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJlbmFibGVkIjp0cnVlLCJpbnRlcnZhbCI6IjFtIiwibWV0cmljUmVsYWJlbGluZ3MiOltdLCJuZXR3b3JrQ29zdHMiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImVuYWJsZWQiOnRydWUsImludGVydmFsIjoiMW0iLCJtZXRyaWNSZWxhYmVsaW5ncyI6W10sInJlbGFiZWxpbmdzIjpbXSwic2NyYXBlVGltZW91dCI6IjEwcyJ9LCJyZWxhYmVsaW5ncyI6W10sInNjcmFwZVRpbWVvdXQiOiIxMHMifSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0= + value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiY2dyLmRldi9jaGFpbmd1YXJkL2dyYWZhbmEiLCJ0YWciOiJsYXRlc3QifSwibGRhcCI6eyJjb25maWciOiIiLCJleGlzdGluZ1NlY3JldCI6IiJ9LCJsaXZlbmVzc1Byb2JlIjp7ImZhaWx1cmVUaHJlc2hvbGQiOjEwLCJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9LCJpbml0aWFsRGVsYXlTZWNvbmRzIjo2MCwidGltZW91dFNlY29uZHMiOjMwfSwibm9kZVNlbGVjdG9yIjp7fSwicGx1Z2lucyI6W10sInBvZEFubm90YXRpb25zIjp7fSwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInJlYWRpbmVzc1Byb2JlIjp7Imh0dHBHZXQiOnsicGF0aCI6Ii9hcGkvaGVhbHRoIiwicG9ydCI6MzAwMH19LCJyZXBsaWNhcyI6MSwicmVzb3VyY2VzIjp7fSwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInBvcnQiOjgwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImNyZWF0ZSI6dHJ1ZSwibmFtZSI6IiJ9LCJzaWRlY2FyIjp7ImRhc2hib2FyZHMiOnsiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlcnJvcl90aHJvdHRsZV9zbGVlcCI6MCwiZm9sZGVyIjoiL3RtcC9kYXNoYm9hcmRzIiwibGFiZWwiOiJncmFmYW5hX2Rhc2hib2FyZCIsImxhYmVsVmFsdWUiOiIxIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiY2dyLmRldi9jaGFpbmd1YXJkL2s4cy1zaWRlY2FyIiwidGFnIjoibGF0ZXN0In0sInJlc291cmNlcyI6e319LCJzbXRwIjp7ImV4aXN0aW5nU2VjcmV0IjoiIn0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiYW5ub3RhdGlvbnMiOnsiY2VydC5nYXJkZW5lci5jbG91ZC9wdXJwb3NlIjoibWFuYWdlZCIsImRucy5nYXJkZW5lci5jbG91ZC9jbGFzcyI6ImdhcmRlbiIsImRucy5nYXJkZW5lci5jbG91ZC9kbnNuYW1lcyI6Imt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCIsImRucy5nYXJkZW5lci5jbG91ZC90dGwiOiIxODAifSwiY2xhc3NOYW1lIjoibmdpbngiLCJlbmFibGVkIjp0cnVlLCJob3N0cyI6WyJrdWJlY29zdC5sYWIuc3V4ZXNzaXQuazhzLmNsb3VkLnVpYmsuYWMuYXQiXSwicGF0aFR5cGUiOiJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwicGF0aHMiOlsiLyJdLCJ0bHMiOlt7Imhvc3RzIjpbImt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1ldHJpY3MiOnt9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsRmlsZVN0b3JlRW5hYmxlZCI6dHJ1ZSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAiLCJ3YXJtQ2FjaGUiOmZhbHNlfSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn0sImdyYWZhbmFVUkwiOiJodHRwczovL2dyYWZhbmEubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0In0sIm5ldHdvcmtDb3N0cyI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiYWRkaXRpb25hbFNlY3VyaXR5Q29udGV4dCI6e30sImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJjb25maWciOnsiZGVzdGluYXRpb25zIjp7ImNyb3NzLXJlZ2lvbiI6W10sImRpcmVjdC1jbGFzc2lmaWNhdGlvbiI6W10sImluLXJlZ2lvbiI6W10sImluLXpvbmUiOlsiMTI3LjAuMC4wLzgiLCIxNjkuMjU0LjAuMC8xNiIsIjEwLjAuMC4wLzgiLCIxNzIuMTYuMC4wLzEyIiwiMTkyLjE2OC4wLjAvMTYiXSwiaW50ZXJuZXQiOltdfSwic2VydmljZXMiOnsiYW1hem9uLXdlYi1zZXJ2aWNlcyI6dHJ1ZSwiYXp1cmUtY2xvdWQtc2VydmljZXMiOnRydWUsImdvb2dsZS1jbG91ZC1zZXJ2aWNlcyI6dHJ1ZX19LCJlbmFibGVkIjp0cnVlLCJleHRyYUFyZ3MiOltdLCJoZWFsdGhDaGVja1Byb2JlcyI6e30sImltYWdlIjp7InJlcG9zaXRvcnkiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW5ldHdvcmstY29zdHMiLCJ0YWciOiJ2MC4xNy42In0sImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxvZ0xldmVsIjoiaW5mbyIsIm5vZGVTZWxlY3RvciI6e30sInBvcnQiOjMwMDEsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicHJvbWV0aGV1c1NjcmFwZSI6ZmFsc2UsInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiNTAwbSJ9LCJyZXF1ZXN0cyI6eyJjcHUiOiI1MG0iLCJtZW1vcnkiOiIyME1pIn19LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fX0sInRvbGVyYXRpb25zIjpbXSwidHJhZmZpY0xvZ2dpbmciOnRydWUsInVwZGF0ZVN0cmF0ZWd5Ijp7InR5cGUiOiJSb2xsaW5nVXBkYXRlIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJQVkVuYWJsZWQiOmZhbHNlLCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIyMgRW5hYmxlcyBzY3JhcGluZyBvZiBOVklESUEgR1BVIG1ldHJpY3MgdmlhIGRjZ20tZXhwb3J0ZXIuIFNjcmFwZXMgYWxsXG4jIyBlbmRwb2ludHMgd2hpY2ggY29udGFpbiBcImRjZ20tZXhwb3J0ZXJcIiBpbiBsYWJlbHMgXCJhcHBcIixcbiMjIFwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50XCIsIG9yIFwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZVwiIHdpdGggYSBjYXNlXG4jIyBpbnNlbnNpdGl2ZSBtYXRjaC5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJkZXBsb3ltZW50QW5ub3RhdGlvbnMiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJzeC1jbnAtb3NzIn0sInNjcmFwZV9pbnRlcnZhbCI6IjFtIiwic2NyYXBlX3RpbWVvdXQiOiI2MHMifSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjZ3IuZGV2L2NoYWluZ3VhcmQvcHJvbWV0aGV1cyIsInRhZyI6ImxhdGVzdCJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJwcm9tZXRoZXVzUnVsZSI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiZW5hYmxlZCI6dHJ1ZX0sInJlcG9ydGluZyI6eyJlcnJvclJlcG9ydGluZyI6dHJ1ZSwibG9nQ29sbGVjdGlvbiI6dHJ1ZSwicHJvZHVjdEFuYWx5dGljcyI6dHJ1ZSwidmFsdWVzUmVwb3J0aW5nIjp0cnVlfSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sIm5vZGVQb3J0Ijp7fSwicG9ydCI6OTA5MCwidGFyZ2V0UG9ydCI6OTA5MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX0sInNlcnZpY2VNb25pdG9yIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJlbmFibGVkIjp0cnVlLCJpbnRlcnZhbCI6IjFtIiwibWV0cmljUmVsYWJlbGluZ3MiOltdLCJuZXR3b3JrQ29zdHMiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImVuYWJsZWQiOnRydWUsImludGVydmFsIjoiMW0iLCJtZXRyaWNSZWxhYmVsaW5ncyI6W10sInJlbGFiZWxpbmdzIjpbXSwic2NyYXBlVGltZW91dCI6IjEwcyJ9LCJyZWxhYmVsaW5ncyI6W10sInNjcmFwZVRpbWVvdXQiOiIxMHMifSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0= - name: READ_ONLY value: "false" - name: PROMETHEUS_SERVER_ENDPOINT valueFrom: @@ -144,10 +145,8 @@ - name: ETL_DAILY_STORE_DURATION_DAYS value: "91" - name: ETL_HOURLY_STORE_DURATION_HOURS value: "49" - - name: ETL_WEEKLY_STORE_DURATION_WEEKS - value: "53" - name: ETL_FILE_STORE_ENABLED value: "true" - name: ETL_ASSET_RECONCILIATION_ENABLED value: "true" @@ -191,9 +190,9 @@ - name: WATERFOWL_ENABLED value: "true" - name: DIAGNOSTICS_RUN_IN_COST_MODEL value: "false" - - image: gcr.io/kubecost1/frontend:prod-2.3.5 + - image: gcr.io/kubecost1/frontend:prod-2.4.0 env: - name: GET_HOSTS_FROM value: dns name: cost-analyzer-frontend @@ -206,8 +205,12 @@ readOnlyRootFilesystem: true volumeMounts: - name: tmp mountPath: /tmp + - name: tmp + mountPath: /var/lib/nginx/tmp + - name: tmp + mountPath: /var/run - name: nginx-conf mountPath: /etc/nginx/conf.d/ resources: requests: @@ -237,9 +240,9 @@ drop: - ALL privileged: false readOnlyRootFilesystem: true - image: gcr.io/kubecost1/cost-model:prod-2.3.5 + image: gcr.io/kubecost1/cost-model:prod-2.4.0 readinessProbe: httpGet: path: /healthz port: 9004 @@ -279,17 +282,21 @@ - name: DB_CONCURRENT_INGESTION_COUNT value: "1" - name: ETL_DAILY_STORE_DURATION_DAYS value: "91" + - name: ETL_HOURLY_STORE_DURATION_HOURS + value: "49" + - name: CONTAINER_RESOURCE_USAGE_RETENTION_DAYS + value: "1" - name: DB_TRIM_MEMORY_ON_CLOSE value: "true" - name: KUBECOST_NAMESPACE value: default - name: GRAFANA_ENABLED value: "false" - name: cloud-cost - image: gcr.io/kubecost1/cost-model:prod-2.3.5 + image: gcr.io/kubecost1/cost-model:prod-2.4.0 readinessProbe: httpGet: path: /healthz diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: @@ -82,9 +82,9 @@ add_header Cache-Control "max-age=300"; location / { try_files $uri $uri/ /index.html; } - add_header ETag "2.3.5"; + add_header ETag "2.4.0"; listen 9090; listen [::]:9090; location /api/ { proxy_pass http://api/; @@ -246,8 +246,24 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + location = /model/savings/nodeGroupSizingETL { + proxy_read_timeout 300; + proxy_pass http://aggregator/savings/nodeGroupSizingETL; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/savings/recommendations/allowLists { + proxy_read_timeout 300; + proxy_pass http://aggregator/savings/recommendations/allowLists; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/cloudCost { proxy_read_timeout 300; proxy_pass http://aggregator/cloudCost; proxy_redirect off; @@ -374,16 +390,8 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } - location = /model/reports/advanced { - proxy_read_timeout 300; - proxy_pass http://aggregator/reports/advanced; - proxy_redirect off; - proxy_set_header Connection ""; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } location = /model/reports/cloudCost { proxy_read_timeout 300; proxy_pass http://aggregator/reports/cloudCost; proxy_redirect off; @@ -529,8 +537,48 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + location = /model/collection/configs { + proxy_read_timeout 300; + proxy_pass http://aggregator/collection/configs; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/resources { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/resources; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/resources/timeseries { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/resources/timeseries; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/costs { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/costs; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/kubernetes/containers/costs/timeseries { + proxy_read_timeout 300; + proxy_pass http://aggregator/kubernetes/containers/costs/timeseries; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/networkinsights { proxy_read_timeout 300; proxy_pass http://aggregator/networkinsights; proxy_redirect off; @@ -769,8 +817,24 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + location = /model/getIngestionConfig { + proxy_read_timeout 300; + proxy_pass http://aggregator/getIngestionConfig; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location = /model/setIngestionConfig { + proxy_read_timeout 300; + proxy_pass http://aggregator/setIngestionConfig; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/enablements { proxy_read_timeout 300; proxy_pass http://aggregator/enablements; proxy_redirect off; @@ -940,8 +1004,51 @@ proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + + # alert end points with v2 will be routed to aggregator server + location = /model/v2/alerts { + proxy_read_timeout 300; + proxy_pass http://aggregator/alerts; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location ~* ^/model/v2/alerts/(.*) { + proxy_read_timeout 300; + proxy_pass http://aggregator/alerts/$1; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + # alert end points without any version will be routed to model server + location = /model/alerts { + proxy_read_timeout 300; + proxy_pass http://model/alerts; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location ~* ^/model/alerts/(.*) { + proxy_read_timeout 300; + proxy_pass http://model/alerts/$1; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location ~* ^/model/reports/(.*)/schedule/test { + proxy_read_timeout 300; + proxy_pass http://aggregator/reports/$1/schedule/test; + proxy_redirect off; + proxy_set_header Connection ""; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } location = /model/hideOrphanedResources { default_type 'application/json'; add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS' always; @@ -991,9 +1098,20 @@ "pluginsEnabled": "false", "carbonEstimatesEnabled": "false", "clusterControllerEnabled": "false", "forecastingEnabled": "true", - "chartVersion": "2.3.5" + "chartVersion": "2.4.0", + "hourlyDataRetention": "49", + "dailyDataRetention": "91", + "hideDiagnostics": "false", + "hideOrphanedResources": "false", + "hideKubecostActions": "false", + "hideReservedInstances": "false", + "hideSpotCommander": "false", + "hideUnclaimedVolumes": "false", + "hideCloudIntegrationsUI": "false", + "hideBellIcon": "false", + "hideTeams": "false" } '; } } diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml 2024-09-17 19:13:01.900947384 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer annotations: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/instance: kubecost app.kubernetes.io/name: network-costs - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app: release-name-network-costs spec: clusterIP: None diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/instance: kubecost app.kubernetes.io/name: network-costs - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app: release-name-network-costs spec: updateStrategy: @@ -21,17 +21,17 @@ metadata: labels: app.kubernetes.io/instance: kubecost app.kubernetes.io/name: network-costs - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app: release-name-network-costs spec: hostNetwork: true serviceAccountName: release-name-cost-analyzer containers: - name: release-name-network-costs - image: gcr.io/kubecost1/kubecost-network-costs:v0.17.3 + image: gcr.io/kubecost1/kubecost-network-costs:v0.17.6 imagePullPolicy: IfNotPresent resources: limits: cpu: 500m diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml 2024-09-17 19:13:01.900947384 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: app-configs namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -7,8 +7,8 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -6,9 +6,9 @@ name: release-name-cost-analyzer namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml 2024-09-17 19:13:01.900947384 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer spec: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,8 +6,8 @@ name: smtp-configs namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -7,9 +7,9 @@ namespace: default labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer data: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -5,9 +5,9 @@ metadata: name: release-name-forecasting namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: forecasting app.kubernetes.io/instance: release-name app: forecasting @@ -38,9 +38,9 @@ type: RuntimeDefault restartPolicy: Always containers: - name: forecasting - image: gcr.io/kubecost1/kubecost-modeling:v0.1.15 + image: gcr.io/kubecost1/kubecost-modeling:v0.1.16 volumeMounts: - name: tmp mountPath: /tmp securityContext: diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml 2024-09-17 19:12:34.832808468 +0000 @@ -5,9 +5,9 @@ metadata: name: release-name-forecasting namespace: default labels: - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: forecasting app.kubernetes.io/instance: release-name app: forecasting diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-attached-disks.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-attached-disk-metrics labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-metrics-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-cluster-metrics labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-cluster-utilization-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-cluster-utilization labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-deployment-utilization-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-deployment-utilization labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-kubernetes-resource-efficiency-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-kubernetes-resource-efficiency labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-label-cost-utilization-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-label-cost labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-namespace-utilization-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-namespace-utilization labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-cloud-sevices.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-network-cloud-services labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-network-costs.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-network-costs-metrics labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-node-utilization-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-node-utilization labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-multi-cluster.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-pod-utilization-multi-cluster labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml --- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml 2024-09-17 19:13:01.896947362 +0000 +++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana-dashboard-pod-utilization-template.yaml 2024-09-17 19:12:34.828808445 +0000 @@ -6,9 +6,9 @@ name: grafana-dashboard-pod-utilization labels: app.kubernetes.io/name: cost-analyzer - helm.sh/chart: cost-analyzer-2.3.5 + helm.sh/chart: cost-analyzer-2.4.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Helm app: cost-analyzer grafana_dashboard: "1" @@ -620,14 +620,117 @@ ], "timeFrom": "", "title": "CPU throttle percent", "type": "timeseries" + }, + { + "datasource": { + "default": false, + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "NVIDIA GPU usage for this container.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 14 + }, + "id": 100, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "9.4.7", + "targets": [ + { + "datasource": { + "uid": "${datasource}" + }, + "editorMode": "code", + "expr": "DCGM_FI_PROF_GR_ENGINE_ACTIVE{namespace=~\"$namespace\",container=~\"$container\",pod=~\"$pod\"}", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "__auto", + "metric": "container_cpu", + "refId": "A", + "step": 10 + } + ], + "timeFrom": "", + "title": "GPU Usage", + "type": "timeseries" } ], "refresh": "", "revision": 1, - "schemaVersion": 38, - "style": "dark", + "schemaVersion": 39, "tags": [ "kubecost", "utilization", "metrics" ```