<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56118>56118</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Dead Code Elimination Regression at -O3 (trunk vs. 14.0.4)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Quarub
</td>
</tr>
</table>
<pre>
`cat case.c #223142`
```c
int a, e;
static int b[] = {2, 2};
int d[7];
void bar11_(void);
void foo(void);
static int c(short g) {
char f = b[1] = d[0] = 8;
for (;; a++) {
bar11_();
for (;;) {
d[0] = d[a];
if (d[0])
return 8;
f = g;
if (f)
;
else {
foo();
break;
}
g = 3 && b[1];
}
}
}
int main() {
c(1);
for (; e < 2; e++)
b[e];
}
```
`llvm-41455dd1dcbbdf2f5fb34cc1f248bfd8d947dc52 (trunk) -O3` can not eliminate `foo` but `llvm-llvmorg-14.0.4 -O3` can.
Target: `x86_64-unknown-linux-gnu`
------------------------------------------------
`llvm-41455dd1dcbbdf2f5fb34cc1f248bfd8d947dc52 (trunk) -O3 [-emit-llvm] -S -o /dev/stdout case.c`
<details ><summary>Emitted IR</summary><p>
```ll
; ModuleID = 'case.c'
source_filename = "case.c"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
@e = dso_local local_unnamed_addr global i32 0, align 4
@b.0 = internal unnamed_addr global i1 false, align 4
@a = dso_local local_unnamed_addr global i32 0, align 4
@d = dso_local local_unnamed_addr global [7 x i32] zeroinitializer, align 16
; Function Attrs: nounwind uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
store i32 8, ptr @d, align 16, !tbaa !5
store i1 true, ptr @b.0, align 4
tail call void @bar11_() #2
%1 = load i32, ptr @a, align 4, !tbaa !5
%2 = sext i32 %1 to i64
%3 = getelementptr inbounds [7 x i32], ptr @d, i64 0, i64 %2
%4 = load i32, ptr %3, align 4, !tbaa !5
store i32 %4, ptr @d, align 16, !tbaa !5
%5 = icmp eq i32 %4, 0
br i1 %5, label %6, label %23
6: ; preds = %0, %12
%7 = phi ptr [ %17, %12 ], [ %3, %0 ]
%8 = phi i8 [ 0, %12 ], [ 1, %0 ]
br label %9
9: ; preds = %20, %6
%10 = phi i8 [ %8, %6 ], [ 1, %20 ]
%11 = icmp eq i8 %10, 0
br i1 %11, label %12, label %20
12: ; preds = %9
tail call void @foo() #2
%13 = load i32, ptr @a, align 4, !tbaa !5
%14 = add nsw i32 %13, 1
store i32 %14, ptr @a, align 4, !tbaa !5
tail call void @bar11_() #2
%15 = load i32, ptr @a, align 4, !tbaa !5
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds [7 x i32], ptr @d, i64 0, i64 %16
%18 = load i32, ptr %17, align 4, !tbaa !5
store i32 %18, ptr @d, align 16, !tbaa !5
%19 = icmp eq i32 %18, 0
br i1 %19, label %6, label %23
20: ; preds = %9
%21 = load i32, ptr %7, align 4, !tbaa !5
store i32 %21, ptr @d, align 16, !tbaa !5
%22 = icmp eq i32 %21, 0
br i1 %22, label %9, label %23
23: ; preds = %12, %20, %0
%24 = load i32, ptr @e, align 4, !tbaa !5
%25 = icmp slt i32 %24, 2
br i1 %25, label %26, label %27
26: ; preds = %23
store i32 2, ptr @e, align 4, !tbaa !5
br label %27
27: ; preds = %26, %23
ret i32 0
}
declare void @bar11_() local_unnamed_addr #1
declare void @foo() local_unnamed_addr #1
attributes #0 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }
!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}
!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 7, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 15.0.0 (https://github.com/llvm/llvm-project.git 41455dd1dcbbdf2f5fb34cc1f248bfd8d947dc52)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
```
</p></details>
------------------------------------------------
`llvm-llvmorg-14.0.4 -O3 [-emit-llvm] -S -o /dev/stdout case.c`
<details ><summary>Emitted IR</summary><p>
```ll
; ModuleID = 'case.c'
source_filename = "case.c"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
@e = dso_local local_unnamed_addr global i32 0, align 4
@b.0 = internal unnamed_addr global i1 false, align 4
@a = dso_local local_unnamed_addr global i32 0, align 4
@d = dso_local local_unnamed_addr global [7 x i32] zeroinitializer, align 16
; Function Attrs: nounwind uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
store i32 8, i32* getelementptr inbounds ([7 x i32], [7 x i32]* @d, i64 0, i64 0), align 16, !tbaa !3
store i1 true, i1* @b.0, align 4
tail call void @bar11_() #2
%1 = load i32, i32* @a, align 4, !tbaa !3
%2 = sext i32 %1 to i64
%3 = getelementptr inbounds [7 x i32], [7 x i32]* @d, i64 0, i64 %2
%4 = load i32, i32* %3, align 4, !tbaa !3
store i32 %4, i32* getelementptr inbounds ([7 x i32], [7 x i32]* @d, i64 0, i64 0), align 16, !tbaa !3
%5 = icmp eq i32 %4, 0
br i1 %5, label %6, label %9
6: ; preds = %0, %6
%7 = load i32, i32* %3, align 4, !tbaa !3
store i32 %7, i32* getelementptr inbounds ([7 x i32], [7 x i32]* @d, i64 0, i64 0), align 16, !tbaa !3
%8 = icmp eq i32 %7, 0
br i1 %8, label %6, label %9
9: ; preds = %6, %0
%10 = load i32, i32* @e, align 4, !tbaa !3
%11 = icmp slt i32 %10, 2
br i1 %11, label %12, label %13
12: ; preds = %9
store i32 2, i32* @e, align 4, !tbaa !3
br label %13
13: ; preds = %12, %9
ret i32 0
}
declare dso_local void @bar11_() local_unnamed_addr #1
attributes #0 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }
!llvm.module.flags = !{!0, !1}
!llvm.ident = !{!2}
!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 7, !"uwtable", i32 1}
!2 = !{!"clang version 14.0.4 (https://github.com/llvm/llvm-project.git 29f1039a7285a5c3a9c353d054140bf2556d4c4d)"}
!3 = !{!4, !4, i64 0}
!4 = !{!"int", !5, i64 0}
!5 = !{!"omnipotent char", !6, i64 0}
!6 = !{!"Simple C/C++ TBAA"}
```
</p></details>
------------------------------------------------
### Bisection
Bisected to: fc539b0004d4fe8072aca00e38599a2300a955ce
Committed by: @max-quazan
------------------------------------------------
`llvm-fc539b0004d4fe8072aca00e38599a2300a955ce -O3 [-emit-llvm] -S -o /dev/stdout case.c`
<details ><summary>Emitted IR</summary><p>
```ll
; ModuleID = 'case.c'
source_filename = "case.c"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
@e = dso_local local_unnamed_addr global i32 0, align 4
@b.0 = internal unnamed_addr global i1 false, align 4
@a = dso_local local_unnamed_addr global i32 0, align 4
@d = dso_local local_unnamed_addr global [7 x i32] zeroinitializer, align 16
; Function Attrs: nounwind uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
store i32 8, i32* getelementptr inbounds ([7 x i32], [7 x i32]* @d, i64 0, i64 0), align 16, !tbaa !3
store i1 true, i1* @b.0, align 4
tail call void @bar11_() #2
%1 = load i32, i32* @a, align 4, !tbaa !3
%2 = sext i32 %1 to i64
%3 = getelementptr inbounds [7 x i32], [7 x i32]* @d, i64 0, i64 %2
%4 = load i32, i32* %3, align 4, !tbaa !3
store i32 %4, i32* getelementptr inbounds ([7 x i32], [7 x i32]* @d, i64 0, i64 0), align 16, !tbaa !3
%5 = icmp eq i32 %4, 0
br i1 %5, label %6, label %23
6: ; preds = %0, %15
%7 = phi i32* [ %20, %15 ], [ %3, %0 ]
%8 = phi i16 [ 0, %15 ], [ 1, %0 ]
br label %12
9: ; preds = %12
%10 = load i32, i32* %7, align 4, !tbaa !3
store i32 %10, i32* getelementptr inbounds ([7 x i32], [7 x i32]* @d, i64 0, i64 0), align 16, !tbaa !3
%11 = icmp eq i32 %10, 0
br i1 %11, label %12, label %23
12: ; preds = %9, %6
%13 = phi i16 [ %8, %6 ], [ 1, %9 ]
%14 = icmp eq i16 %13, 0
br i1 %14, label %15, label %9
15: ; preds = %12
tail call void @foo() #2
%16 = load i32, i32* @a, align 4, !tbaa !3
%17 = add nsw i32 %16, 1
store i32 %17, i32* @a, align 4, !tbaa !3
tail call void @bar11_() #2
%18 = load i32, i32* @a, align 4, !tbaa !3
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds [7 x i32], [7 x i32]* @d, i64 0, i64 %19
%21 = load i32, i32* %20, align 4, !tbaa !3
store i32 %21, i32* getelementptr inbounds ([7 x i32], [7 x i32]* @d, i64 0, i64 0), align 16, !tbaa !3
%22 = icmp eq i32 %21, 0
br i1 %22, label %6, label %23
23: ; preds = %15, %9, %0
%24 = load i32, i32* @e, align 4, !tbaa !3
%25 = icmp slt i32 %24, 2
br i1 %25, label %26, label %27
26: ; preds = %23
store i32 2, i32* @e, align 4, !tbaa !3
br label %27
27: ; preds = %26, %23
ret i32 0
}
declare dso_local void @bar11_() local_unnamed_addr #1
declare dso_local void @foo() local_unnamed_addr #1
attributes #0 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }
!llvm.module.flags = !{!0, !1}
!llvm.ident = !{!2}
!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 7, !"uwtable", i32 2}
!2 = !{!"clang version 15.0.0 (https://github.com/llvm/llvm-project.git fc539b0004d4fe8072aca00e38599a2300a955ce)"}
!3 = !{!4, !4, i64 0}
!4 = !{!"int", !5, i64 0}
!5 = !{!"omnipotent char", !6, i64 0}
!6 = !{!"Simple C/C++ TBAA"}
```
</p></details>
------------------------------------------------
Previous commit: 9798b33d1dc14f5334e2cc117e3896510fa57b82
`llvm-9798b33d1dc14f5334e2cc117e3896510fa57b82 -O3 [-emit-llvm] -S -o /dev/stdout case.c`
<details ><summary>Emitted IR</summary><p>
```ll
; ModuleID = 'case.c'
source_filename = "case.c"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
@e = dso_local local_unnamed_addr global i32 0, align 4
@b.0 = internal unnamed_addr global i1 false, align 4
@a = dso_local local_unnamed_addr global i32 0, align 4
@d = dso_local local_unnamed_addr global [7 x i32] zeroinitializer, align 16
; Function Attrs: nounwind uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
store i32 8, i32* getelementptr inbounds ([7 x i32], [7 x i32]* @d, i64 0, i64 0), align 16, !tbaa !3
store i1 true, i1* @b.0, align 4
tail call void @bar11_() #2
%1 = load i32, i32* @a, align 4, !tbaa !3
%2 = sext i32 %1 to i64
%3 = getelementptr inbounds [7 x i32], [7 x i32]* @d, i64 0, i64 %2
%4 = load i32, i32* %3, align 4, !tbaa !3
store i32 %4, i32* getelementptr inbounds ([7 x i32], [7 x i32]* @d, i64 0, i64 0), align 16, !tbaa !3
%5 = icmp eq i32 %4, 0
br i1 %5, label %6, label %9
6: ; preds = %0, %6
%7 = load i32, i32* %3, align 4, !tbaa !3
store i32 %7, i32* getelementptr inbounds ([7 x i32], [7 x i32]* @d, i64 0, i64 0), align 16, !tbaa !3
%8 = icmp eq i32 %7, 0
br i1 %8, label %6, label %9
9: ; preds = %6, %0
%10 = load i32, i32* @e, align 4, !tbaa !3
%11 = icmp slt i32 %10, 2
br i1 %11, label %12, label %13
12: ; preds = %9
store i32 2, i32* @e, align 4, !tbaa !3
br label %13
13: ; preds = %12, %9
ret i32 0
}
declare dso_local void @bar11_() local_unnamed_addr #1
attributes #0 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }
!llvm.module.flags = !{!0, !1}
!llvm.ident = !{!2}
!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 7, !"uwtable", i32 2}
!2 = !{!"clang version 15.0.0 (https://github.com/llvm/llvm-project.git 9798b33d1dc14f5334e2cc117e3896510fa57b82)"}
!3 = !{!4, !4, i64 0}
!4 = !{!"int", !5, i64 0}
!5 = !{!"omnipotent char", !6, i64 0}
!6 = !{!"Simple C/C++ TBAA"}
```
</p></details>
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztXFtv2zoS_jXOCyFDpO4PfkjSFiiwiz17et4DSqIcbWXJR6KS9Pz6naEupi527cTZk0VVuI4ozgyHM-SQ82WQsIh_bFbmp5V5u3LNiEsS8UqsI7JiFmMWtRm8bvs7quYTNe00l4Sv2D0RK-uueVVJLtOIYE-4cu5WzieysuC_d8eQkK28Tz0tEsVA5AFV__KpSGMS8pLShxXzsbViwbA3KYqZLm3kCLqrx6KUZAsUOHhDQkj0yEuSKJVQPdrph2qYXcPvZRIYqwRzqDfWHU72Tn0GQslBX10h7BiwT9jIcFxscN0WDU2aoIiOEkfQOgkphazLfKC0GlmJ3M7KSiZCRmQiq8RYVdLafTxFNf9S8O-jt-hprblV-lgwvAuf3voDJo2lf-wf0LE7nuaNCgOnwis6VOtgdwITsXDh4WPvPs11oIjQFTmM3K32vpllTzvDprbjxDGNozCME5Y4SWjZUUQTZvthEvtxYHtx5DAcX5Z1_h21Nf5lAT_sr5zkhQT7prs05xJ0c000K_SFtSTdGPhVlFuD2mtzbWvca307_sHLrZAr6xb5Xnz3wbUNGC8vnnMjS_P6xdjm9WgLGxf-G23_N1mAgKkNsUulmh-ueuMbMQog-xKLJ_iuZFzUXRQ6KG7dx0LyNKvAk5-hVdW7HS9_QOMzCJMiJl9_h9cooO-B9h5_zEWvLOsE35F_FnGdia9tlGJeOzbz2qBS1GUkHpI0EznfiZaKdVSsoZLKESTmkmf8B06hpRPGDtwjjD3zTHiwmPrCJh028cm11ZeRdg-Jj0yU-Ubu44Pb8UDfN4rbYDi-LNN91ut4dEF0XO23bTYscVU8ZEXEM6K-H-ocZxw_8DguyTYrQuhJLUZMjOM8S7c5sXsR4dpUQmCTijIHylluShIOkWVOAH-7DvHZIvDMIS8oCRfhX6Is0jyVKQiE54NoMLhuKFgtX-o8kmmRk1spywp3Xl7U-XOax6R-ljzMREMbiyTNhaYLKg0qavFrRjs4dk09rlWyKIVi9VGpvSxRRjxQEJ5XjMqQc_zpjFgprIlaaMzgp4npCMHNBbsuy4g6X5FOO9DUdaCPy8yhys5ZwWNlwYNwros-ohjwM8VfiRfZmAUlyoLgsj8QWc3xJaTIxE7kEodI8xCsHVdD_41NA3Ka9YEPOJwm1Z5XHYY7Q_WDO1DSpR4BHqfZItFuT8SfA0FmRxWW6DSkxdcZD0WGLXfQYpa-LjEqkAv_4VrelwJNqYKFYzZqO1S3lqd6949pM1HnTlF4PSlprd_2WG2Hqd4fxPi9mNRXtOasBDrHDvbopx3osw6uMWvWaeLqy9sc64tz6AjnNGbjGVM69LTfyJ33NKUD51I29PXg9Kbs8mlPZh0c3_b9DW-y5603bnrabD2IcySvnvuNr9YMnd1h1L5wlAujmPPWGbnTOOZMAxn1rhbJ6GCZ-sdiWbNDLwlm9OLzBZmCuXDWiJpZ5cHZAY2Z11zkKP7IiQUR7lJLMfoKSzE2Z6lG1NRSbBgAglOWsq5gqSbg6NHQ1HU_cmTCrfHM01479aqs3yrMbuCAyeyHBx8bLRRvMP1XHH3TM8CaOvrSaeqn1EhF7xoqup2Hel0h6W8vwqOctb1-RhmHuczGwfmLJz3FfzgWzmDmcDVOIZkVVXuhbeCfyU0Zc5SkBDnGvlBpAyYmFgRBlhc5WB2XCYMs2cjElmfGk4jAP8ZzGsvHntJsyfLCkCXf79N8a-y4RtBcfxVNJXn03diXhWwkhXWSiNKo4M7fk_stbZNQGdG-7rsgnTIgsA_6E8FlXYqqJ1qxu-gFIyA8JC9V2Tztdi_NQ6Vyn-aBNU8vvtfJrHMxGHErclGmkeru_Ds0Lu2Ne44tf1EjsekKHG0X2MoISKx3CgtYJxnfdnuPYjrGaBsZaXvj60ImXF96Sa2MNIYjfshsT4czNQrcxp1cmMYzQpQPncHx8Id-Wx-Hjpi9A_NvX-_JP8STyDRepvOyU7yfT_Nax3m75PcIpz00CAIoGc-35EmUFWbT1FmbCCAw_1HKPebVK_YFPttUPtbhOip20FCYUfMDF-h_YIGugYCci0Yh6scGajlDtboj3D3cvTRidzIH2GjthKHtzTJ5E6Zil6d72F2IUoOjDwL8WQH-RMC3dIcgD6Jd9w2cSf64u70dTG0EXCpobN-AYgprU2DaGB27Gjw4BS9fC_wt8N8C_y3wXwv_qdv37dFEEsSOc8nRi9v5xNJUgfFoIjO-Hh8gxZS2Mt8HVGznezohtzQR74ArnmfBn4KM3VRO4owzeUgHD_7drr8idjkA8a4KXergiHdNF3gfxAX-nAu8eRf457rgKjhql5_qwEF7x53f0SeSan3GOo6qYQfNdXyKHZxGUukAOrkukjqCDi6bqI4ejJS8Kr7Ta3seeHA4vV4LIyxIwIIEfCQjXRcJOCPzZ_-7zH-agdNjef9sBt7kaq_LwFmQUNMKuMd8hzuRxYPIcqzYdCA1N8MELgRubEd2PM3AraFaXYi0Z3PhKYowyMCdWSZnwnQ0Az8373-vDPxNuTezmg-5SyuhkpSmo2lCjiwLPEuSyLGC0DRNO7YT4Zse4xE3TWH5ThBwCNImDxwnavOY-2LXZtjhD1VmhCnMi_Fnzf_i-bVhg3NVWyqJFihhgRIWKGGBEn5xKOE9y6D032AfyqA64zc1QexAfXklFN4r9FIo56JSKDoIvFfJ4QeVXyeS95NFE_MLr7k0f4CVN67L0tW7uDDrPeCEKZLVXpH1NfOzcrRgXI1mD2eNYrrSq5lZ28NZD3fgADuCvqvAE0ej_PFyNPftMb795dy4Ik2tnyMVad7lA114dE2Lui6fVzA9vPzp6cXM9zm-6E8qrw5xhJmXBpKmZOoDBJI3VXSdrH27CuLn9IjfFJedKei6GJf9v63pej0w-5HKut6OzB6XtJR6fUzscgF4F4D3VInVTwHet5RYnY0aLgDvewG8v5XiKS3qikQKk8XjJ_ACP7QsrHyjduJYli1YFFHqgV8CF9KahDte6A8xuhZsPZd3qd5aINcFcl0g1wVyJQvkulRvvcEFS_XWUr31CiWX6q1fIG9dkvsluf_bkvuz08gluZ9P7m_ijRUHVsBvZCozsfkk4NC8L2JBPrd_5gl99LvYwuZR7uKySavbv45Enqp1W4AHNr6py2xzmRuhmVZVjVvzi-NS6t88bpjl0ZjzgNtubPKIglstEYc0MEM7dOzoRh1a1ab5G2036YaZEIZdGlAGpPba9UInNl3hxsKJXCfG0xASoGytdktRbm_KjdIhrLcVdGZpJatDJ4eZbnMhOvm8lo9Fufl3zcs6vFHabpSq_wWTmyBj">