From 46a2687e9c6c9265dacb03e8da7eb4be9a57801a Mon Sep 17 00:00:00 2001
From: mac/cli <chengcli@umich.edu>
Date: Sun, 10 Mar 2024 17:05:09 -0400
Subject: [PATCH 01/22] Remove check_reconstruct

---
 src/checks.cpp | 19 +------------------
 1 file changed, 1 insertion(+), 18 deletions(-)

diff --git a/src/checks.cpp b/src/checks.cpp
index 045aea3a..ae9700db 100644
--- a/src/checks.cpp
+++ b/src/checks.cpp
@@ -83,24 +83,7 @@ void check_eos_cons2prim(AthenaArray<Real> const& prim, int k, int j, int il,
 }
 
 void check_reconstruct(AthenaArray<Real> const& wl, AthenaArray<Real> const& wr,
-                       int dir, int k, int j, int il, int iu) {
-#ifdef ENABLE_GLOG
-  for (int i = il; i <= iu; ++i) {
-    char name[80];
-    snprintf(name, 80, "wl-den-%d", dir + 1);
-    LOG_IF(FATAL, wl(IDN, i) < 0.) << print_column_table(name, wl, il, iu);
-
-    snprintf(name, 80, "wr-den-%d", dir + 1);
-    LOG_IF(FATAL, wr(IDN, i) < 0.) << print_column_table(name, wr, il, iu);
-
-    snprintf(name, 80, "wl-pre-%d", dir + 1);
-    LOG_IF(FATAL, wl(IPR, i) < 0.) << print_column_table(name, wl, il, iu);
-
-    snprintf(name, 80, "wr-pre-%d", dir + 1);
-    LOG_IF(FATAL, wr(IPR, i) < 0.) << print_column_table(name, wr, il, iu);
-  }
-#endif  // ENABLE_GLOG
-}
+                       int dir, int k, int j, int il, int iu) {}
 
 void check_hydro_riemann_solver_flux(AthenaArray<Real> const& flux, int ivx,
                                      int k, int j, int il, int iu) {

From 81ed0365c07fd9a5812cb2874739cbf0889f6fa4 Mon Sep 17 00:00:00 2001
From: mac/cli <chengcli@umich.edu>
Date: Fri, 15 Mar 2024 23:04:43 -0400
Subject: [PATCH 02/22] wip

---
 src/exo3/cs_velocity_rotation.hpp | 9 +++++++++
 1 file changed, 9 insertions(+)
 create mode 100644 src/exo3/cs_velocity_rotation.hpp

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
new file mode 100644
index 00000000..36ea0687
--- /dev/null
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -0,0 +1,9 @@
+#ifndef SRC_EXO3_VELOCITY_ROTATION_HPP_
+#define SRC_EXO3_VELOCITY_ROTATION_HPP_
+
+template <typename T>
+inline void cs_vel_p1_to_p2(T *v1, T *v2, T *v3) {
+  // fill in code here
+}
+
+#endif  // SRC_EXO3_VELOCITY_ROTATION_HPP_

From edcda980c52057143493cd9981cac3df8b5d261a Mon Sep 17 00:00:00 2001
From: mac/cli <chengcli@umich.edu>
Date: Sat, 16 Mar 2024 11:08:47 -0400
Subject: [PATCH 03/22] wip

---
 src/exo3/cs_velocity_rotation.hpp | 57 +++++++++++++++++++++++++++++--
 1 file changed, 55 insertions(+), 2 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 36ea0687..b56bef2b 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -1,9 +1,62 @@
 #ifndef SRC_EXO3_VELOCITY_ROTATION_HPP_
 #define SRC_EXO3_VELOCITY_ROTATION_HPP_
 
-template <typename T>
-inline void cs_vel_p1_to_p2(T *v1, T *v2, T *v3) {
+#include <athena/athena.hpp>  // Real
+
+//! Panel number assiangments
+//! (1) Top
+//! (2) Front
+//! (3) Left
+//!
+//!                                           z
+//!                ___________                |
+//!                |\        .\           x___| (1)
+//!                | \   1   . \              /
+//!                |  \_________\           y/
+//!                | 3 |     .  |
+//!                \. .|......  |
+//! z___ (3)        \  |    2 . |
+//!    /|            \ |       .|             y
+//!   / |             \|________|             |
+//!  y  x                                 (2) |___x
+//!                                          /
+//!                                        z/
+
+//! Panel number assiangments
+//! (4) Right
+//! (5) Bottom
+//! (6) Back
+//!                                        y  x
+//!                __________              | /
+//!                |\       .\             |/___z
+//!                | \      . \           (4)
+//!     y  z       |  \________\
+//!     | /        |  |  6  .  |
+//! x___|/         |..|......  |
+//!      (6)       \  |     . 4|       (5) ___ x
+//!                 \ |  5   . |          /|
+//!                  \|_______.|         / |
+//!                                     y  z
+
+namespace CubedSphereUtility {
+
+//! Transform cubed sphere velocity to local cartesian velocity
+inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {}
+
+//! Transform local cartesian velocity to cubed sphere velocity
+inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {}
+
+//! Transform cubed sphere velocity from panel 1 to panel 2
+//! \param a $x = \tan(\xi)$ coordinate
+//! \param b $y = \tan(\eta)$ coordinate
+inline void vel_zab_p1_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);
+
   // fill in code here
+
+  vel_zxy_to_zab(v1, v2, v3, a, b);
 }
 
+}  // namespace CubedSphereUtility
+
 #endif  // SRC_EXO3_VELOCITY_ROTATION_HPP_

From d0c7bb66a55d496f1cf73f451437871aa2e5949f Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Mon, 18 Mar 2024 00:15:26 -0400
Subject: [PATCH 04/22] plane to plane transformation implement

---
 src/exo3/cs_velocity_rotation.hpp | 309 +++++++++++++++++++++++++++++-
 1 file changed, 303 insertions(+), 6 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index b56bef2b..a94a37a8 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -41,20 +41,317 @@
 namespace CubedSphereUtility {
 
 //! Transform cubed sphere velocity to local cartesian velocity
-inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {}
+inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+
+}
 
 //! Transform local cartesian velocity to cubed sphere velocity
-inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {}
+inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+
+}
 
 //! Transform cubed sphere velocity from panel 1 to panel 2
-//! \param a $x = \tan(\xi)$ coordinate
+//! \param a $x = \tan(\xi)$ coordinates
 //! \param b $y = \tan(\eta)$ coordinate
+
+inline void vel_zab_p1_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,1}, {0,1,0}, {-1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p2_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,1}, {0,1,0}, {-1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p3_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,1}, {0,1,0}, {-1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p4_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,1}, {0,1,0}, {-1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p3_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,-1}, {0,1,0}, {1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p5_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,-1}, {0,1,0}, {1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p4_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,-1}, {0,1,0}, {1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p6_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,-1}, {0,1,0}, {1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p1_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{-1,0,0}, {0,1,0}, {0,0,-1}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p2_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{-1,0,0}, {0,1,0}, {0,0,-1}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p6_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{-1,0,0}, {0,1,0}, {0,0,-1}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p5_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{-1,0,0}, {0,1,0}, {0,0,-1}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p5_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{-1,0,0}, {0,0,-1}, {0,-1,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p2_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{-1,0,0}, {0,-1,0}, {0,0,-1}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p5_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,-1,0}, {0,0,-1}, {1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p4_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,1}, {-1,0,0}, {0,-1,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p5_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{1,0,0}, {0,0,-1}, {0,1,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p6_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{1,0,0}, {0,0,1}, {0,-1,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p3_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,-1}, {1,0,0}, {0,-1,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p2_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,1,0}, {0,0,-1}, {-1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p3_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,-1,0}, {1,0,0}, {0,0,1}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p4_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,1,0}, {-1,0,0}, {0,0,1}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p3_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,1}, {1,0,0}, {0,1,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p6_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,1,0}, {0,0,1}, {1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
 inline void vel_zab_p1_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,1}, {1,0,0}, {0,1,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
 
-  // fill in code here
+inline void vel_zab_p2_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,1,0}, {0,0,1}, {1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p1_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,-1,0}, {0,0,1}, {-1,0,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p4_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{0,0,-1}, {-1,0,0}, {0,1,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
+
+inline void vel_zab_p1_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{-1,0,0}, {0,0,1}, {0,1,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+}
 
-  vel_zxy_to_zab(v1, v2, v3, a, b);
+inline void vel_zab_p6_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3]={{-1,0,0}, {0,0,1}, {0,1,0}};//define the transformation matrix
+  //multiply the velocity vector on the right of the transformation
+  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
+  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
+  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
+  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
 }
 
 }  // namespace CubedSphereUtility

From 0ca59dcc2aa169a566c6d559955d5b1c3fe097aa Mon Sep 17 00:00:00 2001
From: mac/cli <chengcli@umich.edu>
Date: Mon, 18 Mar 2024 00:45:44 -0400
Subject: [PATCH 05/22] wip

---
 src/exo3/cs_velocity_rotation.hpp | 588 +++++++++++++++++++-----------
 1 file changed, 370 insertions(+), 218 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index a94a37a8..86d0fc6f 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -41,317 +41,469 @@
 namespace CubedSphereUtility {
 
 //! Transform cubed sphere velocity to local cartesian velocity
-inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-
-}
+inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {}
 
 //! Transform local cartesian velocity to cubed sphere velocity
-inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-
-}
+inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {}
 
 //! Transform cubed sphere velocity from panel 1 to panel 2
 //! \param a $x = \tan(\xi)$ coordinates
 //! \param b $y = \tan(\eta)$ coordinate
-
-inline void vel_zab_p1_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,1}, {0,1,0}, {-1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+
+  switch (panel) {
+    case 2:
+      // z->y, x->-x, y->z
+      (*vx) *= -1;
+      vel_zxy_to_zab(vy, vx, vz, a, b);
+      break;
+    case 3:
+      // z->-x, x->z, y->y
+      (*vz) *= -1;
+      vel_zxy_to_zab(vx, vz, vy, a, b);
+      break;
+    case 4:
+      break;
+    case 6:
+      break;
+  }
 }
 
 inline void vel_zab_p2_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,1}, {0,1,0}, {-1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, 1}, {0, 1, 0}, {-1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p3_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,1}, {0,1,0}, {-1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, 1}, {0, 1, 0}, {-1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p4_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,1}, {0,1,0}, {-1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, 1}, {0, 1, 0}, {-1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p3_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,-1}, {0,1,0}, {1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, -1}, {0, 1, 0}, {1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p5_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,-1}, {0,1,0}, {1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, -1}, {0, 1, 0}, {1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p4_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,-1}, {0,1,0}, {1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, -1}, {0, 1, 0}, {1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p6_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,-1}, {0,1,0}, {1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, -1}, {0, 1, 0}, {1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p1_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{-1,0,0}, {0,1,0}, {0,0,-1}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {-1, 0, 0}, {0, 1, 0}, {0, 0, -1}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p2_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{-1,0,0}, {0,1,0}, {0,0,-1}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {-1, 0, 0}, {0, 1, 0}, {0, 0, -1}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p6_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{-1,0,0}, {0,1,0}, {0,0,-1}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {-1, 0, 0}, {0, 1, 0}, {0, 0, -1}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p5_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{-1,0,0}, {0,1,0}, {0,0,-1}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {-1, 0, 0}, {0, 1, 0}, {0, 0, -1}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p5_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{-1,0,0}, {0,0,-1}, {0,-1,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {-1, 0, 0}, {0, 0, -1}, {0, -1, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p2_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{-1,0,0}, {0,-1,0}, {0,0,-1}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {-1, 0, 0}, {0, -1, 0}, {0, 0, -1}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p5_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,-1,0}, {0,0,-1}, {1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, -1, 0}, {0, 0, -1}, {1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p4_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,1}, {-1,0,0}, {0,-1,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, 1}, {-1, 0, 0}, {0, -1, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p5_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{1,0,0}, {0,0,-1}, {0,1,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {1, 0, 0}, {0, 0, -1}, {0, 1, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p6_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{1,0,0}, {0,0,1}, {0,-1,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {1, 0, 0}, {0, 0, 1}, {0, -1, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p3_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,-1}, {1,0,0}, {0,-1,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, -1}, {1, 0, 0}, {0, -1, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p2_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,1,0}, {0,0,-1}, {-1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 1, 0}, {0, 0, -1}, {-1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p3_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,-1,0}, {1,0,0}, {0,0,1}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, -1, 0}, {1, 0, 0}, {0, 0, 1}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p4_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,1,0}, {-1,0,0}, {0,0,1}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 1, 0}, {-1, 0, 0}, {0, 0, 1}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p3_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,1}, {1,0,0}, {0,1,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, 1}, {1, 0, 0}, {0, 1, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p6_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,1,0}, {0,0,1}, {1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 1, 0}, {0, 0, 1}, {1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p1_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,1}, {1,0,0}, {0,1,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, 1}, {1, 0, 0}, {0, 1, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p2_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,1,0}, {0,0,1}, {1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 1, 0}, {0, 0, 1}, {1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p1_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,-1,0}, {0,0,1}, {-1,0,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, -1, 0}, {0, 0, 1}, {-1, 0, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p4_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{0,0,-1}, {-1,0,0}, {0,1,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {0, 0, -1}, {-1, 0, 0}, {0, 1, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p1_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{-1,0,0}, {0,0,1}, {0,1,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {-1, 0, 0}, {0, 0, 1}, {0, 1, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 inline void vel_zab_p6_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3]={{-1,0,0}, {0,0,1}, {0,1,0}};//define the transformation matrix
-  //multiply the velocity vector on the right of the transformation
-  v1 = M[0][0]*v1+M[1][0]*v2+M[2][0]*v3;
-  v2 = M[0][1]*v1+M[1][1]*v2+M[2][1]*v3;
-  v2 = M[0][2]*v1+M[1][2]*v2+M[2][2]*v3;
-  vel_zxy_to_zab(v1, v2, v3, a, b);//translate the cubed sphere coordinate into cartesian coordinate
+  vel_zab_to_zxy(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
+  M[3][3] = {
+      {-1, 0, 0}, {0, 0, 1}, {0, 1, 0}};  // define the transformation matrix
+  // multiply the velocity vector on the right of the transformation
+  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
+  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
+  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
+  vel_zxy_to_zab(
+      v1, v2, v3, a,
+      b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
 
 }  // namespace CubedSphereUtility

From ea9521b595dcdf6022a4823e6b2940e1c3f46c03 Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Mon, 18 Mar 2024 01:05:42 -0400
Subject: [PATCH 06/22] transform from plane 1 to others

---
 src/exo3/cs_velocity_rotation.hpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 86d0fc6f..0bf23bc5 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -65,8 +65,15 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
       vel_zxy_to_zab(vx, vz, vy, a, b);
       break;
     case 4:
+      // z->-x, x->-y, y->z
+      (*vz) *= -1;
+      (*vx) *= -1;
+      vel_zxy_to_zab(vy, vz, vx, a, b);
       break;
     case 6:
+      // z->-y, x->x, y->z
+      (*vz) *= -1;
+      vel_zxy_to_zab(vx, vz, vy, a, b);
       break;
   }
 }

From 46df6c8f78eb4d5a5d3b24b1c248428e517ca1c0 Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Mon, 18 Mar 2024 01:07:52 -0400
Subject: [PATCH 07/22] transform from plane 1 to others correction

---
 src/exo3/cs_velocity_rotation.hpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 0bf23bc5..58571af6 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -68,12 +68,12 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
       // z->-x, x->-y, y->z
       (*vz) *= -1;
       (*vx) *= -1;
-      vel_zxy_to_zab(vy, vz, vx, a, b);
+      vel_zxy_to_zab(vx, vy, vz, a, b);
       break;
     case 6:
       // z->-y, x->x, y->z
       (*vz) *= -1;
-      vel_zxy_to_zab(vx, vz, vy, a, b);
+      vel_zxy_to_zab(vy, vx, vz, a, b);
       break;
   }
 }

From 7dfcc01af74be44bcc7971b8db6a4fedeca66a8a Mon Sep 17 00:00:00 2001
From: mac/cli <chengcli@umich.edu>
Date: Mon, 18 Mar 2024 01:18:23 -0400
Subject: [PATCH 08/22] wip

---
 src/exo3/cs_velocity_rotation.hpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 58571af6..39c2a48a 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -66,13 +66,15 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
       break;
     case 4:
       // z->-x, x->-y, y->z
-      (*vz) *= -1;
+      // z->y, x->-z, y->-x
       (*vx) *= -1;
+      (*vy) *= -1;
       vel_zxy_to_zab(vx, vy, vz, a, b);
       break;
     case 6:
       // z->-y, x->x, y->z
-      (*vz) *= -1;
+      // z->y, x->x, y->-z
+      (*vy) *= -1;
       vel_zxy_to_zab(vy, vx, vz, a, b);
       break;
   }

From 9f25700edf64ec13e968733f6d1b5e27d6e49f9f Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Mon, 18 Mar 2024 01:28:52 -0400
Subject: [PATCH 09/22] update

---
 src/exo3/cs_velocity_rotation.hpp | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 39c2a48a..e4494e57 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -65,14 +65,12 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
       vel_zxy_to_zab(vx, vz, vy, a, b);
       break;
     case 4:
-      // z->-x, x->-y, y->z
       // z->y, x->-z, y->-x
       (*vx) *= -1;
       (*vy) *= -1;
       vel_zxy_to_zab(vx, vy, vz, a, b);
       break;
     case 6:
-      // z->-y, x->x, y->z
       // z->y, x->x, y->-z
       (*vy) *= -1;
       vel_zxy_to_zab(vy, vx, vz, a, b);

From e04015de65c991b207a799e78bcec783c851e0e7 Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Mon, 18 Mar 2024 01:45:45 -0400
Subject: [PATCH 10/22] modified

---
 src/exo3/cs_velocity_rotation.hpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index e4494e57..c4cb2af3 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -68,7 +68,7 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
       // z->y, x->-z, y->-x
       (*vx) *= -1;
       (*vy) *= -1;
-      vel_zxy_to_zab(vx, vy, vz, a, b);
+      vel_zxy_to_zab(vy, vz, vx, a, b);
       break;
     case 6:
       // z->y, x->x, y->-z

From e9676be34ba0e795465dea81640b24a8ca4aa495 Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Mon, 18 Mar 2024 12:15:50 -0400
Subject: [PATCH 11/22] update on panel 1

---
 src/exo3/cs_velocity_rotation.hpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index c4cb2af3..c34c189c 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -65,13 +65,13 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
       vel_zxy_to_zab(vx, vz, vy, a, b);
       break;
     case 4:
-      // z->y, x->-z, y->-x
+      // z->-x, x->-y, y->z
       (*vx) *= -1;
       (*vy) *= -1;
-      vel_zxy_to_zab(vy, vz, vx, a, b);
+      vel_zxy_to_zab(vx, vy, vz, a, b);
       break;
     case 6:
-      // z->y, x->x, y->-z
+      // z->-y, x->x, y->z
       (*vy) *= -1;
       vel_zxy_to_zab(vy, vx, vz, a, b);
       break;

From 515becef3bfa1d1a02b6b1f9c51548c27600583f Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Mon, 18 Mar 2024 22:40:25 -0400
Subject: [PATCH 12/22] test added and correction

---
 src/exo3/cs_velocity_rotation.hpp   | 34 +++++++++++++++++++++++++++--
 tests/CMakeLists.txt                |  1 +
 tests/test_cs_velocity_rotation.cpp | 34 +++++++++++++++++++++++++++++
 3 files changed, 67 insertions(+), 2 deletions(-)
 create mode 100644 tests/test_cs_velocity_rotation.cpp

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index c34c189c..3b0e5dd3 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -21,7 +21,7 @@
 //!  y  x                                 (2) |___x
 //!                                          /
 //!                                        z/
-
+ 
 //! Panel number assiangments
 //! (4) Right
 //! (5) Bottom
@@ -78,6 +78,36 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
   }
 }
 
+inline void vel_zab_from_p1_test(std::vector<Real> &v, int panel) {
+    Real vz = v[0];
+    Real vx = v[1];
+    Real vy = v[2];
+    switch (panel) {
+    case 2:
+      // z->y, x->-x, y->z
+      //(*vx) *= -1;
+      v = {vy, -vx, vz};
+      break;
+    case 3:
+      // z->-x, x->z, y->y
+      //(*vz) *= -1;
+      v = {vx, -vz, vy};
+      break;
+    case 4:
+      // z->-x, x->-y, y->z
+      //(*vx) *= -1;
+      //(*vy) *= -1;
+      v = {-vx, -vy, vz};
+      break;
+    case 6:
+      // z->-y, x->x, y->z
+      //(*vy) *= -1;
+      v = {-vy, vx, vz};
+      break;
+  }
+
+}
+/*
 inline void vel_zab_p2_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
   vel_zab_to_zxy(
       v1, v2, v3, a,
@@ -512,7 +542,7 @@ inline void vel_zab_p6_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
       v1, v2, v3, a,
       b);  // translate the cubed sphere coordinate into cartesian coordinate
 }
-
+*/
 }  // namespace CubedSphereUtility
 
 #endif  // SRC_EXO3_VELOCITY_ROTATION_HPP_
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 7b8c7a88..5c8eb489 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -17,6 +17,7 @@ setup_test(test_read_cia_ff)
 setup_test(test_read_rayleigh)
 setup_test(test_read_yaml)
 setup_test(test_helios_ck_read)
+setup_test(test_cs_velocity_rotation)
 
 if (PVFMM_OPTION STREQUAL "ENABLE_PVFMM")
   setup_test(test_nbody)
diff --git a/tests/test_cs_velocity_rotation.cpp b/tests/test_cs_velocity_rotation.cpp
new file mode 100644
index 00000000..3173e464
--- /dev/null
+++ b/tests/test_cs_velocity_rotation.cpp
@@ -0,0 +1,34 @@
+// C/C++
+#include <algorithm>
+#include <cmath>
+#include <vector>
+
+// external
+#include <gtest/gtest.h>
+
+#include <application/application.hpp>
+
+// athena
+#include <athena/athena_arrays.hpp>
+
+// exo3
+#include <exo3/cs_velocity_rotation.hpp>
+
+TEST(vel_zab_from_p1_test, test_case_to_4) {
+  std::vector <Real> result = {1,2,3};
+  std::vector <Real> expected_result = {-2,-3,1};
+  CubedSphereUtility::vel_zab_from_p1_test(result, 4);
+  EXPECT_EQ(result, expected_result);
+}
+
+TEST(vel_zab_from_p1_test, test_case_to_6) {
+  std::vector <Real> result = {1,2,3};
+  std::vector <Real> expected_result = {-3,2,1};
+  CubedSphereUtility::vel_zab_from_p1_test(result, 6);
+  EXPECT_EQ(result, expected_result);
+}
+
+int main(int argc, char **argv) {
+  testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
\ No newline at end of file

From d7e73f69e71f3929c54aeb070686d8bb03a4f3f9 Mon Sep 17 00:00:00 2001
From: ziggy/cli <chengcli@umich.edu>
Date: Tue, 19 Mar 2024 00:01:17 -0400
Subject: [PATCH 13/22] wip

---
 data/fetch_exogcm_opacity.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/data/fetch_exogcm_opacity.sh b/data/fetch_exogcm_opacity.sh
index 5033c06b..7b7047f1 100755
--- a/data/fetch_exogcm_opacity.sh
+++ b/data/fetch_exogcm_opacity.sh
@@ -5,7 +5,8 @@ FILE="ck_data_01242024"
 DATA_DIR=$1/
 
 # Dropbox link
-DROPBOX_LINK="https://www.dropbox.com/scl/fi/tt2vez9jadfcq3j0wdw8x/ck_data_01242024.tar.gz?rlkey=dv7tmqpfy2uvs0u5lt2wz3c4k&dl=0"
+#DROPBOX_LINK="https://www.dropbox.com/scl/fi/tt2vez9jadfcq3j0wdw8x/ck_data_01242024.tar.gz?rlkey=dv7tmqpfy2uvs0u5lt2wz3c4k&dl=0"
+DROPBOX_LINK="https://www.dropbox.com/scl/fi/6nohk2uv89pupe8tjj9ib/ck_data_01242024.tar.gz?rlkey=58gjv5re6fusz1s9jk9fgpx95&dl=0"
 
 # Read expected SHA256 from the file
 EXPECTED_SHA256=$(grep "$FILE" ${DATA_DIR}checksums.txt | awk '{print $1}')

From f6baa0920e2eed8cb4b9e24a304df6c60ddd80c9 Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Fri, 22 Mar 2024 18:34:32 -0400
Subject: [PATCH 14/22] rotational transformation

---
 src/exo3/cs_velocity_rotation.hpp | 456 +-----------------------------
 1 file changed, 15 insertions(+), 441 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 3b0e5dd3..38a77492 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -41,14 +41,25 @@
 namespace CubedSphereUtility {
 
 //! Transform cubed sphere velocity to local cartesian velocity
-inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {}
+inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+
+}
 
 //! Transform local cartesian velocity to cubed sphere velocity
-inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {}
+inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+    Real vx = v2;
+    Real vy = v3;
+    Real delta = pow(pow(vx,2)+pow(vy,2)+1,1/2);
+    Real C = pow(1+pow(x,2),1/2);
+    Real D = pow(1+pow(y,2),1/2);
+    v1 = (vz+pow(vx,2)+pow(vy,2))/delta;
+    v2 = (-vx*vz/D+vx*(1+pow(vy,2))/D-vx*pow(vy,2)/D)/delta;
+    v3 = (-vy*vz/C-pow(vx,2)*vy/C+(1+pow(vx,2))*vy/C)/delta;
+}
 
 //! Transform cubed sphere velocity from panel 1 to panel 2
 //! \param a $x = \tan(\xi)$ coordinates
-//! \param b $y = \tan(\eta)$ coordinate
+//! \param b $y = \tan(\eta)$ coordinat
 inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
                             int panel) {
   vel_zab_to_zxy(vz, vx, vy, a, b);
@@ -105,444 +116,7 @@ inline void vel_zab_from_p1_test(std::vector<Real> &v, int panel) {
       v = {-vy, vx, vz};
       break;
   }
-
-}
-/*
-inline void vel_zab_p2_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, 1}, {0, 1, 0}, {-1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p3_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, 1}, {0, 1, 0}, {-1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p4_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, 1}, {0, 1, 0}, {-1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p3_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, -1}, {0, 1, 0}, {1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p5_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, -1}, {0, 1, 0}, {1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p4_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, -1}, {0, 1, 0}, {1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p6_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, -1}, {0, 1, 0}, {1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p1_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {-1, 0, 0}, {0, 1, 0}, {0, 0, -1}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p2_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {-1, 0, 0}, {0, 1, 0}, {0, 0, -1}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p6_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {-1, 0, 0}, {0, 1, 0}, {0, 0, -1}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p5_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {-1, 0, 0}, {0, 1, 0}, {0, 0, -1}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p5_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {-1, 0, 0}, {0, 0, -1}, {0, -1, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p2_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {-1, 0, 0}, {0, -1, 0}, {0, 0, -1}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p5_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, -1, 0}, {0, 0, -1}, {1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p4_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, 1}, {-1, 0, 0}, {0, -1, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p5_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {1, 0, 0}, {0, 0, -1}, {0, 1, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p6_to_p5(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {1, 0, 0}, {0, 0, 1}, {0, -1, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p3_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, -1}, {1, 0, 0}, {0, -1, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p2_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 1, 0}, {0, 0, -1}, {-1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p3_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, -1, 0}, {1, 0, 0}, {0, 0, 1}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p4_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 1, 0}, {-1, 0, 0}, {0, 0, 1}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p3_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, 1}, {1, 0, 0}, {0, 1, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p6_to_p3(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 1, 0}, {0, 0, 1}, {1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p1_to_p2(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, 1}, {1, 0, 0}, {0, 1, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p2_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 1, 0}, {0, 0, 1}, {1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p1_to_p4(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, -1, 0}, {0, 0, 1}, {-1, 0, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p4_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {0, 0, -1}, {-1, 0, 0}, {0, 1, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p1_to_p6(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {-1, 0, 0}, {0, 0, 1}, {0, 1, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-
-inline void vel_zab_p6_to_p1(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  vel_zab_to_zxy(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-  M[3][3] = {
-      {-1, 0, 0}, {0, 0, 1}, {0, 1, 0}};  // define the transformation matrix
-  // multiply the velocity vector on the right of the transformation
-  v1 = M[0][0] * v1 + M[1][0] * v2 + M[2][0] * v3;
-  v2 = M[0][1] * v1 + M[1][1] * v2 + M[2][1] * v3;
-  v2 = M[0][2] * v1 + M[1][2] * v2 + M[2][2] * v3;
-  vel_zxy_to_zab(
-      v1, v2, v3, a,
-      b);  // translate the cubed sphere coordinate into cartesian coordinate
-}
-*/
+ }
 }  // namespace CubedSphereUtility
 
 #endif  // SRC_EXO3_VELOCITY_ROTATION_HPP_

From c9ddef2877e2472149bec9e6d60b4cfcd072ac19 Mon Sep 17 00:00:00 2001
From: mac/cli <chengcli@umich.edu>
Date: Sat, 23 Mar 2024 17:39:49 -0400
Subject: [PATCH 15/22] cs_velocity_rotation.hpp

---
 src/exo3/cs_velocity_rotation.hpp | 40 ++++++++++++++++++-------------
 1 file changed, 23 insertions(+), 17 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 38a77492..4bddc0da 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -21,7 +21,7 @@
 //!  y  x                                 (2) |___x
 //!                                          /
 //!                                        z/
- 
+
 //! Panel number assiangments
 //! (4) Right
 //! (5) Bottom
@@ -41,20 +41,26 @@
 namespace CubedSphereUtility {
 
 //! Transform cubed sphere velocity to local cartesian velocity
-inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-
-}
+inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {}
 
 //! Transform local cartesian velocity to cubed sphere velocity
 inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-    Real vx = v2;
-    Real vy = v3;
-    Real delta = pow(pow(vx,2)+pow(vy,2)+1,1/2);
-    Real C = pow(1+pow(x,2),1/2);
-    Real D = pow(1+pow(y,2),1/2);
-    v1 = (vz+pow(vx,2)+pow(vy,2))/delta;
-    v2 = (-vx*vz/D+vx*(1+pow(vy,2))/D-vx*pow(vy,2)/D)/delta;
-    v3 = (-vy*vz/C-pow(vx,2)*vy/C+(1+pow(vx,2))*vy/C)/delta;
+  Real x = tan(a);
+  Real y = tan(b);
+
+  Real vx = *v2;
+  Real vy = *v3;
+  Real vz = *v1;
+
+  Real delta = pow(pow(x, 2) + pow(y, 2) + 1, 1 / 2);
+  Real C = pow(1 + pow(x, 2), 1 / 2);
+  Real D = pow(1 + pow(y, 2), 1 / 2);
+
+  *v1 = (vz + pow(vx, 2) + pow(vy, 2)) / delta;
+  *v2 =
+      (-vx * vz / D + vx * (1 + pow(vy, 2)) / D - vx * pow(vy, 2) / D) / delta;
+  *v3 =
+      (-vy * vz / C - pow(vx, 2) * vy / C + (1 + pow(vx, 2)) * vy / C) / delta;
 }
 
 //! Transform cubed sphere velocity from panel 1 to panel 2
@@ -90,10 +96,10 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
 }
 
 inline void vel_zab_from_p1_test(std::vector<Real> &v, int panel) {
-    Real vz = v[0];
-    Real vx = v[1];
-    Real vy = v[2];
-    switch (panel) {
+  Real vz = v[0];
+  Real vx = v[1];
+  Real vy = v[2];
+  switch (panel) {
     case 2:
       // z->y, x->-x, y->z
       //(*vx) *= -1;
@@ -116,7 +122,7 @@ inline void vel_zab_from_p1_test(std::vector<Real> &v, int panel) {
       v = {-vy, vx, vz};
       break;
   }
- }
+}
 }  // namespace CubedSphereUtility
 
 #endif  // SRC_EXO3_VELOCITY_ROTATION_HPP_

From b0b20fd9b2911d5378f0a1eafbb57ec8af1a1897 Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Tue, 26 Mar 2024 03:54:21 -0400
Subject: [PATCH 16/22] ab to xy and xy to ab

---
 src/exo3/cs_velocity_rotation.hpp | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 4bddc0da..098c2e69 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -41,7 +41,24 @@
 namespace CubedSphereUtility {
 
 //! Transform cubed sphere velocity to local cartesian velocity
-inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {}
+inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  Real x = tan(a);
+  Real y = tan(b);
+
+  Real vx = *v2;
+  Real vy = *v3;
+  Real vz = *v1;
+
+  Real delta = pow(pow(x, 2) + pow(y, 2) + 1, 1 / 2);
+  Real C = pow(1 + pow(x, 2), 1 / 2);
+  Real D = pow(1 + pow(y, 2), 1 / 2);
+
+  *v1 = (vz - D * x * vx - C * y * vy) / delta;
+  *v2 =
+      (x * vz + D * vx) / delta;
+  *v3 =
+      (y * vz + C * vy) / delta;
+}
 
 //! Transform local cartesian velocity to cubed sphere velocity
 inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {
@@ -56,11 +73,11 @@ inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {
   Real C = pow(1 + pow(x, 2), 1 / 2);
   Real D = pow(1 + pow(y, 2), 1 / 2);
 
-  *v1 = (vz + pow(vx, 2) + pow(vy, 2)) / delta;
+  *v1 = (vz + x * vx + y * vy) / delta;
   *v2 =
-      (-vx * vz / D + vx * (1 + pow(vy, 2)) / D - vx * pow(vy, 2) / D) / delta;
+      (-x * vz / D + vx * (1 + pow(vy, 2)) / D - vy * x * y / D) / delta;
   *v3 =
-      (-vy * vz / C - pow(vx, 2) * vy / C + (1 + pow(vx, 2)) * vy / C) / delta;
+      (-y * vz / C - x * y * vx / C + (1 + pow(x, 2)) * vy / C) / delta;
 }
 
 //! Transform cubed sphere velocity from panel 1 to panel 2

From c40270701307f25563bb5c4662dd8d82651248d0 Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Tue, 26 Mar 2024 21:07:31 -0400
Subject: [PATCH 17/22] rotation panel 1 done

---
 data/ck_data_01242024.tar.gz        | 169 ++++++++++++++++++++++++
 src/exo3/cs_velocity_rotation.hpp   | 192 +++++++++++++++++++++++-----
 tests/test_cs_velocity_rotation.cpp |  72 +++++++++--
 3 files changed, 388 insertions(+), 45 deletions(-)
 create mode 100644 data/ck_data_01242024.tar.gz

diff --git a/data/ck_data_01242024.tar.gz b/data/ck_data_01242024.tar.gz
new file mode 100644
index 00000000..1dad420e
--- /dev/null
+++ b/data/ck_data_01242024.tar.gz
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<html class="maestro global-header" xmlns="http://www.w3.org/1999/xhtml" lang="en">
+<head><meta charset="utf-8" />
+<meta content="noindex, nofollow, noimageindex" name="robots" />
+<meta content="width=device-width, initial-scale=1" name="viewport" />
+<script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.EDISON_METRICS_JS_EXECUTION_START = performance.now();
+</script><title>Dropbox - Error - Simplify your life</title>
+<link rel="shortcut icon" href="https://cfl.dropboxstatic.com/static/metaserver/static/images/favicon.ico"/>
+<script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.CSP_SCRIPT_NONCE = "AneY6l0rmcrTspXW3Ml/lWjNg/M="</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">(()=>{"use strict";const e=window;let a;const r=()=>{a=[],e.addRequireLoadCallback=e=>a.push(e),e.configureRequire=function(){const a=arguments;e.addRequireLoadCallback(()=>e.configureRequire.apply(null,a))},e.define=function(){const a=arguments;e.addRequireLoadCallback(()=>e.define.apply(null,a))},e.preLoadFile=(...a)=>{e.addRequireLoadCallback(()=>e.preLoadFile.apply(null,a))}};r(),e._insertRequireShim=r,e.InitRequireJs=r=>{e.requireContexts={},e.performance&&null!=e.performance.now&&(requirejs.onResourceLoad=(a,r,i)=>{const l=e.performance.now(),n=e.requireContexts[a.id];if(n){r.id in n.module_callback_times||(n.module_callback_times[r.id]={});const e=n.module_callback_times[r.id];e.loadTime=l,r.url&&(e.url=r.url),r.id&&(e.name=r.id),r.parentMap&&r.parentMap.url&&(e.parent=r.parentMap.url)}}),e.configureRequire=r,e.addRequireLoadCallback=e=>e(),a.forEach(e=>e())}})();
+
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">(function () {
+    var start = performance.now();
+    window.addRequireLoadCallback(function() {
+        window.EDISON_METRICS_REQUIRE_LOAD_CALLBACK_TIME = performance.now() - start;
+    });
+})();
+</script><script nonce="qt/Rb6UUlrEW14eg1QL1RVaJaME=" src="https://cfl.dropboxstatic.com/static/metaserver/static/js/alameda_bundle/alameda_bundle_ie_en-vflXFwp8G.js" crossorigin="anonymous"></script>
+</head><body><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.RUNNING_IN_EDISON = true;
+var requireConfig = {"baseUrl": "https://cfl.dropboxstatic.com/", "waitSeconds": 30, "paths": {"atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c__commonjsHelpers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c__commonjsHelpers-vfllnoP_U", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_abuse_fingerprintjs_component": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_abuse_fingerprintjs_component-vflzZLLoa", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_abuse_funcaptcha_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_abuse_funcaptcha_modal-vflK7C5yq", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_accessibility_audit": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_accessibility_audit-vflDB77Rq", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_accessibility_ax_audit": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_accessibility_ax_audit-vfl-TBEcL", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_account_email": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_account_email-vflILGR0P", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_account_timezone_detection": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_account_timezone_detection-vfl5pa9ua", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_activation_data_slices": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_activation_data_slices-vflH5KQqm", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_activation_data_store": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_activation_data_store-vflXwtbc-", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_admin_tasks_dropdown_in_progress_admin_tasks": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_admin_tasks_dropdown_in_progress_admin_tasks-vfloyEogZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_adyen-checkout": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_adyen-checkout-vflm8avJe", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_adyen-web_dist_adyen": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_adyen-web_dist_adyen-vfldQm_Gq", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_apex-metrics_src_types": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_apex-metrics_src_types-vflRK2vZU", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_api_v2_default_team_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_api_v2_default_team_client-vfltVfvuC", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_api_v2_routes_domain_contacts_provider": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_api_v2_routes_domain_contacts_provider-vfltgbUI4", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_assets_pictogram_lightbulb": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_assets_pictogram_lightbulb-vflTULxD5", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_assets_pictogram_warning": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_assets_pictogram_warning-vflGUBZH3", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_auth_login_or_register_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_auth_login_or_register_modal-vflTSbH-Z", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_auth_login_or_register_types": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_auth_login_or_register_types-vflwwH5oK", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_banner_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_banner_index-vflkPzOQt", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_bem": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_bem-vflSgJN94", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browse_uri_helper": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browse_uri_helper-vflKHIQg4", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browse_uri_interface": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browse_uri_interface-vfld8tSDv", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browser_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browser_index-vfl_G2Bx_", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_action_choice_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_action_choice_modal-vfl2XnZd8", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_banner_campaign_banner": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_banner_campaign_banner-vflRe6nRy", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_billing_modal_campaign_billing_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_billing_modal_campaign_billing_modal-vflpRNrP0", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_dialog_campaign_dialog": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_dialog_campaign_dialog-vflsA-LlH", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_bubble_campaign_link_bubble": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_bubble_campaign_link_bubble-vflJxsg9R", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_campaign_link": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_campaign_link-vflBnOghp", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_campaign_link_renderer": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_campaign_link_renderer-vflDxpGts", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_menu_campaign_menu_item": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_menu_campaign_menu_item-vflFtePgV", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_modal_campaign_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_modal_campaign_modal-vflGs568w", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_pulsar_campaign_pulsar": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_pulsar_campaign_pulsar-vfl5e_QSu", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_snackbar_campaign_snackbar": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_snackbar_campaign_snackbar-vfl1SvGvl", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_tooltip_campaign_tooltip": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_tooltip_campaign_tooltip-vflypBa1E", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_action_defs_api": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_action_defs_api-vfll7ppR7", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaign_uri_param": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaign_uri_param-vfleQ9pvD", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaigns_element_id_enum": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaigns_element_id_enum-vflW3pU6B", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaigns_toolkit_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaigns_toolkit_client-vflsszjsn", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_hooks_logging": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_hooks_logging-vflMo_8mZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_chat_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_chat_client-vflG6sUHo", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_dialogue": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_dialogue-vflSaZZ79", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_dialogue_logging": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_dialogue_logging-vflTnkUbd", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chip_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chip_index-vfl2Jtmje", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_combinations_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_combinations_index-vflP7BeXi", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_components_dwg-tooltip_control": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_components_dwg-tooltip_control-vflbMLz4X", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_components_order_summary_redesign_order_summary_utils": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_components_order_summary_redesign_order_summary_utils-vfla9kPPQ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_contacts_types": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_contacts_types-vflUPnnuG", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_controls_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_controls_index-vflsW1F5J", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_attribution_header": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_attribution_header-vflZPsXEt", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_exception_info": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_exception_info-vflUROgBu", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_i18n": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_i18n-vflSDWhD-", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_notify": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_notify-vflhfHTHw", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_toast_toast_on_init": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_toast_toast_on_init-vflc6Kq_l", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_transport_query_string_helpers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_transport_query_string_helpers-vflphrWge", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_xhr": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_xhr-vflCcDVOv", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_csrf": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_csrf-vflYURPxp", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_checkout_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_checkout_modal-vflKjWdYd", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_lmo_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_lmo_modal-vflz0cj_a", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_mid_trial_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_mid_trial_modal-vflYUWddC", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_onboarding_survey_modal_campaign_onboarding_survey_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_onboarding_survey_modal_campaign_onboarding_survey_modal-vflC930AA", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_dev_notifier_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_dev_notifier_client-vflb95px-", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_launcher_launcher_item": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_launcher_launcher_item-vflfOwzZT", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_launcher_launcher_sandbox": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_launcher_launcher_sandbox-vfl1jPA7h", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_panels": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_panels-vflzCGRuO", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_dialogue_actions_chat_actions": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_dialogue_actions_chat_actions-vfltOv9zJ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_dialogue_reducers_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_dialogue_reducers_index-vflEURdEn", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_edison_cookies_check": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_edison_cookies_check-vflssKe5D", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_edison_ui_react_router_compat": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_edison_ui_react_router_compat-vfl10ZjlS", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_elliptic_lib_elliptic": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_elliptic_lib_elliptic-vflbt-Idu", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_em_string": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_em_string-vflr-GBLg", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_esm_useResizeObserver": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_esm_useResizeObserver-vflZKuaNG", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_file_imports_ui_entry": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_file_imports_ui_entry-vflsjojYo", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_fingerprintjs-pro-static_dist_fp": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_fingerprintjs-pro-static_dist_fp-vflWzBQ6s", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_form_row_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_form_row_index-vflWKbE7W", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth-components_plan-comparison-modal_plan_comparison_modal_contents": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth-components_plan-comparison-modal_plan_comparison_modal_contents-vflOjRV9H", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth-components_quota-bar_quota_bar": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth-components_quota-bar_quota_bar-vfl5C_To7", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth_trials_api_v2": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth_trials_api_v2-vfl1Qlags", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_helpers_esm_extends": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_helpers_esm_extends-vflk9wiuf", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_helpers_hooks_component-did-mount": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_helpers_hooks_component-did-mount-vflybgC_I", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_hooks_use_screen_size": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_hooks_use_screen_size-vflVXptS5", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_init_data_edison": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_init_data_edison-vflQn2hgW", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_invite_nav_invite_button_invite_button": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_invite_nav_invite_button_invite_button-vflR3IOAW", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_learning_center": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_learning_center-vfl4AL39e", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_learning_center2": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_learning_center2-vflabOiS9", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_list_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_list_index-vfl-CX5nU", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_lodash-es_lodash": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_lodash-es_lodash-vflOJ76WI", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_lottie-react_build_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_lottie-react_build_index-vflHxPNUl", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_assets_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_assets_index-vflk4pr4Y", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_index-vflZkRkCf", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_pictogram_icon": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_pictogram_icon-vfl79RS2X", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_shelf-empty": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_shelf-empty-vflmVLvSJ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_star-stickers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_star-stickers-vflhv6pi3", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_traffic-duck-crossing": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_traffic-duck-crossing-vflrcHPYD", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_traffic-road-blocked": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_traffic-road-blocked-vflFWABVl", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_trash-empty": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_trash-empty-vfl2PKw-O", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_modal_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_modal_index-vflBI4oiM", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ncct_manual_assist_util": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ncct_manual_assist_util-vflnx3hwy", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_payments_skus_subscription_service": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_payments_skus_subscription_service-vflWuwJ6x", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_performance-bookmarklet": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_performance-bookmarklet-vfllvBlJR", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_photo_upload_controller": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_photo_upload_controller-vflxpE8ZS", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_pkijs_build_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_pkijs_build_index-vflCJK0Gn", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_privacy_consent_load_privacy_consent": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_privacy_consent_load_privacy_consent-vfl2xmSlQ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_profile_services_profile_services_constants": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_profile_services_profile_services_constants-vfl6UuiKD", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_profile_services_profile_services_link": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_profile_services_profile_services_link-vflgEQ_m7", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_prompt_ui_home_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_prompt_ui_home_modal-vflnO7p3g", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_pvtsutils_build_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_pvtsutils_build_index-vflMf9vHp", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react-dom-next_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react-dom-next_client-vflHpoegk", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react-is_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react-is_index-vflRE116H", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react_query_api_helpers_helpers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react_query_api_helpers_helpers-vflMcF9xk", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react_query_helpers_helpers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react_query_helpers_helpers-vfl6e6Mlc", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_redux_unsupported": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_redux_unsupported-vfl6IRrTX", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_rfc4648_lib_rfc4648": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_rfc4648_lib_rfc4648-vfl6x26tb", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_crypto": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_crypto-vfld_nxWG", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_legacy_edge_shim": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_legacy_edge_shim-vflWoj9F4", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_passwords": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_passwords-vflAYFjYz", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_util": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_util-vfl0R6-29", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_server_side_client_view_bridge": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_server_side_client_view_bridge-vfljr-Lbf", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_sharing_api_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_sharing_api_client-vflA0vXAY", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_signup_signin_helpers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_signup_signin_helpers-vflR4ofYC", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_button": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_button-vflbl__lW", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_checkbox": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_checkbox-vfllSICkU", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_popover_popover_trigger": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_popover_popover_trigger-vfl573k3i", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_common_constants": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_common_constants-vflYpH7jL", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_query_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_query_client-vflHQ8_Ke", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_sink_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_sink_index-vflkFkPYe", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_styled-components": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_styled-components-vflhixqjF", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_teams_idle_timeout_pagelet": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_teams_idle_timeout_pagelet-vflGWBzUx", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_teams_team_creation_free_team_create_button": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_teams_team_creation_free_team_create_button-vflM4eE-E", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_toolkit_dist_redux-toolkit": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_toolkit_dist_redux-toolkit-vflrT4xxl", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_truncate_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_truncate_index-vflEUk4R2", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_fill_checkmark-circle": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_fill_checkmark-circle-vflIsqCOt", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_fill_fail": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_fill_fail-vflE34k63", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_calendar": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_calendar-vflBKIbWs", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_checkmark-circle": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_checkmark-circle-vflm0XeuC", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_comment": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_comment-vflDUhTez", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_dropbox": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_dropbox-vflCJ86lo", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_folder": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_folder-vflCAym72", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_link": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_link-vflOMA3xx", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_more-horizontal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_more-horizontal-vflY7ites", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_passwords": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_passwords-vflgE7dCA", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_pdf": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_pdf-vflG-8hrL", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_phone-support": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_phone-support-vflRABWw9", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_shield": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_shield-vflwzjTRW", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_show": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_show-vfluvLUI2", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_signature": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_signature-vflGfCdc6", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_space": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_space-vflMCoFuC", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_star": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_star-vfl50A3nL", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_syncing": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_syncing-vfl3UtdCt", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_twinkle-1": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_twinkle-1-vflkOx463", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_twinkle-2": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_twinkle-2-vflEASq4-", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upgrade": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upgrade-vfldBme3P", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upload": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upload-vfllEXd6f", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upload-file": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upload-file-vfl0fTpta", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_contact_sales_button_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_contact_sales_button_index-vflIPfVQ2", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_image": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_image-vflJC1030", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_input_dig": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_input_dig-vfl5OUcAZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_locale_selector_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_locale_selector_modal-vflNqziWZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_modal_dig": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_modal_dig-vfl11cKpZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_overlay": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_overlay-vflHzSaP5", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_sprite": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_sprite-vflNK4XSO", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_trials_types": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_trials_types-vfl2ZJBmG", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_use-sync-external-store_shim_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_use-sync-external-store_shim_index-vflH_PMqU", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_dropdown_bluenote_row": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_dropdown_bluenote_row-vflZix-r8", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_group_actions": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_group_actions-vflulEplj", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_sharing_actions": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_sharing_actions-vflgXGCu2", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ux_analytics_styles_devtools": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ux_analytics_styles_devtools-vflsHFAjm", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ux_analytics_ux_variants": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ux_analytics_ux_variants-vflrOeCUV", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_uxa_pagelet": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_uxa_pagelet-vfl7IPGM9", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_zxcvbn_lib_main": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_zxcvbn_lib_main-vflMo_kar", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception-vfl3MW8JA", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception_reporter": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception_reporter-vflHWmykm", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_data_modules_stormcrow": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_data_modules_stormcrow-vflyE-JQZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison-vflTYFpvH", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_edison_react_page": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_edison_react_page-vfld2O7LI", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_error_pages_generic_error": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_error_pages_generic_error-vfl_VAFXn", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_init_edison_page": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_init_edison_page-vfl0279Fr", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-vflYWmbcM", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom-vflI7_n6Z", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom-next": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom-next-vflZBQXkh", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-next": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-next-vfl2G3Nv-", "json_loader!metaserver/static/js/langpack/icu-da_DK.json": "static/metaserver/static/js/langpack/icu-da_DK-vflz5Aofy.json", "json_loader!metaserver/static/js/langpack/icu-de.json": "static/metaserver/static/js/langpack/icu-de-vflnZDWu5.json", "json_loader!metaserver/static/js/langpack/icu-en.json": "static/metaserver/static/js/langpack/icu-en-vflmZFLky.json", "json_loader!metaserver/static/js/langpack/icu-en_GB.json": "static/metaserver/static/js/langpack/icu-en_GB-vfltLIjhc.json", "json_loader!metaserver/static/js/langpack/icu-es.json": "static/metaserver/static/js/langpack/icu-es-vfliQeUel.json", "json_loader!metaserver/static/js/langpack/icu-es_ES.json": "static/metaserver/static/js/langpack/icu-es_ES-vflgUwS5J.json", "json_loader!metaserver/static/js/langpack/icu-fr.json": "static/metaserver/static/js/langpack/icu-fr-vfl1LwDrl.json", "json_loader!metaserver/static/js/langpack/icu-fr_CA.json": "static/metaserver/static/js/langpack/icu-fr_CA-vflijstqJ.json", "json_loader!metaserver/static/js/langpack/icu-id.json": "static/metaserver/static/js/langpack/icu-id-vflxf4Zlf.json", "json_loader!metaserver/static/js/langpack/icu-it.json": "static/metaserver/static/js/langpack/icu-it-vflyd3m9_.json", "json_loader!metaserver/static/js/langpack/icu-ja.json": "static/metaserver/static/js/langpack/icu-ja-vfl6JKIwA.json", "json_loader!metaserver/static/js/langpack/icu-ko.json": "static/metaserver/static/js/langpack/icu-ko-vfliqi4JH.json", "json_loader!metaserver/static/js/langpack/icu-ms.json": "static/metaserver/static/js/langpack/icu-ms-vflfrDaqK.json", "json_loader!metaserver/static/js/langpack/icu-nb_NO.json": "static/metaserver/static/js/langpack/icu-nb_NO-vfloF6-xZ.json", "json_loader!metaserver/static/js/langpack/icu-nl_NL.json": "static/metaserver/static/js/langpack/icu-nl_NL-vflV2Y9za.json", "json_loader!metaserver/static/js/langpack/icu-pl.json": "static/metaserver/static/js/langpack/icu-pl-vflO3u_H-.json", "json_loader!metaserver/static/js/langpack/icu-pt_BR.json": "static/metaserver/static/js/langpack/icu-pt_BR-vflZx9YUt.json", "json_loader!metaserver/static/js/langpack/icu-ru.json": "static/metaserver/static/js/langpack/icu-ru-vfl1TbeBp.json", "json_loader!metaserver/static/js/langpack/icu-sv_SE.json": "static/metaserver/static/js/langpack/icu-sv_SE-vflq-z-Fs.json", "json_loader!metaserver/static/js/langpack/icu-th_TH.json": "static/metaserver/static/js/langpack/icu-th_TH-vflfbH6k9.json", "json_loader!metaserver/static/js/langpack/icu-uk_UA.json": "static/metaserver/static/js/langpack/icu-uk_UA-vflj-DvNQ.json", "json_loader!metaserver/static/js/langpack/icu-xx_AC.json": "static/metaserver/static/js/langpack/icu-xx_AC-vflST8SVY.json", "json_loader!metaserver/static/js/langpack/icu-xx_AE.json": "static/metaserver/static/js/langpack/icu-xx_AE-vflVwdr3j.json", "json_loader!metaserver/static/js/langpack/icu-xx_HA.json": "static/metaserver/static/js/langpack/icu-xx_HA-vflYiD2Dq.json", "json_loader!metaserver/static/js/langpack/icu-xx_LS.json": "static/metaserver/static/js/langpack/icu-xx_LS-vflqEK5lE.json", "json_loader!metaserver/static/js/langpack/icu-xx_RL.json": "static/metaserver/static/js/langpack/icu-xx_RL-vfl3pGz8C.json", "json_loader!metaserver/static/js/langpack/icu-zh_CN.json": "static/metaserver/static/js/langpack/icu-zh_CN-vflDIaxPh.json", "json_loader!metaserver/static/js/langpack/icu-zh_TW.json": "static/metaserver/static/js/langpack/icu-zh_TW-vflf1_VlL.json"}, "bundles": {}, "map": {"*": {"metaserver/static/js/langpack": "json_loader!metaserver/static/js/langpack/icu-en.json", "metaserver/static/js/file_viewer/edison/error_pages/generic_error": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_error_pages_generic_error", "metaserver/static/js/core/exception": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception", "metaserver/static/js/core/exception_reporter": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception_reporter", "js/edison/edison": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison", "js/data_modules/stormcrow": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_data_modules_stormcrow", "metaserver/static/js/edison/init_edison_page": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_init_edison_page", "js/edison/edison_react_page": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_edison_react_page", "react": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react", "react-dom": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom", "react-next": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-next", "react-dom-next": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom-next", "metaserver/static/js/modules/constants/contacts": "data_module!metaserver/static/js/modules/constants/contacts", "metaserver/static/js/modules/constants/fingerprintjs_constants": "data_module!metaserver/static/js/modules/constants/fingerprintjs_constants", "metaserver/static/js/modules/constants/locales": "data_module!metaserver/static/js/modules/constants/locales", "metaserver/static/js/modules/constants/login_and_register": "data_module!metaserver/static/js/modules/constants/login_and_register", "metaserver/static/js/modules/constants/search": "data_module!metaserver/static/js/modules/constants/search", "metaserver/static/js/modules/constants/sharing": "data_module!metaserver/static/js/modules/constants/sharing", "metaserver/static/js/modules/constants/time": "data_module!metaserver/static/js/modules/constants/time", "metaserver/static/js/modules/constants/viewer": "data_module!metaserver/static/js/modules/constants/viewer", "metaserver/static/js/modules/constants/web_experience_constants": "data_module!metaserver/static/js/modules/constants/web_experience_constants"}, "metaserver/static/js/core/exception_info": {"metaserver/static/js/langpack": "json_loader!metaserver/static/js/langpack/icu-en.json", "metaserver/static/js/file_viewer/edison/error_pages/generic_error": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_error_pages_generic_error", "metaserver/static/js/core/exception": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception", "metaserver/static/js/core/exception_reporter": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception_reporter", "js/edison/edison": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison", "js/data_modules/stormcrow": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_data_modules_stormcrow", "metaserver/static/js/edison/init_edison_page": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_init_edison_page", "js/edison/edison_react_page": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_edison_react_page", "react": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react", "react-dom": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom", "react-next": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-next", "react-dom-next": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom-next", "metaserver/static/js/modules/constants/contacts": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/contacts", "metaserver/static/js/modules/constants/fingerprintjs_constants": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/fingerprintjs_constants", "metaserver/static/js/modules/constants/locales": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/locales", "metaserver/static/js/modules/constants/login_and_register": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/login_and_register", "metaserver/static/js/modules/constants/search": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/search", "metaserver/static/js/modules/constants/sharing": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/sharing", "metaserver/static/js/modules/constants/time": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/time", "metaserver/static/js/modules/constants/viewer": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/viewer", "metaserver/static/js/modules/constants/web_experience_constants": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/web_experience_constants"}}, "shim": {}, "nodeIdCompat": true};
+window.addRequireLoadCallback(function() {
+    window.configureRequire(requireConfig, {
+        sentryOptions: {"dsn":"https://015d5ce7dd3142cd8fca094a50adbf69@d.dropbox.com/4505546831036416","release":"978f2b900a8e41d9ac01c7d87480d86d2bbb4cf3","environment":"canary","tags":{"edison_page_name":"shared_link_generic_error","browser_id":"5763630696314505067488660972944034910"}},
+        requireFallbackBaseUrl: "https://www.dropboxstatic.com/",
+        langpack: {locale: "en"},
+        useReactNext: false ,
+        exceptionExtras: {"page_repo_rev":"978f2b900a8e41d9ac01c7d87480d86d2bbb4cf3","yaps_deployment":"canary","yaps_project":"edison_atlasservlet.file_viewer-edison","page_locale":"en","page_load_timestamp":1711501606},
+        exceptionTags: ["is_edison","browser-id:5763630696314505067488660972944034910","edison_page_name:shared_link_generic_error","edison_atlasservlet:file_viewer","edison_atlasservlet:file_viewer:canary"],
+        initDataBase64: "EiBmMmJhZDQxOTE5MzY0MGQwODQxN2M0NmJkMTM4NzBhORim4o2wBiJxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTA6SQolNTc2MzYzMDY5NjMxNDUwNTA2NzQ4ODY2MDk3Mjk0NDAzNDkxMBIgMDQ1NjA4ZWVkYWYyZGRhMDZhNzlhMDhmOGViOTBjNWVCJmVkaXNvbl9hdGxhc3NlcnZsZXQuZmlsZV92aWV3ZXItZWRpc29uSgZjYW5hcnlSGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3JaAmVuYig5NzhmMmI5MDBhOGU0MWQ5YWMwMWM3ZDg3NDgwZDg2ZDJiYmI0Y2YzalIKIXgtZHJvcGJveC1jbGllbnQteWFwcy1hdHRyaWJ1dGlvbhItZWRpc29uX2F0bGFzc2VydmxldC5maWxlX3ZpZXdlci1lZGlzb246Y2FuYXJ5cgQKABIAehNzaGFyZWRfY29udGVudF9saW5rggEoc2hhcmVkX2NvbnRlbnRfbGlua192aWV3X2ZpbGVfYW5kX2ZvbGRlcg=="
+    }, []);
+    var start = performance.now();
+    window.require(["metaserver/static/js/edison/init_edison_page"], function(mod) {
+        window.EDISON_METRICS_INIT_PAGE_MODULE_LOAD_TIME = performance.now() - start;
+        mod.initPage("EgtmaWxlX3ZpZXdlchoZc2hhcmVkX2xpbmtfZ2VuZXJpY19lcnJvcjI1L3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3pKE3NoYXJlZF9jb250ZW50X2xpbmtSKHNoYXJlZF9jb250ZW50X2xpbmtfdmlld19maWxlX2FuZF9mb2xkZXJiKDk3OGYyYjkwMGE4ZTQxZDlhYzAxYzdkODc0ODBkODZkMmJiYjRjZjNqKDQ2Nzc0ZWMzYTViYjIwZjA3NGM0MTRiZDhmYzkyOWM2ZDllNDhkMTNwAXoGY2FuYXJ5sgEJL2R3czIvcnBjygFBbWV0YXNlcnZlci9zdGF0aWMvanMvZmlsZV92aWV3ZXIvZWRpc29uL2Vycm9yX3BhZ2VzL2dlbmVyaWNfZXJyb3LiAXFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MPABAYgCAZACAbICIDA0NTYwOGVlZGFmMmRkYTA2YTc5YTA4ZjhlYjkwYzVl");
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+
+  window.require(
+    ["js/edison/edison", "js/edison/edison_react_page", "metaserver/static/js/file_viewer/edison/error_pages/generic_error"],
+    function(edisonModule, edisonReactPageModule, mod) {
+      edisonModule.Edison.waitUntilInitialized().then(function() {
+        edisonReactPageModule.render(mod, false , "", false );
+      });
+    }
+  );
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            if (edisonModule.Edison.markServerSidePrefetchStarted) {
+                edisonModule.Edison.markServerSidePrefetchStarted(["Es4CCiN3ZWJfcGxhdGZvcm0uV2ViUGxhdGZvcm1FZGlzb25GZXRjaBITRWRpc29uRGV2VG9vbHNGZXRjaBrpARLmAVJxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTBacWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wKgtmaWxlX3ZpZXdlcjIZc2hhcmVkX2xpbmtfZ2VuZXJpY19lcnJvcg==","Es8CCixzdXBlcl9hZG1pbl9hbmRfZGVwbG95bWVudC5FZGlzb25JZGxlVGltZW91dBILSWRsZVRpbWVvdXQa6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=","Eu0CCjpwcml2YWN5X2NvbnNlbnRfZWRpc29uLlByaXZhY3lDb25zZW50RWRpc29uUHJlZmV0Y2hTZXJ2aWNlEhtQcml2YWN5Q29uc2VudFByb3BzUHJlZmV0Y2ga6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=","Es0CCiN3ZWJfcGxhdGZvcm0uV2ViUGxhdGZvcm1FZGlzb25GZXRjaBISRWRpc29uVG9wTWVudUZldGNoGukBEuYBUnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MFpxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTAqC2ZpbGVfdmlld2VyMhlzaGFyZWRfbGlua19nZW5lcmljX2Vycm9y","EtgCCit1c2VyX3N1cnZleS5FZGlzb25Vc2VyU3VydmV5UHJlZmV0Y2hTZXJ2aWNlEhVFZGlzb25Vc2VyU3VydmV5RmV0Y2ga6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=","Es4CCiZ1eF9hbmFseXRpY3MuVXhBbmFseXRpY3NFZGlzb25TZXJ2aWNlchIQVXhBbmFseXRpY3NGZXRjaBrpARLmAVJxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTBacWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wKgtmaWxlX3ZpZXdlcjIZc2hhcmVkX2xpbmtfZ2VuZXJpY19lcnJvcg=="]);
+            }
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/time", "json", "{\"DATETIME_FORMAT\": \"M/d/yyyy h:mm a\", \"TIMEZONE_OFFSET\": 0, \"TIMEZONE\": \"\", \"DATE_FORMAT\": \"M/d/yyyy\", \"TIME_FORMAT\": \"h:mm a\"}");
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/viewer", "json", "{\"DEFAULT_ROOT_NAME\": \"Dropbox\", \"PERSONAL_ROLE_STRING\": \"Personal\", \"_viewer_properties\": {\"_user_data\": [], \"is_team_assume_user_session\": false, \"is_assume_user_session\": false}, \"prompt_ha_hiding\": true, \"LOCALE\": \"US\"}");
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/locales", "json", "{\"LIST_OF_LOCALES_WITH_INTERNAL\": [{\"localeCode\": \"id\", \"localeName\": \"Bahasa Indonesia\", \"decorator\": \"\"}, {\"localeCode\": \"ms\", \"localeName\": \"Bahasa Malaysia\", \"decorator\": \"\"}, {\"localeCode\": \"da_DK\", \"localeName\": \"Dansk\", \"decorator\": \"\"}, {\"localeCode\": \"de\", \"localeName\": \"Deutsch\", \"decorator\": \"\"}, {\"localeCode\": \"en_GB\", \"localeName\": \"English (United Kingdom)\", \"decorator\": \"\"}, {\"localeCode\": \"en\", \"localeName\": \"English (United States)\", \"decorator\": \"\"}, {\"localeCode\": \"es_ES\", \"localeName\": \"Espa\\u00f1ol (Espa\\u00f1a)\", \"decorator\": \"\"}, {\"localeCode\": \"es\", \"localeName\": \"Espa\\u00f1ol (Latinoam\\u00e9rica)\", \"decorator\": \"\"}, {\"localeCode\": \"fr_CA\", \"localeName\": \"Fran\\u00e7ais (Canada)\", \"decorator\": \"\"}, {\"localeCode\": \"fr\", \"localeName\": \"Fran\\u00e7ais (France)\", \"decorator\": \"\"}, {\"localeCode\": \"it\", \"localeName\": \"Italiano\", \"decorator\": \"\"}, {\"localeCode\": \"nl_NL\", \"localeName\": \"Nederlands\", \"decorator\": \"\"}, {\"localeCode\": \"nb_NO\", \"localeName\": \"Norsk (bokm\\u00e5l)\", \"decorator\": \"\"}, {\"localeCode\": \"pl\", \"localeName\": \"Polski\", \"decorator\": \"\"}, {\"localeCode\": \"pt_BR\", \"localeName\": \"Portugu\\u00eas (Brasil)\", \"decorator\": \"\"}, {\"localeCode\": \"ru\", \"localeName\": \"P\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", \"decorator\": \"\"}, {\"localeCode\": \"sv_SE\", \"localeName\": \"Svenska\", \"decorator\": \"\"}, {\"localeCode\": \"uk_UA\", \"localeName\": \"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\", \"decorator\": \"\"}, {\"localeCode\": \"th_TH\", \"localeName\": \"\\u0e44\\u0e17\\u0e22\", \"decorator\": \"\"}, {\"localeCode\": \"zh_CN\", \"localeName\": \"\\u4e2d\\u6587\\uff08\\u7b80\\u4f53\\uff09\", \"decorator\": \"\"}, {\"localeCode\": \"zh_TW\", \"localeName\": \"\\u4e2d\\u6587\\uff08\\u7e41\\u9ad4\\uff09\", \"decorator\": \"\"}, {\"localeCode\": \"ja\", \"localeName\": \"\\u65e5\\u672c\\u8a9e\", \"decorator\": \"\"}, {\"localeCode\": \"ko\", \"localeName\": \"\\ud55c\\uad6d\\uc5b4\", \"decorator\": \"\"}], \"LIST_OF_LOCALES_WITHOUT_INTERNAL\": [{\"localeCode\": \"id\", \"localeName\": \"Bahasa Indonesia\", \"decorator\": \"\"}, {\"localeCode\": \"ms\", \"localeName\": \"Bahasa Malaysia\", \"decorator\": \"\"}, {\"localeCode\": \"da_DK\", \"localeName\": \"Dansk\", \"decorator\": \"\"}, {\"localeCode\": \"de\", \"localeName\": \"Deutsch\", \"decorator\": \"\"}, {\"localeCode\": \"en_GB\", \"localeName\": \"English (United Kingdom)\", \"decorator\": \"\"}, {\"localeCode\": \"en\", \"localeName\": \"English (United States)\", \"decorator\": \"\"}, {\"localeCode\": \"es_ES\", \"localeName\": \"Espa\\u00f1ol (Espa\\u00f1a)\", \"decorator\": \"\"}, {\"localeCode\": \"es\", \"localeName\": \"Espa\\u00f1ol (Latinoam\\u00e9rica)\", \"decorator\": \"\"}, {\"localeCode\": \"fr_CA\", \"localeName\": \"Fran\\u00e7ais (Canada)\", \"decorator\": \"\"}, {\"localeCode\": \"fr\", \"localeName\": \"Fran\\u00e7ais (France)\", \"decorator\": \"\"}, {\"localeCode\": \"it\", \"localeName\": \"Italiano\", \"decorator\": \"\"}, {\"localeCode\": \"nl_NL\", \"localeName\": \"Nederlands\", \"decorator\": \"\"}, {\"localeCode\": \"nb_NO\", \"localeName\": \"Norsk (bokm\\u00e5l)\", \"decorator\": \"\"}, {\"localeCode\": \"pl\", \"localeName\": \"Polski\", \"decorator\": \"\"}, {\"localeCode\": \"pt_BR\", \"localeName\": \"Portugu\\u00eas (Brasil)\", \"decorator\": \"\"}, {\"localeCode\": \"ru\", \"localeName\": \"P\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", \"decorator\": \"\"}, {\"localeCode\": \"sv_SE\", \"localeName\": \"Svenska\", \"decorator\": \"\"}, {\"localeCode\": \"uk_UA\", \"localeName\": \"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\", \"decorator\": \"\"}, {\"localeCode\": \"th_TH\", \"localeName\": \"\\u0e44\\u0e17\\u0e22\", \"decorator\": \"\"}, {\"localeCode\": \"zh_CN\", \"localeName\": \"\\u4e2d\\u6587\\uff08\\u7b80\\u4f53\\uff09\", \"decorator\": \"\"}, {\"localeCode\": \"zh_TW\", \"localeName\": \"\\u4e2d\\u6587\\uff08\\u7e41\\u9ad4\\uff09\", \"decorator\": \"\"}, {\"localeCode\": \"ja\", \"localeName\": \"\\u65e5\\u672c\\u8a9e\", \"decorator\": \"\"}, {\"localeCode\": \"ko\", \"localeName\": \"\\ud55c\\uad6d\\uc5b4\", \"decorator\": \"\"}], \"FR_CA_LOCALE_ENABLED\": true}");
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/search", "json", "{\"SEARCH_WEB_MAIN_KIEV_ENABLED\": false, \"SEARCH_WEB_MAIN2_KIEV_ENABLED\": false, \"SEARCH_EXPERIMENT_ZERO_STATE_DROPDOWN_VARIANT\": \"OFF\", \"SEARCH_WEB_REDESIGN_2023_VARIANT\": \"OFF\", \"SEARCH_ALPHA_NATURAL_LANGUAGE_SEARCH_VARIANT\": \"OFF\", \"SEARCH_WEB_AI_CONTROL_CENTER_VARIANT\": \"OFF\", \"SEARCH_WEB_AI_EARLY_ADOPTER_ENABLED\": false, \"HTTP3_SUPPORT_ENABLED\": false}");
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedPrefetch("Es8CCixzdXBlcl9hZG1pbl9hbmRfZGVwbG95bWVudC5FZGlzb25JZGxlVGltZW91dBILSWRsZVRpbWVvdXQa6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=", "",  false );
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedPrefetch("Es4CCiZ1eF9hbmFseXRpY3MuVXhBbmFseXRpY3NFZGlzb25TZXJ2aWNlchIQVXhBbmFseXRpY3NGZXRjaBrpARLmAVJxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTBacWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wKgtmaWxlX3ZpZXdlcjIZc2hhcmVkX2xpbmtfZ2VuZXJpY19lcnJvcg==", "CAESpSh7InJlcXVlc3RJZCI6ICJmMmJhZDQxOTE5MzY0MGQwODQxN2M0NmJkMTM4NzBhOSIsICJvcmdSZWZlcnJlciI6ICIiLCAiaHR0cFJlZmVycmVyIjogIiIsICJwcmV2aW91c1VybCI6ICIiLCAidmlzaXRJZCI6ICIiLCAiZXZlbnRfbmFtZXMiOiBbImdvb2dsZV9sb2dpbl9zdGFydCIsICJ0bF9wYWdlX3ZpZXciLCAiZW1haWxfc2lnbnVwX3N1Y2NlZWRlZCIsICJkb2N1bWVudF9vcGVuIiwgInByb2R1Y3QiLCAiY2xpY2tfc291cmNlIiwgImZpbmFsX2hlYXJ0YmVhdCIsICJtb2RhbF9jbG9zZSIsICJzaWFfbG9naW5fcmVxdWlyZXNfdHdvX2ZhY3RvciIsICJhZG1pbl9ob21lX2NsaWVudF9iYW5uZXJfY2xpY2tlZCIsICJhcHBfbmFtZSIsICJlbWFpbF9sb2dpbl9mYWlsZWQiLCAicGFyZW50X3Byb2R1Y3QiLCAic2lhX2xvZ2luX3N0YXJ0IiwgInV4YV9kZWJ1Z192ZXJzaW9uIiwgImRvY3VtZW50X2Nsb3NlIiwgImRyb3Bib3hfZG93bmxvYWQiLCAidG90YWxfdGltZSIsICJsb2dpbl9tb2RhbF9kaXNtaXNzZWQiLCAiZ29vZ2xlX2xvZ2luX2ZhaWxlZCIsICJzY3JpcHRfaWQiLCAiYmZjYWNoZV9lbGlnaWJsZSIsICJwdXJjaGFzZV9wcmljZSIsICJzaWdudXBfbW9kYWxfZGlzbWlzc2VkIiwgImhzX2FjdGlvbiIsICJnb29nbGVfbG9naW5fc3VjY2VlZGVkIiwgImVtYWlsX2xvZ2luX3JlZGlyZWN0IiwgImVtYWlsX3NwbGl0X3NpZ251cF9jb250aW51ZSIsICJoc19jYXRlZ29yeSIsICJiaWxsaW5nX2N5Y2xlIiwgImxpbmtfbm9fc2Vzc2lvbl9zdG9yYWdlIiwgImdvb2dsZV9zaWdudXBfc3RhcnQiLCAiYWRvYmVfdGFyZ2V0X3ZhcmlhbnRzIiwgImVsZW1lbnRfY2xpY2siLCAibGlua19jbGljayIsICJjbGlja190b29sdGlwX3NpZ25pbl9lcCIsICJkaWFsb2dfb3BlbiIsICJzaWFfbG9naW5fc3VjY2VlZGVkIiwgInNpZ251cF9tb2RhbF9zaG93biIsICJ1eGFfZXZlbnRfY2xhc3NpZmljYXRpb25fbGV2ZWwiLCAiZW1haWxfc2lnbnVwX2ZhaWxlZCIsICJmb3JtX2ZpZWxkX2NoYW5nZSIsICJhZG1pbl9ob21lX2NsaWVudF9iYW5uZXJfc2hvd24iLCAiZHJvcGJveF9yZXN0YXJ0X2Rvd25sb2FkIiwgIm1vZGFsX29wZW4iLCAiZ29vZ2xlX3NpZ251cF9mYWlsZWQiLCAicGFnZV92aWV3X29yaWdpbiIsICJzaWFfbG9naW5fcmVxdWlyZXNfcGFzc3dvcmQiLCAiY2xpY2tfYmFubmVyX3NpZ25pbl9lcCIsICJtYXJrZXRpbmdfdHJhY2tlcl9pbmNsdXNpb25fbWV0aG9kIiwgImVtYWlsX2xvZ2luX3N0YXJ0IiwgInNjcm9sbF9ldmVudCIsICJsaWNlbnNlcyIsICJzaG93bl9iYW5uZXJfc2lnbmluX2VwIiwgImVtYWlsX3NpZ251cF9zdGFydCIsICJzY3JpcHRfdXJsIiwgIndlYl9yZWRlc2lnbiIsICJkZXZpY2VfaWQiLCAiaWZyYW1lX3VyaSIsICJpbnN0YW5jZV9ldmVudF9jb3VudCIsICJsb2dpbl9tb2RhbF9zaG93biIsICJ1eC1hbmFseXRpY3MiLCAiYWRtaW5faG9tZV9jbGllbnRfYmFubmVyX2Rpc21pc3NlZCIsICJpbnN0YW5jZV9pbml0X3RzIiwgImhlYXJ0YmVhdCIsICJzaG93bl90b29sdGlwX3NpZ25pbl9lcCIsICJzY2FuX3N1Y2Nlc3MiLCAiZWxlbWVudF9zaG93biIsICJjdXJyZW5jeV9jb2RlIiwgInBhZ2VfdmlldyIsICJ0bF90ZW1wbGF0ZV9yZWRpcmVjdCIsICJuYXZpZ2F0aW9uX3R5cGUiLCAiaHNfbGFiZWwiLCAidXhhX2luY2x1c2lvbl9tZXRob2QiLCAiZ29vZ2xlX3NpZ251cF9zdWNjZWVkZWQiLCAidHlwZSIsICJlbWFpbF9sb2dpbl9zdWNjZWVkZWQiLCAiZW1haWxfbG9naW5fcmVxdWlyZXNfdHdvX2ZhY3RvciIsICJyZWRpcmVjdF90b19kcm9wYm94X3Ntb2RlX3N0b3JlX3BhZ2UiLCAic2lhX2xvZ2luX2ZhaWxlZCIsICJlbGVtZW50X2hpZGUiLCAic2lnbnVwX3NvdXJjZSIsICJyZWRpcmVjdF9zdWNjZXNzIiwgImRpYWxvZ19jbG9zZSIsICJnb29nbGVfbG9naW5fcmVxdWlyZXNfdHdvX2ZhY3RvciJdLCAibm9fcGlpX2NvbmZpZ192YXJpYWJsZXMiOiBbInZlcnRpY2FsX29mZnNldCIsICJhcHBfbmFtZSIsICJjbGllbnRfZXZlbnRfaWQiLCAiZWxlbWVudF9pZCIsICJ1eGFfZXZlbnRfY2xhc3NpZmljYXRpb25fbGV2ZWwiLCAiZXZlbnRfdHMiLCAibGlua19pZCIsICJwYXJhbV9hZCIsICJwYXJhbV9jYW1wIiwgInBhcmFtX2Rlc2t0b3BfbG9nZ2luZ19pZCIsICJwYXJhbV9mYmNsaWQiLCAicGFyYW1fZ2NsaWQiLCAicGFyYW1fa3ciLCAicGFyYW1fbXNjbGtpZCIsICJwYXJhbV9uZXQiLCAicGFyYW1fb3FhIiwgInBhcmFtX3RmbyIsICJwYXJhbV90ayIsICJwYXJhbV90cmlnZ2VyIiwgInBhcmFtX3V0bV9jYW1wYWlnbiIsICJwYXJhbV91dG1fY29udGVudCIsICJwYXJhbV91dG1fbWVkaXVtIiwgInBhcmFtX3V0bV9zb3VyY2UiLCAicGFyYW1fdXRtX3Rlcm0iLCAicG9zaXRpb25fcGN0X1giLCAicG9zaXRpb25fcGN0X1kiLCAidXhhX3YiLCAidXhhX2RlYnVnX3ZlcnNpb24iLCAidmFyaWFudHMiLCAiYWRvYmVfdGFyZ2V0X3ZhcmlhbnRzIiwgImluc3RhbmNlX2V2ZW50X2NvdW50IiwgImluc3RhbmNlX2luaXRfdHMiLCAicHJvZHVjdCIsICJwYXJlbnRfcHJvZHVjdCIsICJsaWNlbnNlcyIsICJ0eXBlIiwgInB1cmNoYXNlX3ByaWNlIiwgImN1cnJlbmN5X2NvZGUiLCAiYmlsbGluZ19jeWNsZSIsICJoc19hY3Rpb24iLCAiaHNfY2F0ZWdvcnkiLCAiaHNfbGFiZWwiLCAibWFya2V0aW5nX3RyYWNrZXJfaW5jbHVzaW9uX21ldGhvZCIsICJ1eGFfaW5jbHVzaW9uX21ldGhvZCIsICJuYXZpZ2F0aW9uX3R5cGUiLCAiZWxlbWVudF9zaG93bl9kdXJhdGlvbl9tcyJdLCAic2hvdWxkQmVTZW50VG9NYXJrZXRpbmdUcmFja2VyVmFyaWFibGVzIjogWyJ2ZXJ0aWNhbF9vZmZzZXQiLCAiYXBwX25hbWUiLCAiY2xpZW50X2V2ZW50X2lkIiwgImVsZW1lbnRfaWQiLCAidXhhX2V2ZW50X2NsYXNzaWZpY2F0aW9uX2xldmVsIiwgImV2ZW50X3RzIiwgImxpbmtfaWQiLCAicGFyYW1fYWQiLCAicGFyYW1fY2FtcCIsICJwYXJhbV9kZXNrdG9wX2xvZ2dpbmdfaWQiLCAicGFyYW1fZmJjbGlkIiwgInBhcmFtX2djbGlkIiwgInBhcmFtX2t3IiwgInBhcmFtX21zY2xraWQiLCAicGFyYW1fbmV0IiwgInBhcmFtX29xYSIsICJwYXJhbV90Zm8iLCAicGFyYW1fdGsiLCAicGFyYW1fdHJpZ2dlciIsICJwYXJhbV91dG1fY2FtcGFpZ24iLCAicGFyYW1fdXRtX2NvbnRlbnQiLCAicGFyYW1fdXRtX21lZGl1bSIsICJwYXJhbV91dG1fc291cmNlIiwgInBhcmFtX3V0bV90ZXJtIiwgInBvc2l0aW9uX3BjdF9YIiwgInBvc2l0aW9uX3BjdF9ZIiwgInV4YV92IiwgInV4YV9kZWJ1Z192ZXJzaW9uIiwgInZhcmlhbnRzIiwgImFkb2JlX3RhcmdldF92YXJpYW50cyIsICJpbnN0YW5jZV9ldmVudF9jb3VudCIsICJpbnN0YW5jZV9pbml0X3RzIiwgInByb2R1Y3QiLCAicGFyZW50X3Byb2R1Y3QiLCAibGljZW5zZXMiLCAidHlwZSIsICJwdXJjaGFzZV9wcmljZSIsICJjdXJyZW5jeV9jb2RlIiwgImJpbGxpbmdfY3ljbGUiLCAiaHNfYWN0aW9uIiwgImhzX2NhdGVnb3J5IiwgImhzX2xhYmVsIiwgIm1hcmtldGluZ190cmFja2VyX2luY2x1c2lvbl9tZXRob2QiLCAidXhhX2luY2x1c2lvbl9tZXRob2QiLCAibmF2aWdhdGlvbl90eXBlIiwgImVsZW1lbnRfc2hvd25fZHVyYXRpb25fbXMiXSwgImNvbmZpZ1RpbWUiOiAxNzExNTAxNjA3NDE1LCAiaXNJbnRlcm5hbElwIjogZmFsc2UsICJpc1VzZXJEcm9wYm94QWRtaW4iOiBmYWxzZSwgImFuYWx5dGljc0lkIjogIkFBQ1NFOXV0WDl1dk9VQUpLcUtDZHdQRkQ1SkFSM0RyS3JFbXg0c0ZBcjBjWHciLCAiZXhwRXZlbnRzVG9FeHBJZE1hcCI6IHsibW91c2V1cF9lbGVtZW50X2NsaWNrIjogIkNHSS0xMTYwIiwgInBhZ2VfZnJlZXplIjogIkNHSS05MzciLCAicGFnZV9yZXN1bWUiOiAiQ0dJLTkzNyIsICJzcGFfcGFnZV92aWV3IjogIkdUWC00MSIsICJkZWxheWVkX3BhZ2Vfdmlld193aXRoX2xhdGVfbWV0YV90YWciOiAiR1RYLTEyMiIsICJwcml2YWN5X2NvbnNlbnRfaWZyYW1lX2xvYWRlZCI6ICJDR0ktMTQ1IiwgInByaXZhY3lfY29uc2VudF9zY3JpcHRfbG9hZGVkIjogIkNHSS0xNDUiLCAicHJpdmFjeV9jb25zZW50X3NjcmlwdF9sb2FkX2Vycm9yIjogIkNHSS0xNDUiLCAiY29udmVyc2lvbkRhdGFSZWFkeSI6ICJDR0ktNjA3IiwgImxlZ2FjeV9oc19hbmFseXRpY3NfZXZlbnQiOiAiQ0dJLTU1MyIsICJtYXJrZXRpbmdfdHJhY2tlcl9yZWFkeV9mb3JfdXhhIjogIkNHSS0yMTgifSwgImV4cERhdGFGaWVsZHNUb0V4cElkTWFwIjogeyJhcHBfbmFtZSI6ICJDR0ktMTUyMiIsICJkZXZpY2VfaWQiOiAiR1JXQUNRLTU4NjciLCAidXhhX2V2ZW50X2NsYXNzaWZpY2F0aW9uX2xldmVsIjogIkNHSS03NDQiLCAic2lnbnVwX3NvdXJjZSI6ICJTSEFRLTIyMiIsICJ1eGFfZGVidWdfdmVyc2lvbiI6ICJDR0ktMTUxMSIsICJ3ZWJfcmVkZXNpZ24iOiAiQ0VYUC0xOTk0IiwgImFkb2JlX3RhcmdldF92YXJpYW50cyI6ICJHVFgtMTIyIiwgImluc3RhbmNlX2V2ZW50X2NvdW50IjogIkNHSS04MiIsICJpbnN0YW5jZV9pbml0X3RzIjogIkNHSS05NiIsICJpZnJhbWVfdXJpIjogIkNHSS0xNDUiLCAiY2xpY2tfc291cmNlIjogIkNHSS0xMTYwIiwgInNjcmlwdF9pZCI6ICJDR0ktMTQ1IiwgInNjcmlwdF91cmwiOiAiQ0dJLTE0NSIsICJ0b3RhbF90aW1lIjogIkNHSS0xNDUiLCAicHJvZHVjdCI6ICJDR0ktNjA3IiwgInBhcmVudF9wcm9kdWN0IjogIkNHSS02MDciLCAibGljZW5zZXMiOiAiQ0dJLTYwNyIsICJ0eXBlIjogIkNHSS02MDciLCAicHVyY2hhc2VfcHJpY2UiOiAiQ0dJLTYwNyIsICJjdXJyZW5jeV9jb2RlIjogIkNHSS02MDciLCAiYmlsbGluZ19jeWNsZSI6ICJDR0ktNjA3IiwgImhzX2FjdGlvbiI6ICJDR0ktNTUzIiwgImhzX2NhdGVnb3J5IjogIkNHSS01NTMiLCAiaHNfbGFiZWwiOiAiQ0dJLTU1MyIsICJtYXJrZXRpbmdfdHJhY2tlcl9pbmNsdXNpb25fbWV0aG9kIjogIkNHSS04MjkiLCAidXhhX2luY2x1c2lvbl9tZXRob2QiOiAiQ0dJLTQ4NiIsICJiZmNhY2hlX2VsaWdpYmxlIjogIkNHSS04NzgiLCAibmF2aWdhdGlvbl90eXBlIjogIkNHSS05MzkiLCAicGFnZV92aWV3X29yaWdpbiI6ICJDR0ktMTM4NiJ9LCAiaW5jbHVzaW9uTWV0aG9kIjogIkVESVNPTiIsICJlbnRpdGxlZEFwcHMiOiBbImRhc2giLCAidGVzdF9hcHAiXX0=",  false );
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedPrefetch("Eu0CCjpwcml2YWN5X2NvbnNlbnRfZWRpc29uLlByaXZhY3lDb25zZW50RWRpc29uUHJlZmV0Y2hTZXJ2aWNlEhtQcml2YWN5Q29uc2VudFByb3BzUHJlZmV0Y2ga6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=", "ChNjb25zZW50LmRyb3Bib3guY29tEgJVUxgB",  false );
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedPrefetch("EtgCCit1c2VyX3N1cnZleS5FZGlzb25Vc2VyU3VydmV5UHJlZmV0Y2hTZXJ2aWNlEhVFZGlzb25Vc2VyU3VydmV5RmV0Y2ga6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=", "",  false );
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedPrefetch("Es4CCiN3ZWJfcGxhdGZvcm0uV2ViUGxhdGZvcm1FZGlzb25GZXRjaBITRWRpc29uRGV2VG9vbHNGZXRjaBrpARLmAVJxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTBacWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wKgtmaWxlX3ZpZXdlcjIZc2hhcmVkX2xpbmtfZ2VuZXJpY19lcnJvcg==", "IhAxNzExNTAxNjA3NDIzMzc0",  false );
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedPrefetch("Es0CCiN3ZWJfcGxhdGZvcm0uV2ViUGxhdGZvcm1FZGlzb25GZXRjaBISRWRpc29uVG9wTWVudUZldGNoGukBEuYBUnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MFpxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTAqC2ZpbGVfdmlld2VyMhlzaGFyZWRfbGlua19nZW5lcmljX2Vycm9y", "CrIHeyJ1c2VySWQiOiBudWxsLCAiaGlkZUluc3RhbGxMaW5rIjogZmFsc2UsICJtb2JpbGVVc2VBcHBVcmwiOiAiaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vZGwvaG9tZS9tb2JpbGU/YWRncm91cD1oZWFkZXJcdTAwMjZjYW1wYWlnbj1tb3dlYl9idXR0b25cdTAwMjZjcmVhdGl2ZT11c2VfYXBwXHUwMDI2bW9iaWxlX2FwcF9mYWxsYmFjaz1cdTAwMjZzcmM9bW9iaWxlLXdlYi1sb2dnZWQtaW4iLCAic2hvdWxkU2hvd0FkbWluVGFza3NNZW51IjogZmFsc2UsICJoZWxwSHJlZiI6ICJodHRwczovL3d3dy5kcm9wYm94LmNvbS9oZWxwIiwgImF1dG9tYXRpb25zTGlua1ZhcmlhbnQiOiAiT0ZGIiwgInNob3dJbnN0YWxsRXh0ZW5zaW9uTGluayI6IGZhbHNlLCAiaXNJbkV4dGVuc2lvbkJldGFIb2xkYmFja0dyb3VwIjogZmFsc2UsICJ3aGF0c05ld0V4cGVyaW1lbnRzIjogeyJ3aGF0c05ld1VwZGF0ZVZhcmlhbnQiOiAiUkVMRUFTRV8yMDIzXzEyXzE5IiwgIndoYXRzTmV3U3VyZmFjZUVuaGFuY2VtZW50VmFyaWFudCI6ICJPRkYifSwgImlzQWRtaW5JbnZpdGVCdXR0b25FbmFibGVkIjogZmFsc2UsICJpc1Vwc2VsbEludml0ZUJ1dHRvbkVuYWJsZWQiOiBmYWxzZSwgIndlYlJlZGVzaWduR2xvYmFsSGVhZGVyIjogIk9GRiIsICJpc0NzbVRlYW1Vc2VyIjogZmFsc2UsICJtYW5hZ2VBY2NvdW50TGlua1ZhcmlhbnQiOiAiT0ZGIiwgInRlYW1JbnZpdGVzUGFpbnRlZERvb3JUZXN0VmFyaWFudCI6ICJPRkYiLCAibG9jYWxlIjogImVuIiwgImNvdW50cnlDb2RlIjogIlVTIiwgImlzSW5kaXZpZHVhbFVwc2VsbEludml0ZUJ1dHRvbkVuYWJsZWQiOiBmYWxzZSwgImlzRnJlZVRlYW1DcmVhdGlvbkJ1dHRvbkVuYWJsZWQiOiBmYWxzZSwgIm1vbmV4UGxzQ29udGFjdFNhbGVzQnV0dG9uVmFyaWFudCI6ICJPRkYiLCAiZGVza3RvcENvcHlSZWZyZXNoVmFyaWFudCI6ICJPRkYifQ==",  false );
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/contacts", "json", "{\"LEGACY_CACHE_LIMIT\": \"OFF\", \"MERGE_SEARCH_ALLOWED\": {}}");
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/sharing", "json", "{\"GOLDEN_GATE\": {\"HAS_CONTENT_MANAGER_AND_SUPER_ADMIN\": {}, \"HAS_CONTENT_MANAGER_CDM\": {}, \"HAS_CONTENT_MANAGER_CDM_IN_TSD\": {}, \"HAS_NEW_OWNERSHIP_MODEL\": {}, \"CAN_RESTORE_FOLDERS_IN_CM\": {}, \"SHARING_TOTAL_LIMIT\": 1000}, \"SHARING_EXPERIMENTS\": {\"FIX_MAX_ACCOUNT_BATCH_SIZE\": false, \"MINI_MODAL_LINK_AUDIENCE_VARIANT\": \"OFF\", \"SHARED_LINK_ATTRIBUTION_TRACKING\": \"OFF\"}, \"SHARING_MODAL\": {\"SHOW_UPGRADE_TO_BIZ_BANNER\": {}}, \"TRUELINK\": {\"TRUELINK_BROWSE_LINK_ICON\": {}, \"NO_COMMENT_ENABLED\": {}}, \"ShareTibActionOriginType\": {\"BROWSE_FILE_ROW\": 1, \"FILE_ROW_SHARE_MENU\": 2, \"PREVIEW_PAGE\": 3, \"NOTIFICATION_WEB\": 4, \"RECENTS\": 5, \"SHARE\": 6, \"GRANT_ACCESS\": 8, \"DESKTOP_CLIENT\": 9, \"WIZARD\": 10, \"OFFICE_INTEGRATION\": 11, \"LEGACY_BROWSE\": 12, \"SHARE_LINK_MODAL\": 13, \"BROWSE_SHARED_FOLDER_BANNER\": 14, \"BROWSE_GLOBAL_ACTIONS\": 15, \"EVENTS_PAGE\": 16, \"BROWSE_FILE_ACTIONS\": 17, \"CONTENT_MANAGER\": 18, \"PARENT_FOLDER_MODAL\": 19, \"OUT_OF_QUOTA_MODAL\": 20, \"LINKS_PAGE\": 21, \"PREVIEW_PAGE_FACEPILE\": 22, \"BROWSE_FILE_FACEPILE\": 23, \"SHARE_PAGE_FROM_EMAIL\": 24, \"SHARE_PAGE_FROM_NOTIFICATION_WEB\": 25, \"COPY_SCL_LINK_MODAL\": 26, \"BROWSE_NEW_FOLDER_MODAL\": 27, \"STARRED\": 28, \"AUTO_MOUNT\": 29, \"BROWSE_FILE_ROW_BUTTON\": 30, \"BROWSE_FILE_ROW_OVERFLOW_MENU\": 31, \"EXTERNAL_SHARING_PAGE\": 32, \"SHARE_TO_UPLOAD\": 35, \"COPY_LINK_FROM_UPLOAD_MODAL\": 36, \"SHARING_PREVIEW_PAGE\": 37, \"SHARE_PAGE_INLINE\": 38, \"POST_DOWNLOAD_MODAL\": 40, \"FILE_REQUESTS\": 42, \"BROWSE_COPY_ACTION\": 43, \"BROWSE_MOVE_ACTION\": 44, \"FROM_EMAIL\": 45, \"REQUEST_ACCESS_MODAL\": 46, \"CREATE_SHARED_FOLDER_MODAL\": 47, \"DEFAULT_SHARING_SETTINGS_TAB\": 48, \"SAVE_TO_DROPBOX\": 49, \"PREVIEW_PAGE_FILE_ROW_OVERFLOW_MENU\": 50, \"PREVIEW_PAGE_FILE_ROW_BUTTON\": 51, \"JOIN_FOLDER_BUTTON\": 52, \"PREVIEW_PAGE_GRID_SINGLE_FILE_ACTION\": 53, \"PREVIEW_PAGE_TITLEBAR\": 54, \"BROWSE_SHARE_ACTION_FILE_CHOOSER\": 55, \"QUICK_VIEW_BROWSE\": 56, \"QUICK_VIEW_SEARCH\": 57, \"BROWSE_CONTENT_TILE\": 58, \"SEARCH_CONTENT_TILE\": 59, \"SUGGESTIONS_CONTENT_TILE\": 60, \"BROWSE_CONTENT_TILE_BUTTON\": 61, \"HARMONY\": 101, \"NOTIFICATION_CLIENT\": 102, \"NATIVE_SHARE_CLIENT\": 103, \"FILESYSTEM\": 104, \"NOTIFICATION_MOBILE\": 201, \"WEB_MOBILE\": 202, \"IN_APP\": 210, \"EMAIL\": 301, \"GMAIL_PLUGIN\": 302, \"OUTLOOK_ADDIN\": 303, \"PAPER_INTEGRATION\": 401, \"GOOGLE_DSS\": 501, \"TRELLO_FILE_VIEWER\": 601, \"SHARING_SDK_SANDBOX\": 700, \"SHARING_SDK_PAPER\": 701, \"SHARING_SDK_DESKTOP\": 702, \"CONTROLLED_ACCESS_SU_BANNER\": 803, \"UPLOAD_BUTTON\": 804, \"UPLOAD_JOIN_FOLDER_MODAL\": 805, \"UPLOAD_SNACKBAR\": 806, \"QUICK_REACT\": 810, \"COLLECTIONS\": 903, \"SIGN_UP_WELCOME_MODAL\": 1000, \"FLEXIBLE_SHARING_ENTRYPOINT\": 1050, \"SIMPLE_COPY_LINK_FILE_PREVIEW\": 1100, \"DOWNLOAD_BUTTON\": 1101, \"ACTION_CONTINUATION\": 1102, \"SIMPLE_COPY_LINK_FOLDER_PREVIEW\": 1103, \"LEFT_NAV_ONBOARDING_CHECKLIST\": 1104, \"UPLOAD_DRAWER\": 1105, \"PREVIEW_AUTO_SAVE\": 1106, \"COPY_LINK_MINI_MODAL\": 1107, \"ONBOARDING_SHARE_SLIDE\": 1108}}");
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/fingerprintjs_constants", "json", "{\"FINGERPRINTJS_TOKEN\": \"hSrgVEjs3amxLolocQ18\", \"SHOULD_INVOKE_FINGERPRINTJS\": true, \"REGION\": \"us\"}");
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/login_and_register", "json", "{\"GOOGLE_LOGIN_DESKTOP\": \"ON_TOP\", \"APPLE_LOGIN_DESKTOP\": \"ON\", \"LENOVO_LOGIN_DESKTOP\": \"OFF\", \"REDIRECT_WINDOW_TOKEN\": \"Achzyw0eEMKtGLDGFSuExYfUimffsltEfoKeLjvjrVEouA\", \"FUNCAPTCHA_PUBLIC_KEY\": \"419899FA-7FAF-5C1D-C027-BC34963E3A4F\", \"SHOULD_LOAD_FUNCAPTCHA\": true, \"FUNCAPTCHA_REGISTER_PUBLIC_KEY\": \"68CECE5D-F360-8653-CA80-3CF99353DDD2\", \"FUNCAPTCHA_PAYMENT_PUBLIC_KEY\": \"8AFFAA35-0217-4EF9-83C8-C62CF9EBCFB3\"}");
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/web_experience_constants", "json", "{\"IS_ADMIN_CONSOLE_OVERHAUL_ENABLED\": false, \"SAVED_VIEW\": \"OFF\", \"LEFT_NAV_QUERY_LIST_SECTION\": \"OFF\", \"REACT_ROUTER_PAP\": false, \"DEFAULT_DRAG_AND_DROP\": \"OFF\", \"HOME_REDUX_USE_STARRING\": false, \"CONTENT_TILES\": \"OFF\", \"CONTENT_TILES_SEARCH\": \"OFF\", \"CONTENT_TILES_QUICK_ACTIONS\": \"OFF\", \"CONTENT_TILES_FOLDER_COLLAGE\": \"OFF\", \"FOLDER_COLLAGE_ASPECT_RATIO\": \"OFF\", \"CONTENT_TILES_INTERACTIVITY_VIDEO\": \"OFF\", \"CONTENT_TILES_INTERACTIVITY_FOLDER\": \"OFF\", \"CONTENT_TILES_INTERACTIVITY_PDF\": \"OFF\", \"CONTENT_TILES_DELAY_INTERACTIVITY\": \"OFF\", \"CONTENT_TILES_STREAMING_ENDPOINT\": \"OFF\", \"RECENTS_WITH_FACETS\": \"OFF\", \"BROWSE_ON_CYPRESS\": \"CYPRESS_OTHER_USER\", \"BROWSE_CONTENT_SUGGESTIONS_VARIANT\": \"OFF\", \"THEME_PROVIDER_THEME\": \"OFF\", \"DIG_FEATURE_LEVEL\": \"OFF\", \"BROWSE_WITH_FACETS\": \"OFF\", \"SECTION_COMPONENT_BROWSE\": \"OFF\", \"FOLDER_LEVEL_FILTER\": \"OFF\", \"WEB_REDESIGN_GLOBAL_HEADER\": \"OFF\", \"BROWSE_DEFAULT_GRID_VIEW\": \"OFF\", \"WEB_REDESIGN_ACTION_BAR_ANIMATION\": \"OFF\", \"FOLDER_CREATE_WITHOUT_REDIRECT\": \"OFF\", \"BROWSE_FILE_VIEW_REFACTOR\": \"OFF\", \"QUICK_VIEW_BROWSE\": \"OFF\", \"BROWSE_SHARE_ENTRYPOINTS_REVAMP\": \"OFF\", \"ACTIONS_OVERFLOW_MENU_PERF\": \"OFF\", \"QUICK_VIEW_RELATED_FILES\": \"OFF\", \"CONTENT_TILES_INTERACTIVITY_STREAMING_ONLY\": \"OFF\", \"WEB_REDESIGN_ACTION_BAR\": \"OFF\", \"QUICK_VIEW_FOLDER_VIEW\": \"OFF\", \"CONTENT_TILES_TRAILING_TRUNCATION\": \"OFF\", \"INTELLIGENCE_APRIL_2024_HOLDOUT_CONTROL\": \"OFF\", \"BROWSE_CAMPAIGN_CONFLICT_RESOLUTION\": false}");
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
+    window.require(["js/edison/edison"], function (edisonModule) {
+        edisonModule.Edison.waitUntilInitialized().then(function() {
+            edisonModule.Edison.doneStreaming();
+        });
+    });
+});
+</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=" async src="/page_success/end?edison_page_name=shared_link_generic_error&amp;path=%2Fscl%2Ffi%2F6nohk2uv89pupe8tjj9ib%2Fck_data_01242024.tar.gz&amp;request_id=f2bad419193640d08417c46bd13870a9&amp;time=1711501607" crossorigin="anonymous"></script>
+</body></html><!--status=200-->
\ No newline at end of file
diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 098c2e69..52dce8d0 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -49,12 +49,12 @@ inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {
   Real vy = *v3;
   Real vz = *v1;
 
-  Real delta = pow(pow(x, 2) + pow(y, 2) + 1, 1 / 2);
-  Real C = pow(1 + pow(x, 2), 1 / 2);
-  Real D = pow(1 + pow(y, 2), 1 / 2);
+  Real delta = sqrt(pow(x, 2) + pow(y, 2) + 1);
+  Real C = sqrt(1 + pow(x, 2));
+  Real D = sqrt(1 + pow(y, 2));
 
   *v1 = (vz - D * x * vx - C * y * vy) / delta;
-  *v2 =
+  *v2 = 
       (x * vz + D * vx) / delta;
   *v3 =
       (y * vz + C * vy) / delta;
@@ -69,13 +69,13 @@ inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {
   Real vy = *v3;
   Real vz = *v1;
 
-  Real delta = pow(pow(x, 2) + pow(y, 2) + 1, 1 / 2);
-  Real C = pow(1 + pow(x, 2), 1 / 2);
-  Real D = pow(1 + pow(y, 2), 1 / 2);
+  Real delta = sqrt(pow(x, 2) + pow(y, 2) + 1);
+  Real C = sqrt(1 + pow(x, 2));
+  Real D = sqrt(1 + pow(y, 2));
 
   *v1 = (vz + x * vx + y * vy) / delta;
   *v2 =
-      (-x * vz / D + vx * (1 + pow(vy, 2)) / D - vy * x * y / D) / delta;
+      (-x * vz / D + vx * (1 + pow(y, 2)) / D - vy * x * y / D) / delta;
   *v3 =
       (-y * vz / C - x * y * vx / C + (1 + pow(x, 2)) * vy / C) / delta;
 }
@@ -86,60 +86,182 @@ inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {
 inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
                             int panel) {
   vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
 
   switch (panel) {
     case 2:
       // z->y, x->-x, y->z
-      (*vx) *= -1;
-      vel_zxy_to_zab(vy, vx, vz, a, b);
+      //(*vx) *= -1;
+      //vel_zxy_to_zab(vy, vx, vz, a, b);
+      *vz = v3;
+      *vx = -v2;
+      *vy = v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 3:
       // z->-x, x->z, y->y
-      (*vz) *= -1;
-      vel_zxy_to_zab(vx, vz, vy, a, b);
+      //(*vz) *= -1;
+      //vel_zxy_to_zab(vx, vz, vy, a, b);
+      *vz = v2;
+      *vx = -v1;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 4:
       // z->-x, x->-y, y->z
-      (*vx) *= -1;
-      (*vy) *= -1;
-      vel_zxy_to_zab(vx, vy, vz, a, b);
+      //(*vx) *= -1;
+      //(*vy) *= -1;
+      //vel_zxy_to_zab(vx, vy, vz, a, b);
+      *vz = -v2;
+      *vx = -v3;
+      *vy = v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 5:
+      // z->-z, x->-x, y->y
+      *vz = -v1;
+      *vx = -v2;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 6:
       // z->-y, x->x, y->z
-      (*vy) *= -1;
-      vel_zxy_to_zab(vy, vx, vz, a, b);
+      //(*vy) *= -1;
+      //vel_zxy_to_zab(vy, vx, vz, a, b);
+      *vz = -v3;
+      *vx = v2;
+      *vy = v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
   }
 }
 
-inline void vel_zab_from_p1_test(std::vector<Real> &v, int panel) {
-  Real vz = v[0];
-  Real vx = v[1];
-  Real vy = v[2];
+inline void vel_zab_from_p2(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
   switch (panel) {
-    case 2:
+    case 1:
       // z->y, x->-x, y->z
-      //(*vx) *= -1;
-      v = {vy, -vx, vz};
+      *vz = v3;
+      *vx = -v2;
+      *vy = v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 2:
+      break;
+    case 4:
+      break;
+    case 5:
+      break;
+    case 6:
+      break;
+  }
+}
+
+inline void vel_zab_from_p3(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
+  switch (panel) {
+    case 1:
+      // z->x, x->-z, y->y
+      *vz = -v2;
+      *vx = v1;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 2:
+      break;
+    case 4:
+      break;
+    case 5:
+      break;
+    case 6:
+      break;
+  }
+}
+
+inline void vel_zab_from_p4(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
+  switch (panel) {
+    case 1:
+      // z->y, x->-z, y->-x
+      *vz = v3;
+      *vx = -v1;
+      *vy = -v2;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 2:
+      break;
+    case 3:
+      break;
+    case 5:
+      break;
+    case 6:
+      break;
+  }
+}
+
+inline void vel_zab_from_p5(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
+  switch (panel) {
+    case 1:
+      // z->-z, x->-x, y->y
+      *vz = -v1;
+      *vx = -v2;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 2:
       break;
     case 3:
-      // z->-x, x->z, y->y
-      //(*vz) *= -1;
-      v = {vx, -vz, vy};
       break;
     case 4:
-      // z->-x, x->-y, y->z
-      //(*vx) *= -1;
-      //(*vy) *= -1;
-      v = {-vx, -vy, vz};
       break;
     case 6:
-      // z->-y, x->x, y->z
-      //(*vy) *= -1;
-      v = {-vy, vx, vz};
+      break;
+  }
+}
+
+inline void vel_zab_from_p6(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
+  switch (panel) {
+    case 1:
+      // z->y, x->x, y->-z
+      *vz = v3;
+      *vx = v2;
+      *vy = -v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 2:
+      break;
+    case 3:
+      break;
+    case 4:
+      break;
+    case 5:
       break;
   }
 }
 }  // namespace CubedSphereUtility
 
-#endif  // SRC_EXO3_VELOCITY_ROTATION_HPP_
+#endif  // SRC_EXO3_VELOCITY_ROTATION_HPP_
\ No newline at end of file
diff --git a/tests/test_cs_velocity_rotation.cpp b/tests/test_cs_velocity_rotation.cpp
index 3173e464..e829f43c 100644
--- a/tests/test_cs_velocity_rotation.cpp
+++ b/tests/test_cs_velocity_rotation.cpp
@@ -14,18 +14,70 @@
 // exo3
 #include <exo3/cs_velocity_rotation.hpp>
 
-TEST(vel_zab_from_p1_test, test_case_to_4) {
-  std::vector <Real> result = {1,2,3};
-  std::vector <Real> expected_result = {-2,-3,1};
-  CubedSphereUtility::vel_zab_from_p1_test(result, 4);
-  EXPECT_EQ(result, expected_result);
+TEST(vel_zab_to_zxy, test_ab_to_xy_to_ab) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zxy_to_zab(vz, vx, vy, PI/3, PI/4);
+  std::cout << *vz << " " << *vx << " " << *vy;
+  CubedSphereUtility::vel_zab_to_zxy(vz, vx, vy, PI/3, PI/4);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], pow(10,-5));
+  }
 }
 
-TEST(vel_zab_from_p1_test, test_case_to_6) {
-  std::vector <Real> result = {1,2,3};
-  std::vector <Real> expected_result = {-3,2,1};
-  CubedSphereUtility::vel_zab_from_p1_test(result, 6);
-  EXPECT_EQ(result, expected_result);
+TEST(vel_zab_from_test, test_case_1_to_3_to_1) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 3);
+  CubedSphereUtility::vel_zab_from_p3(vz, vx, vy, PI/5*2, PI/8*3, 1);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], pow(10,-5));
+  }
+}
+
+TEST(vel_zab_from_test, test_case_1_to_4_to_1) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 4);
+  CubedSphereUtility::vel_zab_from_p4(vz, vx, vy, PI/5*2, PI/8*3, 1);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], pow(10,-5));
+  }
+}
+
+TEST(vel_zab_from_test, test_case_1_to_5_to_1) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 5);
+  CubedSphereUtility::vel_zab_from_p5(vz, vx, vy, PI/5*2, PI/8*3, 1);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], pow(10,-5));
+  }
+}
+
+TEST(vel_zab_from_test, test_case_1_to_6_to_1) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 6);
+  CubedSphereUtility::vel_zab_from_p6(vz, vx, vy, PI/5*2, PI/8*3, 1);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], pow(10,-5));
+  }
 }
 
 int main(int argc, char **argv) {

From 4e6bc7a8e38d1edf58e172bb2711e99e9527c54f Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Sat, 30 Mar 2024 12:03:34 -0400
Subject: [PATCH 18/22] correction

---
 data/ck_data_01242024.tar.gz        | 169 ----------------------------
 src/exo3/cs_velocity_rotation.hpp   |  38 ++-----
 tests/test_cs_velocity_rotation.cpp |  28 ++---
 3 files changed, 22 insertions(+), 213 deletions(-)
 delete mode 100644 data/ck_data_01242024.tar.gz

diff --git a/data/ck_data_01242024.tar.gz b/data/ck_data_01242024.tar.gz
deleted file mode 100644
index 1dad420e..00000000
--- a/data/ck_data_01242024.tar.gz
+++ /dev/null
@@ -1,169 +0,0 @@
-<!DOCTYPE html>
-<html class="maestro global-header" xmlns="http://www.w3.org/1999/xhtml" lang="en">
-<head><meta charset="utf-8" />
-<meta content="noindex, nofollow, noimageindex" name="robots" />
-<meta content="width=device-width, initial-scale=1" name="viewport" />
-<script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.EDISON_METRICS_JS_EXECUTION_START = performance.now();
-</script><title>Dropbox - Error - Simplify your life</title>
-<link rel="shortcut icon" href="https://cfl.dropboxstatic.com/static/metaserver/static/images/favicon.ico"/>
-<script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.CSP_SCRIPT_NONCE = "AneY6l0rmcrTspXW3Ml/lWjNg/M="</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">(()=>{"use strict";const e=window;let a;const r=()=>{a=[],e.addRequireLoadCallback=e=>a.push(e),e.configureRequire=function(){const a=arguments;e.addRequireLoadCallback(()=>e.configureRequire.apply(null,a))},e.define=function(){const a=arguments;e.addRequireLoadCallback(()=>e.define.apply(null,a))},e.preLoadFile=(...a)=>{e.addRequireLoadCallback(()=>e.preLoadFile.apply(null,a))}};r(),e._insertRequireShim=r,e.InitRequireJs=r=>{e.requireContexts={},e.performance&&null!=e.performance.now&&(requirejs.onResourceLoad=(a,r,i)=>{const l=e.performance.now(),n=e.requireContexts[a.id];if(n){r.id in n.module_callback_times||(n.module_callback_times[r.id]={});const e=n.module_callback_times[r.id];e.loadTime=l,r.url&&(e.url=r.url),r.id&&(e.name=r.id),r.parentMap&&r.parentMap.url&&(e.parent=r.parentMap.url)}}),e.configureRequire=r,e.addRequireLoadCallback=e=>e(),a.forEach(e=>e())}})();
-
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">(function () {
-    var start = performance.now();
-    window.addRequireLoadCallback(function() {
-        window.EDISON_METRICS_REQUIRE_LOAD_CALLBACK_TIME = performance.now() - start;
-    });
-})();
-</script><script nonce="qt/Rb6UUlrEW14eg1QL1RVaJaME=" src="https://cfl.dropboxstatic.com/static/metaserver/static/js/alameda_bundle/alameda_bundle_ie_en-vflXFwp8G.js" crossorigin="anonymous"></script>
-</head><body><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.RUNNING_IN_EDISON = true;
-var requireConfig = {"baseUrl": "https://cfl.dropboxstatic.com/", "waitSeconds": 30, "paths": {"atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c__commonjsHelpers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c__commonjsHelpers-vfllnoP_U", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_abuse_fingerprintjs_component": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_abuse_fingerprintjs_component-vflzZLLoa", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_abuse_funcaptcha_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_abuse_funcaptcha_modal-vflK7C5yq", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_accessibility_audit": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_accessibility_audit-vflDB77Rq", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_accessibility_ax_audit": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_accessibility_ax_audit-vfl-TBEcL", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_account_email": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_account_email-vflILGR0P", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_account_timezone_detection": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_account_timezone_detection-vfl5pa9ua", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_activation_data_slices": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_activation_data_slices-vflH5KQqm", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_activation_data_store": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_activation_data_store-vflXwtbc-", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_admin_tasks_dropdown_in_progress_admin_tasks": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_admin_tasks_dropdown_in_progress_admin_tasks-vfloyEogZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_adyen-checkout": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_adyen-checkout-vflm8avJe", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_adyen-web_dist_adyen": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_adyen-web_dist_adyen-vfldQm_Gq", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_apex-metrics_src_types": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_apex-metrics_src_types-vflRK2vZU", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_api_v2_default_team_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_api_v2_default_team_client-vfltVfvuC", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_api_v2_routes_domain_contacts_provider": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_api_v2_routes_domain_contacts_provider-vfltgbUI4", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_assets_pictogram_lightbulb": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_assets_pictogram_lightbulb-vflTULxD5", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_assets_pictogram_warning": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_assets_pictogram_warning-vflGUBZH3", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_auth_login_or_register_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_auth_login_or_register_modal-vflTSbH-Z", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_auth_login_or_register_types": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_auth_login_or_register_types-vflwwH5oK", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_banner_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_banner_index-vflkPzOQt", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_bem": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_bem-vflSgJN94", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browse_uri_helper": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browse_uri_helper-vflKHIQg4", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browse_uri_interface": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browse_uri_interface-vfld8tSDv", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browser_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_browser_index-vfl_G2Bx_", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_action_choice_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_action_choice_modal-vfl2XnZd8", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_banner_campaign_banner": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_banner_campaign_banner-vflRe6nRy", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_billing_modal_campaign_billing_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_billing_modal_campaign_billing_modal-vflpRNrP0", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_dialog_campaign_dialog": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_dialog_campaign_dialog-vflsA-LlH", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_bubble_campaign_link_bubble": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_bubble_campaign_link_bubble-vflJxsg9R", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_campaign_link": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_campaign_link-vflBnOghp", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_campaign_link_renderer": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_link_campaign_link_renderer-vflDxpGts", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_menu_campaign_menu_item": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_menu_campaign_menu_item-vflFtePgV", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_modal_campaign_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_modal_campaign_modal-vflGs568w", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_pulsar_campaign_pulsar": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_pulsar_campaign_pulsar-vfl5e_QSu", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_snackbar_campaign_snackbar": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_snackbar_campaign_snackbar-vfl1SvGvl", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_tooltip_campaign_tooltip": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaign_formats_tooltip_campaign_tooltip-vflypBa1E", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_action_defs_api": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_action_defs_api-vfll7ppR7", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaign_uri_param": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaign_uri_param-vfleQ9pvD", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaigns_element_id_enum": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaigns_element_id_enum-vflW3pU6B", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaigns_toolkit_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_campaigns_toolkit_client-vflsszjsn", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_hooks_logging": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_campaigns_hooks_logging-vflMo_8mZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_chat_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_chat_client-vflG6sUHo", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_dialogue": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_dialogue-vflSaZZ79", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_dialogue_logging": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chat_dialogue_logging-vflTnkUbd", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chip_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_chip_index-vfl2Jtmje", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_combinations_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_combinations_index-vflP7BeXi", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_components_dwg-tooltip_control": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_components_dwg-tooltip_control-vflbMLz4X", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_components_order_summary_redesign_order_summary_utils": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_components_order_summary_redesign_order_summary_utils-vfla9kPPQ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_contacts_types": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_contacts_types-vflUPnnuG", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_controls_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_controls_index-vflsW1F5J", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_attribution_header": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_attribution_header-vflZPsXEt", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_exception_info": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_exception_info-vflUROgBu", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_i18n": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_i18n-vflSDWhD-", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_notify": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_notify-vflhfHTHw", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_toast_toast_on_init": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_toast_toast_on_init-vflc6Kq_l", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_transport_query_string_helpers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_transport_query_string_helpers-vflphrWge", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_xhr": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_core_xhr-vflCcDVOv", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_csrf": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_csrf-vflYURPxp", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_checkout_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_checkout_modal-vflKjWdYd", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_lmo_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_lmo_modal-vflz0cj_a", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_mid_trial_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_mid_trial_modal-vflYUWddC", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_onboarding_survey_modal_campaign_onboarding_survey_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_custom_campaigns_onboarding_survey_modal_campaign_onboarding_survey_modal-vflC930AA", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_dev_notifier_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_dev_notifier_client-vflb95px-", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_launcher_launcher_item": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_launcher_launcher_item-vflfOwzZT", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_launcher_launcher_sandbox": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_launcher_launcher_sandbox-vfl1jPA7h", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_panels": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_devtools_panels-vflzCGRuO", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_dialogue_actions_chat_actions": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_dialogue_actions_chat_actions-vfltOv9zJ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_dialogue_reducers_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_dialogue_reducers_index-vflEURdEn", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_edison_cookies_check": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_edison_cookies_check-vflssKe5D", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_edison_ui_react_router_compat": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_edison_ui_react_router_compat-vfl10ZjlS", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_elliptic_lib_elliptic": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_elliptic_lib_elliptic-vflbt-Idu", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_em_string": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_em_string-vflr-GBLg", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_esm_useResizeObserver": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_esm_useResizeObserver-vflZKuaNG", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_file_imports_ui_entry": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_file_imports_ui_entry-vflsjojYo", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_fingerprintjs-pro-static_dist_fp": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_fingerprintjs-pro-static_dist_fp-vflWzBQ6s", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_form_row_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_form_row_index-vflWKbE7W", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth-components_plan-comparison-modal_plan_comparison_modal_contents": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth-components_plan-comparison-modal_plan_comparison_modal_contents-vflOjRV9H", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth-components_quota-bar_quota_bar": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth-components_quota-bar_quota_bar-vfl5C_To7", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth_trials_api_v2": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_growth_trials_api_v2-vfl1Qlags", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_helpers_esm_extends": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_helpers_esm_extends-vflk9wiuf", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_helpers_hooks_component-did-mount": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_helpers_hooks_component-did-mount-vflybgC_I", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_hooks_use_screen_size": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_hooks_use_screen_size-vflVXptS5", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_init_data_edison": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_init_data_edison-vflQn2hgW", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_invite_nav_invite_button_invite_button": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_invite_nav_invite_button_invite_button-vflR3IOAW", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_learning_center": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_learning_center-vfl4AL39e", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_learning_center2": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_learning_center2-vflabOiS9", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_list_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_list_index-vfl-CX5nU", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_lodash-es_lodash": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_lodash-es_lodash-vflOJ76WI", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_lottie-react_build_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_lottie-react_build_index-vflHxPNUl", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_assets_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_assets_index-vflk4pr4Y", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_index-vflZkRkCf", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_pictogram_icon": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_pictogram_icon-vfl79RS2X", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_shelf-empty": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_shelf-empty-vflmVLvSJ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_star-stickers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_star-stickers-vflhv6pi3", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_traffic-duck-crossing": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_traffic-duck-crossing-vflrcHPYD", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_traffic-road-blocked": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_traffic-road-blocked-vflFWABVl", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_trash-empty": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_mjs_spot_trash-empty-vfl2PKw-O", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_modal_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_modal_index-vflBI4oiM", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ncct_manual_assist_util": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ncct_manual_assist_util-vflnx3hwy", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_payments_skus_subscription_service": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_payments_skus_subscription_service-vflWuwJ6x", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_performance-bookmarklet": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_performance-bookmarklet-vfllvBlJR", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_photo_upload_controller": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_photo_upload_controller-vflxpE8ZS", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_pkijs_build_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_pkijs_build_index-vflCJK0Gn", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_privacy_consent_load_privacy_consent": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_privacy_consent_load_privacy_consent-vfl2xmSlQ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_profile_services_profile_services_constants": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_profile_services_profile_services_constants-vfl6UuiKD", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_profile_services_profile_services_link": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_profile_services_profile_services_link-vflgEQ_m7", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_prompt_ui_home_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_prompt_ui_home_modal-vflnO7p3g", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_pvtsutils_build_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_pvtsutils_build_index-vflMf9vHp", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react-dom-next_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react-dom-next_client-vflHpoegk", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react-is_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react-is_index-vflRE116H", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react_query_api_helpers_helpers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react_query_api_helpers_helpers-vflMcF9xk", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react_query_helpers_helpers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_react_query_helpers_helpers-vfl6e6Mlc", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_redux_unsupported": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_redux_unsupported-vfl6IRrTX", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_rfc4648_lib_rfc4648": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_rfc4648_lib_rfc4648-vfl6x26tb", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_crypto": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_crypto-vfld_nxWG", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_legacy_edge_shim": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_legacy_edge_shim-vflWoj9F4", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_passwords": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_passwords-vflAYFjYz", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_util": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_security_util-vfl0R6-29", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_server_side_client_view_bridge": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_server_side_client_view_bridge-vfljr-Lbf", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_sharing_api_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_sharing_api_client-vflA0vXAY", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_signup_signin_helpers": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_signup_signin_helpers-vflR4ofYC", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_button": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_button-vflbl__lW", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_checkbox": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_checkbox-vfllSICkU", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_popover_popover_trigger": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_spectrum_popover_popover_trigger-vfl573k3i", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_common_constants": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_common_constants-vflYpH7jL", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_query_client": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_query_client-vflHQ8_Ke", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_sink_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_src_sink_index-vflkFkPYe", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_styled-components": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_styled-components-vflhixqjF", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_teams_idle_timeout_pagelet": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_teams_idle_timeout_pagelet-vflGWBzUx", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_teams_team_creation_free_team_create_button": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_teams_team_creation_free_team_create_button-vflM4eE-E", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_toolkit_dist_redux-toolkit": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_toolkit_dist_redux-toolkit-vflrT4xxl", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_truncate_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_truncate_index-vflEUk4R2", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_fill_checkmark-circle": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_fill_checkmark-circle-vflIsqCOt", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_fill_fail": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_fill_fail-vflE34k63", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_calendar": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_calendar-vflBKIbWs", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_checkmark-circle": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_checkmark-circle-vflm0XeuC", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_comment": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_comment-vflDUhTez", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_dropbox": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_dropbox-vflCJ86lo", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_folder": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_folder-vflCAym72", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_link": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_link-vflOMA3xx", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_more-horizontal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_more-horizontal-vflY7ites", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_passwords": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_passwords-vflgE7dCA", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_pdf": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_pdf-vflG-8hrL", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_phone-support": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_phone-support-vflRABWw9", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_shield": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_shield-vflwzjTRW", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_show": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_show-vfluvLUI2", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_signature": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_signature-vflGfCdc6", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_space": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_space-vflMCoFuC", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_star": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_star-vfl50A3nL", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_syncing": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_syncing-vfl3UtdCt", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_twinkle-1": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_twinkle-1-vflkOx463", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_twinkle-2": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_twinkle-2-vflEASq4-", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upgrade": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upgrade-vfldBme3P", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upload": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upload-vfllEXd6f", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upload-file": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui-icon_line_upload-file-vfl0fTpta", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_contact_sales_button_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_contact_sales_button_index-vflIPfVQ2", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_image": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_image-vflJC1030", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_input_dig": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_input_dig-vfl5OUcAZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_locale_selector_modal": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_locale_selector_modal-vflNqziWZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_modal_dig": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_modal_dig-vfl11cKpZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_overlay": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_overlay-vflHzSaP5", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_sprite": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_sprite-vflNK4XSO", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_trials_types": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ui_trials_types-vfl2ZJBmG", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_use-sync-external-store_shim_index": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_use-sync-external-store_shim_index-vflH_PMqU", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_dropdown_bluenote_row": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_dropdown_bluenote_row-vflZix-r8", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_group_actions": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_group_actions-vflulEplj", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_sharing_actions": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_user_notifications_sharing_actions-vflgXGCu2", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ux_analytics_styles_devtools": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ux_analytics_styles_devtools-vflsHFAjm", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ux_analytics_ux_variants": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_ux_analytics_ux_variants-vflrOeCUV", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_uxa_pagelet": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_uxa_pagelet-vfl7IPGM9", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_zxcvbn_lib_main": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/c_zxcvbn_lib_main-vflMo_kar", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception-vfl3MW8JA", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception_reporter": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception_reporter-vflHWmykm", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_data_modules_stormcrow": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_data_modules_stormcrow-vflyE-JQZ", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison-vflTYFpvH", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_edison_react_page": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_edison_react_page-vfld2O7LI", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_error_pages_generic_error": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_error_pages_generic_error-vfl_VAFXn", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_init_edison_page": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_init_edison_page-vfl0279Fr", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-vflYWmbcM", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom-vflI7_n6Z", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom-next": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom-next-vflZBQXkh", "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-next": "static/atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-next-vfl2G3Nv-", "json_loader!metaserver/static/js/langpack/icu-da_DK.json": "static/metaserver/static/js/langpack/icu-da_DK-vflz5Aofy.json", "json_loader!metaserver/static/js/langpack/icu-de.json": "static/metaserver/static/js/langpack/icu-de-vflnZDWu5.json", "json_loader!metaserver/static/js/langpack/icu-en.json": "static/metaserver/static/js/langpack/icu-en-vflmZFLky.json", "json_loader!metaserver/static/js/langpack/icu-en_GB.json": "static/metaserver/static/js/langpack/icu-en_GB-vfltLIjhc.json", "json_loader!metaserver/static/js/langpack/icu-es.json": "static/metaserver/static/js/langpack/icu-es-vfliQeUel.json", "json_loader!metaserver/static/js/langpack/icu-es_ES.json": "static/metaserver/static/js/langpack/icu-es_ES-vflgUwS5J.json", "json_loader!metaserver/static/js/langpack/icu-fr.json": "static/metaserver/static/js/langpack/icu-fr-vfl1LwDrl.json", "json_loader!metaserver/static/js/langpack/icu-fr_CA.json": "static/metaserver/static/js/langpack/icu-fr_CA-vflijstqJ.json", "json_loader!metaserver/static/js/langpack/icu-id.json": "static/metaserver/static/js/langpack/icu-id-vflxf4Zlf.json", "json_loader!metaserver/static/js/langpack/icu-it.json": "static/metaserver/static/js/langpack/icu-it-vflyd3m9_.json", "json_loader!metaserver/static/js/langpack/icu-ja.json": "static/metaserver/static/js/langpack/icu-ja-vfl6JKIwA.json", "json_loader!metaserver/static/js/langpack/icu-ko.json": "static/metaserver/static/js/langpack/icu-ko-vfliqi4JH.json", "json_loader!metaserver/static/js/langpack/icu-ms.json": "static/metaserver/static/js/langpack/icu-ms-vflfrDaqK.json", "json_loader!metaserver/static/js/langpack/icu-nb_NO.json": "static/metaserver/static/js/langpack/icu-nb_NO-vfloF6-xZ.json", "json_loader!metaserver/static/js/langpack/icu-nl_NL.json": "static/metaserver/static/js/langpack/icu-nl_NL-vflV2Y9za.json", "json_loader!metaserver/static/js/langpack/icu-pl.json": "static/metaserver/static/js/langpack/icu-pl-vflO3u_H-.json", "json_loader!metaserver/static/js/langpack/icu-pt_BR.json": "static/metaserver/static/js/langpack/icu-pt_BR-vflZx9YUt.json", "json_loader!metaserver/static/js/langpack/icu-ru.json": "static/metaserver/static/js/langpack/icu-ru-vfl1TbeBp.json", "json_loader!metaserver/static/js/langpack/icu-sv_SE.json": "static/metaserver/static/js/langpack/icu-sv_SE-vflq-z-Fs.json", "json_loader!metaserver/static/js/langpack/icu-th_TH.json": "static/metaserver/static/js/langpack/icu-th_TH-vflfbH6k9.json", "json_loader!metaserver/static/js/langpack/icu-uk_UA.json": "static/metaserver/static/js/langpack/icu-uk_UA-vflj-DvNQ.json", "json_loader!metaserver/static/js/langpack/icu-xx_AC.json": "static/metaserver/static/js/langpack/icu-xx_AC-vflST8SVY.json", "json_loader!metaserver/static/js/langpack/icu-xx_AE.json": "static/metaserver/static/js/langpack/icu-xx_AE-vflVwdr3j.json", "json_loader!metaserver/static/js/langpack/icu-xx_HA.json": "static/metaserver/static/js/langpack/icu-xx_HA-vflYiD2Dq.json", "json_loader!metaserver/static/js/langpack/icu-xx_LS.json": "static/metaserver/static/js/langpack/icu-xx_LS-vflqEK5lE.json", "json_loader!metaserver/static/js/langpack/icu-xx_RL.json": "static/metaserver/static/js/langpack/icu-xx_RL-vfl3pGz8C.json", "json_loader!metaserver/static/js/langpack/icu-zh_CN.json": "static/metaserver/static/js/langpack/icu-zh_CN-vflDIaxPh.json", "json_loader!metaserver/static/js/langpack/icu-zh_TW.json": "static/metaserver/static/js/langpack/icu-zh_TW-vflf1_VlL.json"}, "bundles": {}, "map": {"*": {"metaserver/static/js/langpack": "json_loader!metaserver/static/js/langpack/icu-en.json", "metaserver/static/js/file_viewer/edison/error_pages/generic_error": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_error_pages_generic_error", "metaserver/static/js/core/exception": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception", "metaserver/static/js/core/exception_reporter": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception_reporter", "js/edison/edison": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison", "js/data_modules/stormcrow": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_data_modules_stormcrow", "metaserver/static/js/edison/init_edison_page": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_init_edison_page", "js/edison/edison_react_page": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_edison_react_page", "react": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react", "react-dom": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom", "react-next": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-next", "react-dom-next": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom-next", "metaserver/static/js/modules/constants/contacts": "data_module!metaserver/static/js/modules/constants/contacts", "metaserver/static/js/modules/constants/fingerprintjs_constants": "data_module!metaserver/static/js/modules/constants/fingerprintjs_constants", "metaserver/static/js/modules/constants/locales": "data_module!metaserver/static/js/modules/constants/locales", "metaserver/static/js/modules/constants/login_and_register": "data_module!metaserver/static/js/modules/constants/login_and_register", "metaserver/static/js/modules/constants/search": "data_module!metaserver/static/js/modules/constants/search", "metaserver/static/js/modules/constants/sharing": "data_module!metaserver/static/js/modules/constants/sharing", "metaserver/static/js/modules/constants/time": "data_module!metaserver/static/js/modules/constants/time", "metaserver/static/js/modules/constants/viewer": "data_module!metaserver/static/js/modules/constants/viewer", "metaserver/static/js/modules/constants/web_experience_constants": "data_module!metaserver/static/js/modules/constants/web_experience_constants"}, "metaserver/static/js/core/exception_info": {"metaserver/static/js/langpack": "json_loader!metaserver/static/js/langpack/icu-en.json", "metaserver/static/js/file_viewer/edison/error_pages/generic_error": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_error_pages_generic_error", "metaserver/static/js/core/exception": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception", "metaserver/static/js/core/exception_reporter": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_core_exception_reporter", "js/edison/edison": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison", "js/data_modules/stormcrow": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_data_modules_stormcrow", "metaserver/static/js/edison/init_edison_page": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_init_edison_page", "js/edison/edison_react_page": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/e_edison_edison_react_page", "react": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react", "react-dom": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom", "react-next": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-next", "react-dom-next": "atlas/file_viewer/shared_link_generic_error_bundle_amd/dist/react-dom-next", "metaserver/static/js/modules/constants/contacts": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/contacts", "metaserver/static/js/modules/constants/fingerprintjs_constants": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/fingerprintjs_constants", "metaserver/static/js/modules/constants/locales": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/locales", "metaserver/static/js/modules/constants/login_and_register": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/login_and_register", "metaserver/static/js/modules/constants/search": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/search", "metaserver/static/js/modules/constants/sharing": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/sharing", "metaserver/static/js/modules/constants/time": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/time", "metaserver/static/js/modules/constants/viewer": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/viewer", "metaserver/static/js/modules/constants/web_experience_constants": "unreadable_jsconst_loader!metaserver/static/js/modules/constants/web_experience_constants"}}, "shim": {}, "nodeIdCompat": true};
-window.addRequireLoadCallback(function() {
-    window.configureRequire(requireConfig, {
-        sentryOptions: {"dsn":"https://015d5ce7dd3142cd8fca094a50adbf69@d.dropbox.com/4505546831036416","release":"978f2b900a8e41d9ac01c7d87480d86d2bbb4cf3","environment":"canary","tags":{"edison_page_name":"shared_link_generic_error","browser_id":"5763630696314505067488660972944034910"}},
-        requireFallbackBaseUrl: "https://www.dropboxstatic.com/",
-        langpack: {locale: "en"},
-        useReactNext: false ,
-        exceptionExtras: {"page_repo_rev":"978f2b900a8e41d9ac01c7d87480d86d2bbb4cf3","yaps_deployment":"canary","yaps_project":"edison_atlasservlet.file_viewer-edison","page_locale":"en","page_load_timestamp":1711501606},
-        exceptionTags: ["is_edison","browser-id:5763630696314505067488660972944034910","edison_page_name:shared_link_generic_error","edison_atlasservlet:file_viewer","edison_atlasservlet:file_viewer:canary"],
-        initDataBase64: "EiBmMmJhZDQxOTE5MzY0MGQwODQxN2M0NmJkMTM4NzBhORim4o2wBiJxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTA6SQolNTc2MzYzMDY5NjMxNDUwNTA2NzQ4ODY2MDk3Mjk0NDAzNDkxMBIgMDQ1NjA4ZWVkYWYyZGRhMDZhNzlhMDhmOGViOTBjNWVCJmVkaXNvbl9hdGxhc3NlcnZsZXQuZmlsZV92aWV3ZXItZWRpc29uSgZjYW5hcnlSGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3JaAmVuYig5NzhmMmI5MDBhOGU0MWQ5YWMwMWM3ZDg3NDgwZDg2ZDJiYmI0Y2YzalIKIXgtZHJvcGJveC1jbGllbnQteWFwcy1hdHRyaWJ1dGlvbhItZWRpc29uX2F0bGFzc2VydmxldC5maWxlX3ZpZXdlci1lZGlzb246Y2FuYXJ5cgQKABIAehNzaGFyZWRfY29udGVudF9saW5rggEoc2hhcmVkX2NvbnRlbnRfbGlua192aWV3X2ZpbGVfYW5kX2ZvbGRlcg=="
-    }, []);
-    var start = performance.now();
-    window.require(["metaserver/static/js/edison/init_edison_page"], function(mod) {
-        window.EDISON_METRICS_INIT_PAGE_MODULE_LOAD_TIME = performance.now() - start;
-        mod.initPage("EgtmaWxlX3ZpZXdlchoZc2hhcmVkX2xpbmtfZ2VuZXJpY19lcnJvcjI1L3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3pKE3NoYXJlZF9jb250ZW50X2xpbmtSKHNoYXJlZF9jb250ZW50X2xpbmtfdmlld19maWxlX2FuZF9mb2xkZXJiKDk3OGYyYjkwMGE4ZTQxZDlhYzAxYzdkODc0ODBkODZkMmJiYjRjZjNqKDQ2Nzc0ZWMzYTViYjIwZjA3NGM0MTRiZDhmYzkyOWM2ZDllNDhkMTNwAXoGY2FuYXJ5sgEJL2R3czIvcnBjygFBbWV0YXNlcnZlci9zdGF0aWMvanMvZmlsZV92aWV3ZXIvZWRpc29uL2Vycm9yX3BhZ2VzL2dlbmVyaWNfZXJyb3LiAXFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MPABAYgCAZACAbICIDA0NTYwOGVlZGFmMmRkYTA2YTc5YTA4ZjhlYjkwYzVl");
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-
-  window.require(
-    ["js/edison/edison", "js/edison/edison_react_page", "metaserver/static/js/file_viewer/edison/error_pages/generic_error"],
-    function(edisonModule, edisonReactPageModule, mod) {
-      edisonModule.Edison.waitUntilInitialized().then(function() {
-        edisonReactPageModule.render(mod, false , "", false );
-      });
-    }
-  );
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            if (edisonModule.Edison.markServerSidePrefetchStarted) {
-                edisonModule.Edison.markServerSidePrefetchStarted(["Es4CCiN3ZWJfcGxhdGZvcm0uV2ViUGxhdGZvcm1FZGlzb25GZXRjaBITRWRpc29uRGV2VG9vbHNGZXRjaBrpARLmAVJxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTBacWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wKgtmaWxlX3ZpZXdlcjIZc2hhcmVkX2xpbmtfZ2VuZXJpY19lcnJvcg==","Es8CCixzdXBlcl9hZG1pbl9hbmRfZGVwbG95bWVudC5FZGlzb25JZGxlVGltZW91dBILSWRsZVRpbWVvdXQa6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=","Eu0CCjpwcml2YWN5X2NvbnNlbnRfZWRpc29uLlByaXZhY3lDb25zZW50RWRpc29uUHJlZmV0Y2hTZXJ2aWNlEhtQcml2YWN5Q29uc2VudFByb3BzUHJlZmV0Y2ga6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=","Es0CCiN3ZWJfcGxhdGZvcm0uV2ViUGxhdGZvcm1FZGlzb25GZXRjaBISRWRpc29uVG9wTWVudUZldGNoGukBEuYBUnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MFpxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTAqC2ZpbGVfdmlld2VyMhlzaGFyZWRfbGlua19nZW5lcmljX2Vycm9y","EtgCCit1c2VyX3N1cnZleS5FZGlzb25Vc2VyU3VydmV5UHJlZmV0Y2hTZXJ2aWNlEhVFZGlzb25Vc2VyU3VydmV5RmV0Y2ga6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=","Es4CCiZ1eF9hbmFseXRpY3MuVXhBbmFseXRpY3NFZGlzb25TZXJ2aWNlchIQVXhBbmFseXRpY3NGZXRjaBrpARLmAVJxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTBacWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wKgtmaWxlX3ZpZXdlcjIZc2hhcmVkX2xpbmtfZ2VuZXJpY19lcnJvcg=="]);
-            }
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/time", "json", "{\"DATETIME_FORMAT\": \"M/d/yyyy h:mm a\", \"TIMEZONE_OFFSET\": 0, \"TIMEZONE\": \"\", \"DATE_FORMAT\": \"M/d/yyyy\", \"TIME_FORMAT\": \"h:mm a\"}");
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/viewer", "json", "{\"DEFAULT_ROOT_NAME\": \"Dropbox\", \"PERSONAL_ROLE_STRING\": \"Personal\", \"_viewer_properties\": {\"_user_data\": [], \"is_team_assume_user_session\": false, \"is_assume_user_session\": false}, \"prompt_ha_hiding\": true, \"LOCALE\": \"US\"}");
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/locales", "json", "{\"LIST_OF_LOCALES_WITH_INTERNAL\": [{\"localeCode\": \"id\", \"localeName\": \"Bahasa Indonesia\", \"decorator\": \"\"}, {\"localeCode\": \"ms\", \"localeName\": \"Bahasa Malaysia\", \"decorator\": \"\"}, {\"localeCode\": \"da_DK\", \"localeName\": \"Dansk\", \"decorator\": \"\"}, {\"localeCode\": \"de\", \"localeName\": \"Deutsch\", \"decorator\": \"\"}, {\"localeCode\": \"en_GB\", \"localeName\": \"English (United Kingdom)\", \"decorator\": \"\"}, {\"localeCode\": \"en\", \"localeName\": \"English (United States)\", \"decorator\": \"\"}, {\"localeCode\": \"es_ES\", \"localeName\": \"Espa\\u00f1ol (Espa\\u00f1a)\", \"decorator\": \"\"}, {\"localeCode\": \"es\", \"localeName\": \"Espa\\u00f1ol (Latinoam\\u00e9rica)\", \"decorator\": \"\"}, {\"localeCode\": \"fr_CA\", \"localeName\": \"Fran\\u00e7ais (Canada)\", \"decorator\": \"\"}, {\"localeCode\": \"fr\", \"localeName\": \"Fran\\u00e7ais (France)\", \"decorator\": \"\"}, {\"localeCode\": \"it\", \"localeName\": \"Italiano\", \"decorator\": \"\"}, {\"localeCode\": \"nl_NL\", \"localeName\": \"Nederlands\", \"decorator\": \"\"}, {\"localeCode\": \"nb_NO\", \"localeName\": \"Norsk (bokm\\u00e5l)\", \"decorator\": \"\"}, {\"localeCode\": \"pl\", \"localeName\": \"Polski\", \"decorator\": \"\"}, {\"localeCode\": \"pt_BR\", \"localeName\": \"Portugu\\u00eas (Brasil)\", \"decorator\": \"\"}, {\"localeCode\": \"ru\", \"localeName\": \"P\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", \"decorator\": \"\"}, {\"localeCode\": \"sv_SE\", \"localeName\": \"Svenska\", \"decorator\": \"\"}, {\"localeCode\": \"uk_UA\", \"localeName\": \"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\", \"decorator\": \"\"}, {\"localeCode\": \"th_TH\", \"localeName\": \"\\u0e44\\u0e17\\u0e22\", \"decorator\": \"\"}, {\"localeCode\": \"zh_CN\", \"localeName\": \"\\u4e2d\\u6587\\uff08\\u7b80\\u4f53\\uff09\", \"decorator\": \"\"}, {\"localeCode\": \"zh_TW\", \"localeName\": \"\\u4e2d\\u6587\\uff08\\u7e41\\u9ad4\\uff09\", \"decorator\": \"\"}, {\"localeCode\": \"ja\", \"localeName\": \"\\u65e5\\u672c\\u8a9e\", \"decorator\": \"\"}, {\"localeCode\": \"ko\", \"localeName\": \"\\ud55c\\uad6d\\uc5b4\", \"decorator\": \"\"}], \"LIST_OF_LOCALES_WITHOUT_INTERNAL\": [{\"localeCode\": \"id\", \"localeName\": \"Bahasa Indonesia\", \"decorator\": \"\"}, {\"localeCode\": \"ms\", \"localeName\": \"Bahasa Malaysia\", \"decorator\": \"\"}, {\"localeCode\": \"da_DK\", \"localeName\": \"Dansk\", \"decorator\": \"\"}, {\"localeCode\": \"de\", \"localeName\": \"Deutsch\", \"decorator\": \"\"}, {\"localeCode\": \"en_GB\", \"localeName\": \"English (United Kingdom)\", \"decorator\": \"\"}, {\"localeCode\": \"en\", \"localeName\": \"English (United States)\", \"decorator\": \"\"}, {\"localeCode\": \"es_ES\", \"localeName\": \"Espa\\u00f1ol (Espa\\u00f1a)\", \"decorator\": \"\"}, {\"localeCode\": \"es\", \"localeName\": \"Espa\\u00f1ol (Latinoam\\u00e9rica)\", \"decorator\": \"\"}, {\"localeCode\": \"fr_CA\", \"localeName\": \"Fran\\u00e7ais (Canada)\", \"decorator\": \"\"}, {\"localeCode\": \"fr\", \"localeName\": \"Fran\\u00e7ais (France)\", \"decorator\": \"\"}, {\"localeCode\": \"it\", \"localeName\": \"Italiano\", \"decorator\": \"\"}, {\"localeCode\": \"nl_NL\", \"localeName\": \"Nederlands\", \"decorator\": \"\"}, {\"localeCode\": \"nb_NO\", \"localeName\": \"Norsk (bokm\\u00e5l)\", \"decorator\": \"\"}, {\"localeCode\": \"pl\", \"localeName\": \"Polski\", \"decorator\": \"\"}, {\"localeCode\": \"pt_BR\", \"localeName\": \"Portugu\\u00eas (Brasil)\", \"decorator\": \"\"}, {\"localeCode\": \"ru\", \"localeName\": \"P\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", \"decorator\": \"\"}, {\"localeCode\": \"sv_SE\", \"localeName\": \"Svenska\", \"decorator\": \"\"}, {\"localeCode\": \"uk_UA\", \"localeName\": \"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\", \"decorator\": \"\"}, {\"localeCode\": \"th_TH\", \"localeName\": \"\\u0e44\\u0e17\\u0e22\", \"decorator\": \"\"}, {\"localeCode\": \"zh_CN\", \"localeName\": \"\\u4e2d\\u6587\\uff08\\u7b80\\u4f53\\uff09\", \"decorator\": \"\"}, {\"localeCode\": \"zh_TW\", \"localeName\": \"\\u4e2d\\u6587\\uff08\\u7e41\\u9ad4\\uff09\", \"decorator\": \"\"}, {\"localeCode\": \"ja\", \"localeName\": \"\\u65e5\\u672c\\u8a9e\", \"decorator\": \"\"}, {\"localeCode\": \"ko\", \"localeName\": \"\\ud55c\\uad6d\\uc5b4\", \"decorator\": \"\"}], \"FR_CA_LOCALE_ENABLED\": true}");
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/search", "json", "{\"SEARCH_WEB_MAIN_KIEV_ENABLED\": false, \"SEARCH_WEB_MAIN2_KIEV_ENABLED\": false, \"SEARCH_EXPERIMENT_ZERO_STATE_DROPDOWN_VARIANT\": \"OFF\", \"SEARCH_WEB_REDESIGN_2023_VARIANT\": \"OFF\", \"SEARCH_ALPHA_NATURAL_LANGUAGE_SEARCH_VARIANT\": \"OFF\", \"SEARCH_WEB_AI_CONTROL_CENTER_VARIANT\": \"OFF\", \"SEARCH_WEB_AI_EARLY_ADOPTER_ENABLED\": false, \"HTTP3_SUPPORT_ENABLED\": false}");
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedPrefetch("Es8CCixzdXBlcl9hZG1pbl9hbmRfZGVwbG95bWVudC5FZGlzb25JZGxlVGltZW91dBILSWRsZVRpbWVvdXQa6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=", "",  false );
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedPrefetch("Es4CCiZ1eF9hbmFseXRpY3MuVXhBbmFseXRpY3NFZGlzb25TZXJ2aWNlchIQVXhBbmFseXRpY3NGZXRjaBrpARLmAVJxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTBacWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wKgtmaWxlX3ZpZXdlcjIZc2hhcmVkX2xpbmtfZ2VuZXJpY19lcnJvcg==", "CAESpSh7InJlcXVlc3RJZCI6ICJmMmJhZDQxOTE5MzY0MGQwODQxN2M0NmJkMTM4NzBhOSIsICJvcmdSZWZlcnJlciI6ICIiLCAiaHR0cFJlZmVycmVyIjogIiIsICJwcmV2aW91c1VybCI6ICIiLCAidmlzaXRJZCI6ICIiLCAiZXZlbnRfbmFtZXMiOiBbImdvb2dsZV9sb2dpbl9zdGFydCIsICJ0bF9wYWdlX3ZpZXciLCAiZW1haWxfc2lnbnVwX3N1Y2NlZWRlZCIsICJkb2N1bWVudF9vcGVuIiwgInByb2R1Y3QiLCAiY2xpY2tfc291cmNlIiwgImZpbmFsX2hlYXJ0YmVhdCIsICJtb2RhbF9jbG9zZSIsICJzaWFfbG9naW5fcmVxdWlyZXNfdHdvX2ZhY3RvciIsICJhZG1pbl9ob21lX2NsaWVudF9iYW5uZXJfY2xpY2tlZCIsICJhcHBfbmFtZSIsICJlbWFpbF9sb2dpbl9mYWlsZWQiLCAicGFyZW50X3Byb2R1Y3QiLCAic2lhX2xvZ2luX3N0YXJ0IiwgInV4YV9kZWJ1Z192ZXJzaW9uIiwgImRvY3VtZW50X2Nsb3NlIiwgImRyb3Bib3hfZG93bmxvYWQiLCAidG90YWxfdGltZSIsICJsb2dpbl9tb2RhbF9kaXNtaXNzZWQiLCAiZ29vZ2xlX2xvZ2luX2ZhaWxlZCIsICJzY3JpcHRfaWQiLCAiYmZjYWNoZV9lbGlnaWJsZSIsICJwdXJjaGFzZV9wcmljZSIsICJzaWdudXBfbW9kYWxfZGlzbWlzc2VkIiwgImhzX2FjdGlvbiIsICJnb29nbGVfbG9naW5fc3VjY2VlZGVkIiwgImVtYWlsX2xvZ2luX3JlZGlyZWN0IiwgImVtYWlsX3NwbGl0X3NpZ251cF9jb250aW51ZSIsICJoc19jYXRlZ29yeSIsICJiaWxsaW5nX2N5Y2xlIiwgImxpbmtfbm9fc2Vzc2lvbl9zdG9yYWdlIiwgImdvb2dsZV9zaWdudXBfc3RhcnQiLCAiYWRvYmVfdGFyZ2V0X3ZhcmlhbnRzIiwgImVsZW1lbnRfY2xpY2siLCAibGlua19jbGljayIsICJjbGlja190b29sdGlwX3NpZ25pbl9lcCIsICJkaWFsb2dfb3BlbiIsICJzaWFfbG9naW5fc3VjY2VlZGVkIiwgInNpZ251cF9tb2RhbF9zaG93biIsICJ1eGFfZXZlbnRfY2xhc3NpZmljYXRpb25fbGV2ZWwiLCAiZW1haWxfc2lnbnVwX2ZhaWxlZCIsICJmb3JtX2ZpZWxkX2NoYW5nZSIsICJhZG1pbl9ob21lX2NsaWVudF9iYW5uZXJfc2hvd24iLCAiZHJvcGJveF9yZXN0YXJ0X2Rvd25sb2FkIiwgIm1vZGFsX29wZW4iLCAiZ29vZ2xlX3NpZ251cF9mYWlsZWQiLCAicGFnZV92aWV3X29yaWdpbiIsICJzaWFfbG9naW5fcmVxdWlyZXNfcGFzc3dvcmQiLCAiY2xpY2tfYmFubmVyX3NpZ25pbl9lcCIsICJtYXJrZXRpbmdfdHJhY2tlcl9pbmNsdXNpb25fbWV0aG9kIiwgImVtYWlsX2xvZ2luX3N0YXJ0IiwgInNjcm9sbF9ldmVudCIsICJsaWNlbnNlcyIsICJzaG93bl9iYW5uZXJfc2lnbmluX2VwIiwgImVtYWlsX3NpZ251cF9zdGFydCIsICJzY3JpcHRfdXJsIiwgIndlYl9yZWRlc2lnbiIsICJkZXZpY2VfaWQiLCAiaWZyYW1lX3VyaSIsICJpbnN0YW5jZV9ldmVudF9jb3VudCIsICJsb2dpbl9tb2RhbF9zaG93biIsICJ1eC1hbmFseXRpY3MiLCAiYWRtaW5faG9tZV9jbGllbnRfYmFubmVyX2Rpc21pc3NlZCIsICJpbnN0YW5jZV9pbml0X3RzIiwgImhlYXJ0YmVhdCIsICJzaG93bl90b29sdGlwX3NpZ25pbl9lcCIsICJzY2FuX3N1Y2Nlc3MiLCAiZWxlbWVudF9zaG93biIsICJjdXJyZW5jeV9jb2RlIiwgInBhZ2VfdmlldyIsICJ0bF90ZW1wbGF0ZV9yZWRpcmVjdCIsICJuYXZpZ2F0aW9uX3R5cGUiLCAiaHNfbGFiZWwiLCAidXhhX2luY2x1c2lvbl9tZXRob2QiLCAiZ29vZ2xlX3NpZ251cF9zdWNjZWVkZWQiLCAidHlwZSIsICJlbWFpbF9sb2dpbl9zdWNjZWVkZWQiLCAiZW1haWxfbG9naW5fcmVxdWlyZXNfdHdvX2ZhY3RvciIsICJyZWRpcmVjdF90b19kcm9wYm94X3Ntb2RlX3N0b3JlX3BhZ2UiLCAic2lhX2xvZ2luX2ZhaWxlZCIsICJlbGVtZW50X2hpZGUiLCAic2lnbnVwX3NvdXJjZSIsICJyZWRpcmVjdF9zdWNjZXNzIiwgImRpYWxvZ19jbG9zZSIsICJnb29nbGVfbG9naW5fcmVxdWlyZXNfdHdvX2ZhY3RvciJdLCAibm9fcGlpX2NvbmZpZ192YXJpYWJsZXMiOiBbInZlcnRpY2FsX29mZnNldCIsICJhcHBfbmFtZSIsICJjbGllbnRfZXZlbnRfaWQiLCAiZWxlbWVudF9pZCIsICJ1eGFfZXZlbnRfY2xhc3NpZmljYXRpb25fbGV2ZWwiLCAiZXZlbnRfdHMiLCAibGlua19pZCIsICJwYXJhbV9hZCIsICJwYXJhbV9jYW1wIiwgInBhcmFtX2Rlc2t0b3BfbG9nZ2luZ19pZCIsICJwYXJhbV9mYmNsaWQiLCAicGFyYW1fZ2NsaWQiLCAicGFyYW1fa3ciLCAicGFyYW1fbXNjbGtpZCIsICJwYXJhbV9uZXQiLCAicGFyYW1fb3FhIiwgInBhcmFtX3RmbyIsICJwYXJhbV90ayIsICJwYXJhbV90cmlnZ2VyIiwgInBhcmFtX3V0bV9jYW1wYWlnbiIsICJwYXJhbV91dG1fY29udGVudCIsICJwYXJhbV91dG1fbWVkaXVtIiwgInBhcmFtX3V0bV9zb3VyY2UiLCAicGFyYW1fdXRtX3Rlcm0iLCAicG9zaXRpb25fcGN0X1giLCAicG9zaXRpb25fcGN0X1kiLCAidXhhX3YiLCAidXhhX2RlYnVnX3ZlcnNpb24iLCAidmFyaWFudHMiLCAiYWRvYmVfdGFyZ2V0X3ZhcmlhbnRzIiwgImluc3RhbmNlX2V2ZW50X2NvdW50IiwgImluc3RhbmNlX2luaXRfdHMiLCAicHJvZHVjdCIsICJwYXJlbnRfcHJvZHVjdCIsICJsaWNlbnNlcyIsICJ0eXBlIiwgInB1cmNoYXNlX3ByaWNlIiwgImN1cnJlbmN5X2NvZGUiLCAiYmlsbGluZ19jeWNsZSIsICJoc19hY3Rpb24iLCAiaHNfY2F0ZWdvcnkiLCAiaHNfbGFiZWwiLCAibWFya2V0aW5nX3RyYWNrZXJfaW5jbHVzaW9uX21ldGhvZCIsICJ1eGFfaW5jbHVzaW9uX21ldGhvZCIsICJuYXZpZ2F0aW9uX3R5cGUiLCAiZWxlbWVudF9zaG93bl9kdXJhdGlvbl9tcyJdLCAic2hvdWxkQmVTZW50VG9NYXJrZXRpbmdUcmFja2VyVmFyaWFibGVzIjogWyJ2ZXJ0aWNhbF9vZmZzZXQiLCAiYXBwX25hbWUiLCAiY2xpZW50X2V2ZW50X2lkIiwgImVsZW1lbnRfaWQiLCAidXhhX2V2ZW50X2NsYXNzaWZpY2F0aW9uX2xldmVsIiwgImV2ZW50X3RzIiwgImxpbmtfaWQiLCAicGFyYW1fYWQiLCAicGFyYW1fY2FtcCIsICJwYXJhbV9kZXNrdG9wX2xvZ2dpbmdfaWQiLCAicGFyYW1fZmJjbGlkIiwgInBhcmFtX2djbGlkIiwgInBhcmFtX2t3IiwgInBhcmFtX21zY2xraWQiLCAicGFyYW1fbmV0IiwgInBhcmFtX29xYSIsICJwYXJhbV90Zm8iLCAicGFyYW1fdGsiLCAicGFyYW1fdHJpZ2dlciIsICJwYXJhbV91dG1fY2FtcGFpZ24iLCAicGFyYW1fdXRtX2NvbnRlbnQiLCAicGFyYW1fdXRtX21lZGl1bSIsICJwYXJhbV91dG1fc291cmNlIiwgInBhcmFtX3V0bV90ZXJtIiwgInBvc2l0aW9uX3BjdF9YIiwgInBvc2l0aW9uX3BjdF9ZIiwgInV4YV92IiwgInV4YV9kZWJ1Z192ZXJzaW9uIiwgInZhcmlhbnRzIiwgImFkb2JlX3RhcmdldF92YXJpYW50cyIsICJpbnN0YW5jZV9ldmVudF9jb3VudCIsICJpbnN0YW5jZV9pbml0X3RzIiwgInByb2R1Y3QiLCAicGFyZW50X3Byb2R1Y3QiLCAibGljZW5zZXMiLCAidHlwZSIsICJwdXJjaGFzZV9wcmljZSIsICJjdXJyZW5jeV9jb2RlIiwgImJpbGxpbmdfY3ljbGUiLCAiaHNfYWN0aW9uIiwgImhzX2NhdGVnb3J5IiwgImhzX2xhYmVsIiwgIm1hcmtldGluZ190cmFja2VyX2luY2x1c2lvbl9tZXRob2QiLCAidXhhX2luY2x1c2lvbl9tZXRob2QiLCAibmF2aWdhdGlvbl90eXBlIiwgImVsZW1lbnRfc2hvd25fZHVyYXRpb25fbXMiXSwgImNvbmZpZ1RpbWUiOiAxNzExNTAxNjA3NDE1LCAiaXNJbnRlcm5hbElwIjogZmFsc2UsICJpc1VzZXJEcm9wYm94QWRtaW4iOiBmYWxzZSwgImFuYWx5dGljc0lkIjogIkFBQ1NFOXV0WDl1dk9VQUpLcUtDZHdQRkQ1SkFSM0RyS3JFbXg0c0ZBcjBjWHciLCAiZXhwRXZlbnRzVG9FeHBJZE1hcCI6IHsibW91c2V1cF9lbGVtZW50X2NsaWNrIjogIkNHSS0xMTYwIiwgInBhZ2VfZnJlZXplIjogIkNHSS05MzciLCAicGFnZV9yZXN1bWUiOiAiQ0dJLTkzNyIsICJzcGFfcGFnZV92aWV3IjogIkdUWC00MSIsICJkZWxheWVkX3BhZ2Vfdmlld193aXRoX2xhdGVfbWV0YV90YWciOiAiR1RYLTEyMiIsICJwcml2YWN5X2NvbnNlbnRfaWZyYW1lX2xvYWRlZCI6ICJDR0ktMTQ1IiwgInByaXZhY3lfY29uc2VudF9zY3JpcHRfbG9hZGVkIjogIkNHSS0xNDUiLCAicHJpdmFjeV9jb25zZW50X3NjcmlwdF9sb2FkX2Vycm9yIjogIkNHSS0xNDUiLCAiY29udmVyc2lvbkRhdGFSZWFkeSI6ICJDR0ktNjA3IiwgImxlZ2FjeV9oc19hbmFseXRpY3NfZXZlbnQiOiAiQ0dJLTU1MyIsICJtYXJrZXRpbmdfdHJhY2tlcl9yZWFkeV9mb3JfdXhhIjogIkNHSS0yMTgifSwgImV4cERhdGFGaWVsZHNUb0V4cElkTWFwIjogeyJhcHBfbmFtZSI6ICJDR0ktMTUyMiIsICJkZXZpY2VfaWQiOiAiR1JXQUNRLTU4NjciLCAidXhhX2V2ZW50X2NsYXNzaWZpY2F0aW9uX2xldmVsIjogIkNHSS03NDQiLCAic2lnbnVwX3NvdXJjZSI6ICJTSEFRLTIyMiIsICJ1eGFfZGVidWdfdmVyc2lvbiI6ICJDR0ktMTUxMSIsICJ3ZWJfcmVkZXNpZ24iOiAiQ0VYUC0xOTk0IiwgImFkb2JlX3RhcmdldF92YXJpYW50cyI6ICJHVFgtMTIyIiwgImluc3RhbmNlX2V2ZW50X2NvdW50IjogIkNHSS04MiIsICJpbnN0YW5jZV9pbml0X3RzIjogIkNHSS05NiIsICJpZnJhbWVfdXJpIjogIkNHSS0xNDUiLCAiY2xpY2tfc291cmNlIjogIkNHSS0xMTYwIiwgInNjcmlwdF9pZCI6ICJDR0ktMTQ1IiwgInNjcmlwdF91cmwiOiAiQ0dJLTE0NSIsICJ0b3RhbF90aW1lIjogIkNHSS0xNDUiLCAicHJvZHVjdCI6ICJDR0ktNjA3IiwgInBhcmVudF9wcm9kdWN0IjogIkNHSS02MDciLCAibGljZW5zZXMiOiAiQ0dJLTYwNyIsICJ0eXBlIjogIkNHSS02MDciLCAicHVyY2hhc2VfcHJpY2UiOiAiQ0dJLTYwNyIsICJjdXJyZW5jeV9jb2RlIjogIkNHSS02MDciLCAiYmlsbGluZ19jeWNsZSI6ICJDR0ktNjA3IiwgImhzX2FjdGlvbiI6ICJDR0ktNTUzIiwgImhzX2NhdGVnb3J5IjogIkNHSS01NTMiLCAiaHNfbGFiZWwiOiAiQ0dJLTU1MyIsICJtYXJrZXRpbmdfdHJhY2tlcl9pbmNsdXNpb25fbWV0aG9kIjogIkNHSS04MjkiLCAidXhhX2luY2x1c2lvbl9tZXRob2QiOiAiQ0dJLTQ4NiIsICJiZmNhY2hlX2VsaWdpYmxlIjogIkNHSS04NzgiLCAibmF2aWdhdGlvbl90eXBlIjogIkNHSS05MzkiLCAicGFnZV92aWV3X29yaWdpbiI6ICJDR0ktMTM4NiJ9LCAiaW5jbHVzaW9uTWV0aG9kIjogIkVESVNPTiIsICJlbnRpdGxlZEFwcHMiOiBbImRhc2giLCAidGVzdF9hcHAiXX0=",  false );
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedPrefetch("Eu0CCjpwcml2YWN5X2NvbnNlbnRfZWRpc29uLlByaXZhY3lDb25zZW50RWRpc29uUHJlZmV0Y2hTZXJ2aWNlEhtQcml2YWN5Q29uc2VudFByb3BzUHJlZmV0Y2ga6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=", "ChNjb25zZW50LmRyb3Bib3guY29tEgJVUxgB",  false );
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedPrefetch("EtgCCit1c2VyX3N1cnZleS5FZGlzb25Vc2VyU3VydmV5UHJlZmV0Y2hTZXJ2aWNlEhVFZGlzb25Vc2VyU3VydmV5RmV0Y2ga6QES5gFScWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wWnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MCoLZmlsZV92aWV3ZXIyGXNoYXJlZF9saW5rX2dlbmVyaWNfZXJyb3I=", "",  false );
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedPrefetch("Es4CCiN3ZWJfcGxhdGZvcm0uV2ViUGxhdGZvcm1FZGlzb25GZXRjaBITRWRpc29uRGV2VG9vbHNGZXRjaBrpARLmAVJxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTBacWh0dHBzOi8vd3d3LmRyb3Bib3guY29tL3NjbC9maS82bm9oazJ1djg5cHVwZTh0amo5aWIvY2tfZGF0YV8wMTI0MjAyNC50YXIuZ3o/cmxrZXk9NThnanY1cmU2ZnVzejFzOWprOWZncHg5NSZkbD0wKgtmaWxlX3ZpZXdlcjIZc2hhcmVkX2xpbmtfZ2VuZXJpY19lcnJvcg==", "IhAxNzExNTAxNjA3NDIzMzc0",  false );
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedPrefetch("Es0CCiN3ZWJfcGxhdGZvcm0uV2ViUGxhdGZvcm1FZGlzb25GZXRjaBISRWRpc29uVG9wTWVudUZldGNoGukBEuYBUnFodHRwczovL3d3dy5kcm9wYm94LmNvbS9zY2wvZmkvNm5vaGsydXY4OXB1cGU4dGpqOWliL2NrX2RhdGFfMDEyNDIwMjQudGFyLmd6P3Jsa2V5PTU4Z2p2NXJlNmZ1c3oxczlqazlmZ3B4OTUmZGw9MFpxaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpLzZub2hrMnV2ODlwdXBlOHRqajlpYi9ja19kYXRhXzAxMjQyMDI0LnRhci5nej9ybGtleT01OGdqdjVyZTZmdXN6MXM5ams5ZmdweDk1JmRsPTAqC2ZpbGVfdmlld2VyMhlzaGFyZWRfbGlua19nZW5lcmljX2Vycm9y", "CrIHeyJ1c2VySWQiOiBudWxsLCAiaGlkZUluc3RhbGxMaW5rIjogZmFsc2UsICJtb2JpbGVVc2VBcHBVcmwiOiAiaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vZGwvaG9tZS9tb2JpbGU/YWRncm91cD1oZWFkZXJcdTAwMjZjYW1wYWlnbj1tb3dlYl9idXR0b25cdTAwMjZjcmVhdGl2ZT11c2VfYXBwXHUwMDI2bW9iaWxlX2FwcF9mYWxsYmFjaz1cdTAwMjZzcmM9bW9iaWxlLXdlYi1sb2dnZWQtaW4iLCAic2hvdWxkU2hvd0FkbWluVGFza3NNZW51IjogZmFsc2UsICJoZWxwSHJlZiI6ICJodHRwczovL3d3dy5kcm9wYm94LmNvbS9oZWxwIiwgImF1dG9tYXRpb25zTGlua1ZhcmlhbnQiOiAiT0ZGIiwgInNob3dJbnN0YWxsRXh0ZW5zaW9uTGluayI6IGZhbHNlLCAiaXNJbkV4dGVuc2lvbkJldGFIb2xkYmFja0dyb3VwIjogZmFsc2UsICJ3aGF0c05ld0V4cGVyaW1lbnRzIjogeyJ3aGF0c05ld1VwZGF0ZVZhcmlhbnQiOiAiUkVMRUFTRV8yMDIzXzEyXzE5IiwgIndoYXRzTmV3U3VyZmFjZUVuaGFuY2VtZW50VmFyaWFudCI6ICJPRkYifSwgImlzQWRtaW5JbnZpdGVCdXR0b25FbmFibGVkIjogZmFsc2UsICJpc1Vwc2VsbEludml0ZUJ1dHRvbkVuYWJsZWQiOiBmYWxzZSwgIndlYlJlZGVzaWduR2xvYmFsSGVhZGVyIjogIk9GRiIsICJpc0NzbVRlYW1Vc2VyIjogZmFsc2UsICJtYW5hZ2VBY2NvdW50TGlua1ZhcmlhbnQiOiAiT0ZGIiwgInRlYW1JbnZpdGVzUGFpbnRlZERvb3JUZXN0VmFyaWFudCI6ICJPRkYiLCAibG9jYWxlIjogImVuIiwgImNvdW50cnlDb2RlIjogIlVTIiwgImlzSW5kaXZpZHVhbFVwc2VsbEludml0ZUJ1dHRvbkVuYWJsZWQiOiBmYWxzZSwgImlzRnJlZVRlYW1DcmVhdGlvbkJ1dHRvbkVuYWJsZWQiOiBmYWxzZSwgIm1vbmV4UGxzQ29udGFjdFNhbGVzQnV0dG9uVmFyaWFudCI6ICJPRkYiLCAiZGVza3RvcENvcHlSZWZyZXNoVmFyaWFudCI6ICJPRkYifQ==",  false );
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/contacts", "json", "{\"LEGACY_CACHE_LIMIT\": \"OFF\", \"MERGE_SEARCH_ALLOWED\": {}}");
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/sharing", "json", "{\"GOLDEN_GATE\": {\"HAS_CONTENT_MANAGER_AND_SUPER_ADMIN\": {}, \"HAS_CONTENT_MANAGER_CDM\": {}, \"HAS_CONTENT_MANAGER_CDM_IN_TSD\": {}, \"HAS_NEW_OWNERSHIP_MODEL\": {}, \"CAN_RESTORE_FOLDERS_IN_CM\": {}, \"SHARING_TOTAL_LIMIT\": 1000}, \"SHARING_EXPERIMENTS\": {\"FIX_MAX_ACCOUNT_BATCH_SIZE\": false, \"MINI_MODAL_LINK_AUDIENCE_VARIANT\": \"OFF\", \"SHARED_LINK_ATTRIBUTION_TRACKING\": \"OFF\"}, \"SHARING_MODAL\": {\"SHOW_UPGRADE_TO_BIZ_BANNER\": {}}, \"TRUELINK\": {\"TRUELINK_BROWSE_LINK_ICON\": {}, \"NO_COMMENT_ENABLED\": {}}, \"ShareTibActionOriginType\": {\"BROWSE_FILE_ROW\": 1, \"FILE_ROW_SHARE_MENU\": 2, \"PREVIEW_PAGE\": 3, \"NOTIFICATION_WEB\": 4, \"RECENTS\": 5, \"SHARE\": 6, \"GRANT_ACCESS\": 8, \"DESKTOP_CLIENT\": 9, \"WIZARD\": 10, \"OFFICE_INTEGRATION\": 11, \"LEGACY_BROWSE\": 12, \"SHARE_LINK_MODAL\": 13, \"BROWSE_SHARED_FOLDER_BANNER\": 14, \"BROWSE_GLOBAL_ACTIONS\": 15, \"EVENTS_PAGE\": 16, \"BROWSE_FILE_ACTIONS\": 17, \"CONTENT_MANAGER\": 18, \"PARENT_FOLDER_MODAL\": 19, \"OUT_OF_QUOTA_MODAL\": 20, \"LINKS_PAGE\": 21, \"PREVIEW_PAGE_FACEPILE\": 22, \"BROWSE_FILE_FACEPILE\": 23, \"SHARE_PAGE_FROM_EMAIL\": 24, \"SHARE_PAGE_FROM_NOTIFICATION_WEB\": 25, \"COPY_SCL_LINK_MODAL\": 26, \"BROWSE_NEW_FOLDER_MODAL\": 27, \"STARRED\": 28, \"AUTO_MOUNT\": 29, \"BROWSE_FILE_ROW_BUTTON\": 30, \"BROWSE_FILE_ROW_OVERFLOW_MENU\": 31, \"EXTERNAL_SHARING_PAGE\": 32, \"SHARE_TO_UPLOAD\": 35, \"COPY_LINK_FROM_UPLOAD_MODAL\": 36, \"SHARING_PREVIEW_PAGE\": 37, \"SHARE_PAGE_INLINE\": 38, \"POST_DOWNLOAD_MODAL\": 40, \"FILE_REQUESTS\": 42, \"BROWSE_COPY_ACTION\": 43, \"BROWSE_MOVE_ACTION\": 44, \"FROM_EMAIL\": 45, \"REQUEST_ACCESS_MODAL\": 46, \"CREATE_SHARED_FOLDER_MODAL\": 47, \"DEFAULT_SHARING_SETTINGS_TAB\": 48, \"SAVE_TO_DROPBOX\": 49, \"PREVIEW_PAGE_FILE_ROW_OVERFLOW_MENU\": 50, \"PREVIEW_PAGE_FILE_ROW_BUTTON\": 51, \"JOIN_FOLDER_BUTTON\": 52, \"PREVIEW_PAGE_GRID_SINGLE_FILE_ACTION\": 53, \"PREVIEW_PAGE_TITLEBAR\": 54, \"BROWSE_SHARE_ACTION_FILE_CHOOSER\": 55, \"QUICK_VIEW_BROWSE\": 56, \"QUICK_VIEW_SEARCH\": 57, \"BROWSE_CONTENT_TILE\": 58, \"SEARCH_CONTENT_TILE\": 59, \"SUGGESTIONS_CONTENT_TILE\": 60, \"BROWSE_CONTENT_TILE_BUTTON\": 61, \"HARMONY\": 101, \"NOTIFICATION_CLIENT\": 102, \"NATIVE_SHARE_CLIENT\": 103, \"FILESYSTEM\": 104, \"NOTIFICATION_MOBILE\": 201, \"WEB_MOBILE\": 202, \"IN_APP\": 210, \"EMAIL\": 301, \"GMAIL_PLUGIN\": 302, \"OUTLOOK_ADDIN\": 303, \"PAPER_INTEGRATION\": 401, \"GOOGLE_DSS\": 501, \"TRELLO_FILE_VIEWER\": 601, \"SHARING_SDK_SANDBOX\": 700, \"SHARING_SDK_PAPER\": 701, \"SHARING_SDK_DESKTOP\": 702, \"CONTROLLED_ACCESS_SU_BANNER\": 803, \"UPLOAD_BUTTON\": 804, \"UPLOAD_JOIN_FOLDER_MODAL\": 805, \"UPLOAD_SNACKBAR\": 806, \"QUICK_REACT\": 810, \"COLLECTIONS\": 903, \"SIGN_UP_WELCOME_MODAL\": 1000, \"FLEXIBLE_SHARING_ENTRYPOINT\": 1050, \"SIMPLE_COPY_LINK_FILE_PREVIEW\": 1100, \"DOWNLOAD_BUTTON\": 1101, \"ACTION_CONTINUATION\": 1102, \"SIMPLE_COPY_LINK_FOLDER_PREVIEW\": 1103, \"LEFT_NAV_ONBOARDING_CHECKLIST\": 1104, \"UPLOAD_DRAWER\": 1105, \"PREVIEW_AUTO_SAVE\": 1106, \"COPY_LINK_MINI_MODAL\": 1107, \"ONBOARDING_SHARE_SLIDE\": 1108}}");
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/fingerprintjs_constants", "json", "{\"FINGERPRINTJS_TOKEN\": \"hSrgVEjs3amxLolocQ18\", \"SHOULD_INVOKE_FINGERPRINTJS\": true, \"REGION\": \"us\"}");
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/login_and_register", "json", "{\"GOOGLE_LOGIN_DESKTOP\": \"ON_TOP\", \"APPLE_LOGIN_DESKTOP\": \"ON\", \"LENOVO_LOGIN_DESKTOP\": \"OFF\", \"REDIRECT_WINDOW_TOKEN\": \"Achzyw0eEMKtGLDGFSuExYfUimffsltEfoKeLjvjrVEouA\", \"FUNCAPTCHA_PUBLIC_KEY\": \"419899FA-7FAF-5C1D-C027-BC34963E3A4F\", \"SHOULD_LOAD_FUNCAPTCHA\": true, \"FUNCAPTCHA_REGISTER_PUBLIC_KEY\": \"68CECE5D-F360-8653-CA80-3CF99353DDD2\", \"FUNCAPTCHA_PAYMENT_PUBLIC_KEY\": \"8AFFAA35-0217-4EF9-83C8-C62CF9EBCFB3\"}");
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.registerStreamedDataModule("metaserver/static/js/modules/constants/web_experience_constants", "json", "{\"IS_ADMIN_CONSOLE_OVERHAUL_ENABLED\": false, \"SAVED_VIEW\": \"OFF\", \"LEFT_NAV_QUERY_LIST_SECTION\": \"OFF\", \"REACT_ROUTER_PAP\": false, \"DEFAULT_DRAG_AND_DROP\": \"OFF\", \"HOME_REDUX_USE_STARRING\": false, \"CONTENT_TILES\": \"OFF\", \"CONTENT_TILES_SEARCH\": \"OFF\", \"CONTENT_TILES_QUICK_ACTIONS\": \"OFF\", \"CONTENT_TILES_FOLDER_COLLAGE\": \"OFF\", \"FOLDER_COLLAGE_ASPECT_RATIO\": \"OFF\", \"CONTENT_TILES_INTERACTIVITY_VIDEO\": \"OFF\", \"CONTENT_TILES_INTERACTIVITY_FOLDER\": \"OFF\", \"CONTENT_TILES_INTERACTIVITY_PDF\": \"OFF\", \"CONTENT_TILES_DELAY_INTERACTIVITY\": \"OFF\", \"CONTENT_TILES_STREAMING_ENDPOINT\": \"OFF\", \"RECENTS_WITH_FACETS\": \"OFF\", \"BROWSE_ON_CYPRESS\": \"CYPRESS_OTHER_USER\", \"BROWSE_CONTENT_SUGGESTIONS_VARIANT\": \"OFF\", \"THEME_PROVIDER_THEME\": \"OFF\", \"DIG_FEATURE_LEVEL\": \"OFF\", \"BROWSE_WITH_FACETS\": \"OFF\", \"SECTION_COMPONENT_BROWSE\": \"OFF\", \"FOLDER_LEVEL_FILTER\": \"OFF\", \"WEB_REDESIGN_GLOBAL_HEADER\": \"OFF\", \"BROWSE_DEFAULT_GRID_VIEW\": \"OFF\", \"WEB_REDESIGN_ACTION_BAR_ANIMATION\": \"OFF\", \"FOLDER_CREATE_WITHOUT_REDIRECT\": \"OFF\", \"BROWSE_FILE_VIEW_REFACTOR\": \"OFF\", \"QUICK_VIEW_BROWSE\": \"OFF\", \"BROWSE_SHARE_ENTRYPOINTS_REVAMP\": \"OFF\", \"ACTIONS_OVERFLOW_MENU_PERF\": \"OFF\", \"QUICK_VIEW_RELATED_FILES\": \"OFF\", \"CONTENT_TILES_INTERACTIVITY_STREAMING_ONLY\": \"OFF\", \"WEB_REDESIGN_ACTION_BAR\": \"OFF\", \"QUICK_VIEW_FOLDER_VIEW\": \"OFF\", \"CONTENT_TILES_TRAILING_TRUNCATION\": \"OFF\", \"INTELLIGENCE_APRIL_2024_HOLDOUT_CONTROL\": \"OFF\", \"BROWSE_CAMPAIGN_CONFLICT_RESOLUTION\": false}");
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=">window.addRequireLoadCallback(function() {
-    window.require(["js/edison/edison"], function (edisonModule) {
-        edisonModule.Edison.waitUntilInitialized().then(function() {
-            edisonModule.Edison.doneStreaming();
-        });
-    });
-});
-</script><script nonce="AneY6l0rmcrTspXW3Ml/lWjNg/M=" async src="/page_success/end?edison_page_name=shared_link_generic_error&amp;path=%2Fscl%2Ffi%2F6nohk2uv89pupe8tjj9ib%2Fck_data_01242024.tar.gz&amp;request_id=f2bad419193640d08417c46bd13870a9&amp;time=1711501607" crossorigin="anonymous"></script>
-</body></html><!--status=200-->
\ No newline at end of file
diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 52dce8d0..2b443af1 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -49,9 +49,9 @@ inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {
   Real vy = *v3;
   Real vz = *v1;
 
-  Real delta = sqrt(pow(x, 2) + pow(y, 2) + 1);
-  Real C = sqrt(1 + pow(x, 2));
-  Real D = sqrt(1 + pow(y, 2));
+  Real delta = sqrt(x*x + y*y + 1);
+  Real C = sqrt(1 + x*x);
+  Real D = sqrt(1 + y*y);
 
   *v1 = (vz - D * x * vx - C * y * vy) / delta;
   *v2 = 
@@ -69,15 +69,15 @@ inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {
   Real vy = *v3;
   Real vz = *v1;
 
-  Real delta = sqrt(pow(x, 2) + pow(y, 2) + 1);
-  Real C = sqrt(1 + pow(x, 2));
-  Real D = sqrt(1 + pow(y, 2));
+  Real delta = sqrt(x*x + y*y + 1);
+  Real C = sqrt(1 + x*x);
+  Real D = sqrt(1 + y*y);
 
   *v1 = (vz + x * vx + y * vy) / delta;
   *v2 =
-      (-x * vz / D + vx * (1 + pow(y, 2)) / D - vy * x * y / D) / delta;
+      (-x * vz / D + vx * (1 + y*y) / D - vy * x * y / D) / delta;
   *v3 =
-      (-y * vz / C - x * y * vx / C + (1 + pow(x, 2)) * vy / C) / delta;
+      (-y * vz / C - x * y * vx / C + (1 + x*x) * vy / C) / delta;
 }
 
 //! Transform cubed sphere velocity from panel 1 to panel 2
@@ -119,13 +119,6 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
       *vy = v1;
       vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
-    case 5:
-      // z->-z, x->-x, y->y
-      *vz = -v1;
-      *vx = -v2;
-      *vy = v3;
-      vel_zxy_to_zab(vz, vx, vy, a, b);
-      break;
     case 6:
       // z->-y, x->x, y->z
       //(*vy) *= -1;
@@ -158,8 +151,6 @@ inline void vel_zab_from_p2(Real *vz, Real *vx, Real *vy, Real a, Real b,
       break;
     case 5:
       break;
-    case 6:
-      break;
   }
 }
 
@@ -179,8 +170,6 @@ inline void vel_zab_from_p3(Real *vz, Real *vx, Real *vy, Real a, Real b,
       break;
     case 2:
       break;
-    case 4:
-      break;
     case 5:
       break;
     case 6:
@@ -204,8 +193,6 @@ inline void vel_zab_from_p4(Real *vz, Real *vx, Real *vy, Real a, Real b,
       break;
     case 2:
       break;
-    case 3:
-      break;
     case 5:
       break;
     case 6:
@@ -220,13 +207,6 @@ inline void vel_zab_from_p5(Real *vz, Real *vx, Real *vy, Real a, Real b,
   Real v2 = *vx;
   Real v3 = *vy;
   switch (panel) {
-    case 1:
-      // z->-z, x->-x, y->y
-      *vz = -v1;
-      *vx = -v2;
-      *vy = v3;
-      vel_zxy_to_zab(vz, vx, vy, a, b);
-      break;
     case 2:
       break;
     case 3:
@@ -252,8 +232,6 @@ inline void vel_zab_from_p6(Real *vz, Real *vx, Real *vy, Real a, Real b,
       *vy = -v1;
       vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
-    case 2:
-      break;
     case 3:
       break;
     case 4:
diff --git a/tests/test_cs_velocity_rotation.cpp b/tests/test_cs_velocity_rotation.cpp
index e829f43c..c64f02fd 100644
--- a/tests/test_cs_velocity_rotation.cpp
+++ b/tests/test_cs_velocity_rotation.cpp
@@ -24,46 +24,46 @@ TEST(vel_zab_to_zxy, test_ab_to_xy_to_ab) {
   std::cout << *vz << " " << *vx << " " << *vy;
   CubedSphereUtility::vel_zab_to_zxy(vz, vx, vy, PI/3, PI/4);
   for (int i = 0; i < 3; i++) {
-    EXPECT_NEAR(result[i], expected_result[i], pow(10,-5));
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
   }
 }
 
-TEST(vel_zab_from_test, test_case_1_to_3_to_1) {
+TEST(vel_zab_from_test, test_case_1_to_2_to_1) {
   Real result[3] = {1,2,3};
   Real *vz = result;
   Real *vx = result + 1;
   Real *vy = result + 2;
   Real expected_result[3] = {1,2,3};
-  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 3);
-  CubedSphereUtility::vel_zab_from_p3(vz, vx, vy, PI/5*2, PI/8*3, 1);
+  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 2);
+  CubedSphereUtility::vel_zab_from_p2(vz, vx, vy, PI/5*2, PI/8*3, 1);
   for (int i = 0; i < 3; i++) {
-    EXPECT_NEAR(result[i], expected_result[i], pow(10,-5));
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
   }
 }
 
-TEST(vel_zab_from_test, test_case_1_to_4_to_1) {
+TEST(vel_zab_from_test, test_case_1_to_3_to_1) {
   Real result[3] = {1,2,3};
   Real *vz = result;
   Real *vx = result + 1;
   Real *vy = result + 2;
   Real expected_result[3] = {1,2,3};
-  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 4);
-  CubedSphereUtility::vel_zab_from_p4(vz, vx, vy, PI/5*2, PI/8*3, 1);
+  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 3);
+  CubedSphereUtility::vel_zab_from_p3(vz, vx, vy, PI/5*2, PI/8*3, 1);
   for (int i = 0; i < 3; i++) {
-    EXPECT_NEAR(result[i], expected_result[i], pow(10,-5));
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
   }
 }
 
-TEST(vel_zab_from_test, test_case_1_to_5_to_1) {
+TEST(vel_zab_from_test, test_case_1_to_4_to_1) {
   Real result[3] = {1,2,3};
   Real *vz = result;
   Real *vx = result + 1;
   Real *vy = result + 2;
   Real expected_result[3] = {1,2,3};
-  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 5);
-  CubedSphereUtility::vel_zab_from_p5(vz, vx, vy, PI/5*2, PI/8*3, 1);
+  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 4);
+  CubedSphereUtility::vel_zab_from_p4(vz, vx, vy, PI/5*2, PI/8*3, 1);
   for (int i = 0; i < 3; i++) {
-    EXPECT_NEAR(result[i], expected_result[i], pow(10,-5));
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
   }
 }
 
@@ -76,7 +76,7 @@ TEST(vel_zab_from_test, test_case_1_to_6_to_1) {
   CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 6);
   CubedSphereUtility::vel_zab_from_p6(vz, vx, vy, PI/5*2, PI/8*3, 1);
   for (int i = 0; i < 3; i++) {
-    EXPECT_NEAR(result[i], expected_result[i], pow(10,-5));
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
   }
 }
 

From 9e107b278141fdd17357627f270411eed312f6dc Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Sat, 30 Mar 2024 12:04:57 -0400
Subject: [PATCH 19/22] correction 2

---
 src/exo3/cs_velocity_rotation.hpp | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 2b443af1..81ae6cdd 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -93,8 +93,6 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
   switch (panel) {
     case 2:
       // z->y, x->-x, y->z
-      //(*vx) *= -1;
-      //vel_zxy_to_zab(vy, vx, vz, a, b);
       *vz = v3;
       *vx = -v2;
       *vy = v1;
@@ -102,8 +100,6 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
       break;
     case 3:
       // z->-x, x->z, y->y
-      //(*vz) *= -1;
-      //vel_zxy_to_zab(vx, vz, vy, a, b);
       *vz = v2;
       *vx = -v1;
       *vy = v3;
@@ -111,9 +107,6 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
       break;
     case 4:
       // z->-x, x->-y, y->z
-      //(*vx) *= -1;
-      //(*vy) *= -1;
-      //vel_zxy_to_zab(vx, vy, vz, a, b);
       *vz = -v2;
       *vx = -v3;
       *vy = v1;
@@ -121,8 +114,6 @@ inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
       break;
     case 6:
       // z->-y, x->x, y->z
-      //(*vy) *= -1;
-      //vel_zxy_to_zab(vy, vx, vz, a, b);
       *vz = -v3;
       *vx = v2;
       *vy = v1;

From d8f97241f3abbc819e43ce63ef412b02e8c082db Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Sun, 31 Mar 2024 19:46:22 -0400
Subject: [PATCH 20/22] file manage

---
 src/checks.cpp                    | 287 ------------------------------
 src/exo3/cs_velocity_rotation.cpp | 196 ++++++++++++++++++++
 src/exo3/cs_velocity_rotation.hpp | 199 ++-------------------
 3 files changed, 210 insertions(+), 472 deletions(-)
 delete mode 100644 src/checks.cpp
 create mode 100644 src/exo3/cs_velocity_rotation.cpp

diff --git a/src/checks.cpp b/src/checks.cpp
deleted file mode 100644
index ae9700db..00000000
--- a/src/checks.cpp
+++ /dev/null
@@ -1,287 +0,0 @@
-// C/C++
-#include <iomanip>
-#include <sstream>
-#include <string>
-
-// athena
-#include <athena/athena.hpp>
-#include <athena/coordinates/coordinates.hpp>
-#include <athena/globals.hpp>
-#include <athena/mesh/mesh.hpp>
-
-// canoe
-#include <air_parcel.hpp>
-#include <configure.hpp>
-#include <impl.hpp>
-
-// snap
-#include <snap/thermodynamics/thermodynamics.hpp>
-
-// single column
-#include <single_column/single_column.hpp>
-
-#ifdef ENABLE_GLOG
-#include <glog/logging.h>
-#endif
-
-std::string print_column_table(std::string name, AthenaArray<Real> const& var,
-                               int k, int j, int il, int iu, int width = 1) {
-  std::stringstream msg;
-
-  msg << "rank = " << Globals::my_rank << ", " << name << " dump:" << std::endl;
-
-  for (int i = il; i <= iu; ++i) {
-    msg << "i = " << std::setw(4) << i << " |";
-    msg << std::setw(4) << "(";
-    for (int n = 0; n < NHYDRO; ++n) msg << var(n, k, j, i) << ", ";
-    msg << ")" << std::endl;
-  }
-
-  return msg.str();
-}
-
-std::string print_column_table(std::string name, AthenaArray<Real> const& var,
-                               int il, int iu) {
-  std::stringstream msg;
-
-  msg << "rank = " << Globals::my_rank << ", " << name << " dump:" << std::endl;
-
-  for (int i = il; i <= iu; ++i) {
-    msg << "i = " << std::setw(4) << i << " |";
-    msg << std::setw(4) << "(";
-    for (int n = 0; n < NHYDRO; ++n) msg << var(n, i) << ", ";
-    msg << ")" << std::endl;
-  }
-
-  return msg.str();
-}
-
-void check_eos_cons2prim(AthenaArray<Real> const& prim, int k, int j, int il,
-                         int iu) {
-#ifdef ENABLE_GLOG
-  for (int i = il; i <= iu; ++i) {
-    Real const& w_d = prim(IDN, k, j, i);
-    Real const& w_p = prim(IPR, k, j, i);
-
-    int ifix = il;
-    for (; ifix <= iu; ++ifix) {
-      if ((prim(IDN, k, j, ifix) < 0.) || std::isnan(prim(IDN, k, j, ifix)) ||
-          (prim(IPR, k, j, ifix) < 0.) || std::isnan(prim(IPR, k, j, ifix))) {
-        break;
-      }
-    }
-
-    LOG_IF(FATAL, std::isnan(w_d) || (w_d < 0.))
-        << "ifix = " << ifix << ", "
-        << print_column_table("prim-den", prim, k, j, il, iu);
-
-    LOG_IF(FATAL, std::isnan(w_p) || (w_p < 0.))
-        << "ifix = " << ifix << ", "
-        << print_column_table("prim-pre", prim, k, j, il, iu);
-  }
-#endif  // ENABLE_GLOG
-}
-
-void check_reconstruct(AthenaArray<Real> const& wl, AthenaArray<Real> const& wr,
-                       int dir, int k, int j, int il, int iu) {}
-
-void check_hydro_riemann_solver_flux(AthenaArray<Real> const& flux, int ivx,
-                                     int k, int j, int il, int iu) {
-#ifdef ENABLE_GLOG
-  for (int i = il; i <= iu; ++i) {
-    for (int n = 0; n < NHYDRO; ++n) {
-      char name[80];
-      snprintf(name, 80, "flux%d-%d", ivx, n);
-      LOG_IF(FATAL, std::isnan(flux(n, k, j, i)))
-          << print_column_table(name, flux, n, k, j, il, iu);
-    }
-  }
-#endif  // ENABLE_GLOG
-}
-
-void check_decomposition(AthenaArray<Real> const& wl,
-                         AthenaArray<Real> const& wr, int k, int j, int il,
-                         int iu) {
-  /*#ifdef ENABLE_GLOG
-    for (int i = il; i <= iu; ++i) {
-      LOG_IF(FATAL, wl(IDN, k, j, i) < 0.)
-          << print_column_table("wl-den", wl, k, j, il, iu);
-
-      LOG_IF(FATAL, wr(IDN, k, j, i) < 0.)
-          << print_column_table("wr-den", wr, k, j, il, iu);
-
-      LOG_IF(ERROR, wl(IPR, k, j, i) < 0.)
-          << print_column_table("wl-pre", wl, k, j, il, iu);
-
-      LOG_IF(ERROR, wr(IPR, k, j, i) < 0.)
-          << print_column_table("wl-pre", wr, k, j, il, iu);
-    }
-  #endif  // ENABLE_GLOG*/
-}
-
-void check_implicit_cons(AthenaArray<Real> const& cons, int il, int iu, int jl,
-                         int ju, int kl, int ku) {
-#ifdef ENABLE_GLOG
-  for (int k = kl; k <= ku; ++k)
-    for (int j = jl; j <= ju; ++j)
-      for (int i = il; i <= iu; ++i) {
-        Real const& u_d = cons(IDN, k, j, i);
-        Real const& u_e = cons(IEN, k, j, i);
-
-        LOG_IF(FATAL, std::isnan(u_d) || (u_d < 0.))
-            << print_column_table("cons-den", cons, k, j, il, iu);
-
-        LOG_IF(FATAL, std::isnan(u_e) || (u_e < 0.))
-            << print_column_table("cons-eng", cons, k, j, il, iu);
-      }
-#endif  // ENABLE_GLOG
-}
-
-// dirty fix for negative pressure and density
-void fix_eos_cons2prim(MeshBlock* pmb, AthenaArray<Real>& prim,
-                       AthenaArray<Real>& cons, int k, int j, int il, int iu) {
-#ifdef ENABLE_FIX
-  auto pthermo = Thermodynamics::GetInstance();
-  auto pcoord = pmb->pcoord;
-  auto pscm = pmb->pimpl->pscm;
-
-  Real Rd = pthermo->GetRd();
-  Real grav = pmb->phydro->hsrc.GetG1();
-
-  int ifix = il;
-  for (; ifix <= iu; ++ifix) {
-    if ((prim(IDN, k, j, ifix) < 0.) || std::isnan(prim(IDN, k, j, ifix)) ||
-        (prim(IPR, k, j, ifix) < 0.) || std::isnan(prim(IPR, k, j, ifix))) {
-      break;
-    }
-  }
-
-  AirColumn ac(pmb->ncells1);
-  for (int i = ifix - 1; i <= iu; ++i) {
-    ac[i].SetType(AirParcel::Type::MassFrac);
-    for (int n = 0; n < NHYDRO; ++n) {
-      ac[i].w[n] = prim(n, k, j, i);
-    }
-  }
-
-  pscm->ConvectiveAdjustment(ac, k, j, ifix - 1, iu);
-
-  for (int i = ifix - 1; i <= iu; ++i) {
-    ac[i].ToMassFraction();
-    for (int n = 0; n < NHYDRO; ++n) {
-      prim(n, k, j, i) = ac[i].w[n];
-    }
-
-    ac[i].ToMassConcentration();
-    for (int n = 0; n < NHYDRO; ++n) {
-      cons(n, k, j, i) = ac[i].w[n];
-    }
-  }
-
-  /*Real temp = pthermo->GetTemp(pmb, k, j, ifix - 1);
-  for (int i = ifix; i <= iu; ++i) {
-    Real z = pcoord->x1v(i) - pcoord->x1v(ifix - 1);
-    prim(IDN, k, j, i) =
-        prim(IDN, k, j, ifix - 1) * exp(grav * z / (Rd * temp));
-    prim(IPR, k, j, i) =
-        prim(IPR, k, j, ifix - 1) * exp(grav * z / (Rd * temp));
-    prim(IVX, k, j, i) /= 2.;
-    prim(IVY, k, j, i) /= 2.;
-    prim(IVZ, k, j, i) /= 2.;
-  }*/
-
-#endif  // ENABLE_FIX
-}
-
-void fix_reconstruct_x1(MeshBlock* pmb, AthenaArray<Real>& wl,
-                        AthenaArray<Real>& wr, AthenaArray<Real> const& w,
-                        int k, int j, int il, int iu) {}
-
-void fix_reconstruct_x2(AthenaArray<Real>& wl, AthenaArray<Real>& wr,
-                        AthenaArray<Real> const& w, int k, int j, int il,
-                        int iu) {
-#ifdef ENABLE_FIX
-  for (int i = il; i <= iu; ++i) {
-    if (wl(IDN, i) < 0.) wl(IDN, i) = w(IDN, k, j - 1, i);
-    if (wr(IDN, i) < 0.) wr(IDN, i) = w(IDN, k, j, i);
-    if (wl(IPR, i) < 0.) wl(IPR, i) = w(IPR, k, j - 1, i);
-    if (wr(IPR, i) < 0.) wr(IPR, i) = w(IPR, k, j, i);
-  }
-#endif  // ENABLE_FIX
-}
-
-void fix_reconstruct_x3(AthenaArray<Real>& wl, AthenaArray<Real>& wr,
-                        AthenaArray<Real> const& w, int k, int j, int il,
-                        int iu) {
-#ifdef ENABLE_FIX
-  for (int i = il; i <= iu; ++i) {
-    if (wl(IDN, i) < 0.) wl(IDN, i) = w(IDN, k - 1, j, i);
-    if (wr(IDN, i) < 0.) wr(IDN, i) = w(IDN, k, j, i);
-    if (wl(IPR, i) < 0.) wl(IPR, i) = w(IPR, k - 1, j, i);
-    if (wr(IPR, i) < 0.) wr(IPR, i) = w(IPR, k, j, i);
-  }
-#endif  // ENABLE_FIX
-}
-
-void fix_implicit_cons(MeshBlock* pmb, AthenaArray<Real>& cons, int il, int iu,
-                       int jl, int ju, int kl, int ku) {
-#ifdef ENABLE_FIX
-  auto pthermo = Thermodynamics::GetInstance();
-  auto pcoord = pmb->pcoord;
-  auto pscm = pmb->pimpl->pscm;
-
-  Real Rd = pthermo->GetRd();
-  Real grav = pmb->phydro->hsrc.GetG1();
-
-  for (int k = kl; k <= ku; ++k)
-    for (int j = jl; j <= ju; ++j) {
-      int ifix = il;
-
-      for (; ifix <= iu; ++ifix) {
-        if ((cons(IDN, k, j, ifix) < 0.) || std::isnan(cons(IDN, k, j, ifix)) ||
-            (cons(IEN, k, j, ifix) < 0.) || std::isnan(cons(IEN, k, j, ifix))) {
-          break;
-        }
-      }
-
-      AirColumn ac(pmb->ncells1);
-      for (int i = ifix - 1; i <= iu; ++i) {
-        ac[i].SetType(AirParcel::Type::MassConc);
-        for (int n = 0; n < NHYDRO; ++n) {
-          ac[i].w[n] = cons(n, k, j, i);
-        }
-      }
-
-      pscm->ConvectiveAdjustment(ac, k, j, ifix - 1, iu);
-
-      for (int i = ifix - 1; i <= iu; ++i) {
-        for (int n = 0; n < NHYDRO; ++n) {
-          cons(n, k, j, i) = ac[i].w[n];
-        }
-      }
-
-      /*AirParcel air0(AirParcel::Type::MassConc);
-      for (int n = 0; n < NHYDRO; ++n) air0.w[n] = cons(n, k, j, ifix - 1);
-      air0.ToMoleFraction();
-      Real temp = air0.w[IDN];
-      air0.ToMassFraction();
-
-      AirParcel air(AirParcel::Type::MassConc);
-
-      for (int i = ifix; i <= iu; ++i) {
-        for (int n = 0; n < NHYDRO; ++n) air.w[n] = cons(n, k, j, i);
-        air.ToMassFraction();
-
-        Real z = pcoord->x1v(i) - pcoord->x1v(ifix - 1);
-        air.w[IDN] = air0.w[IDN] * exp(grav * z / (Rd * temp));
-        air.w[IPR] = air0.w[IPR] * exp(grav * z / (Rd * temp));
-        air.w[IVX] /= 2.;
-        air.w[IVY] /= 2.;
-        air.w[IVZ] /= 2.;
-
-        air.ToMassConcentration();
-        for (int n = 0; n < NHYDRO; ++n) cons(n, k, j, i) = air.w[n];
-      }*/
-    }
-#endif  // ENABLE_FIX
-}
diff --git a/src/exo3/cs_velocity_rotation.cpp b/src/exo3/cs_velocity_rotation.cpp
new file mode 100644
index 00000000..630fb4bb
--- /dev/null
+++ b/src/exo3/cs_velocity_rotation.cpp
@@ -0,0 +1,196 @@
+#include "cs_velocity_rotation.hpp"
+
+namespace CubedSphereUtility {
+
+//! Transform cubed sphere velocity to local cartesian velocity
+void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  Real x = tan(a);
+  Real y = tan(b);
+
+  Real vx = *v2;
+  Real vy = *v3;
+  Real vz = *v1;
+
+  Real delta = sqrt(x*x + y*y + 1);
+  Real C = sqrt(1 + x*x);
+  Real D = sqrt(1 + y*y);
+
+  *v1 = (vz - D * x * vx - C * y * vy) / delta;
+  *v2 = 
+      (x * vz + D * vx) / delta;
+  *v3 =
+      (y * vz + C * vy) / delta;
+}
+
+//! Transform local cartesian velocity to cubed sphere velocity
+void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {
+  Real x = tan(a);
+  Real y = tan(b);
+
+  Real vx = *v2;
+  Real vy = *v3;
+  Real vz = *v1;
+
+  Real delta = sqrt(x*x + y*y + 1);
+  Real C = sqrt(1 + x*x);
+  Real D = sqrt(1 + y*y);
+
+  *v1 = (vz + x * vx + y * vy) / delta;
+  *v2 =
+      (-x * vz / D + vx * (1 + y*y) / D - vy * x * y / D) / delta;
+  *v3 =
+      (-y * vz / C - x * y * vx / C + (1 + x*x) * vy / C) / delta;
+}
+
+//! Transform cubed sphere velocity from panel 1 to panel 2
+//! \param a $x = \tan(\xi)$ coordinates
+//! \param b $y = \tan(\eta)$ coordinat
+void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
+
+  switch (panel) {
+    case 2:
+      // z->y, x->-x, y->z
+      *vz = v3;
+      *vx = -v2;
+      *vy = v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 3:
+      // z->-x, x->z, y->y
+      *vz = v2;
+      *vx = -v1;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 4:
+      // z->-x, x->-y, y->z
+      *vz = -v2;
+      *vx = -v3;
+      *vy = v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 6:
+      // z->-y, x->x, y->z
+      *vz = -v3;
+      *vx = v2;
+      *vy = v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+  }
+}
+
+void vel_zab_from_p2(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
+  switch (panel) {
+    case 1:
+      // z->y, x->-x, y->z
+      *vz = v3;
+      *vx = -v2;
+      *vy = v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 2:
+      break;
+    case 4:
+      break;
+    case 5:
+      break;
+  }
+}
+
+void vel_zab_from_p3(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
+  switch (panel) {
+    case 1:
+      // z->x, x->-z, y->y
+      *vz = -v2;
+      *vx = v1;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 2:
+      break;
+    case 5:
+      break;
+    case 6:
+      break;
+  }
+}
+
+void vel_zab_from_p4(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
+  switch (panel) {
+    case 1:
+      // z->y, x->-z, y->-x
+      *vz = v3;
+      *vx = -v1;
+      *vy = -v2;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 2:
+      break;
+    case 5:
+      break;
+    case 6:
+      break;
+  }
+}
+
+void vel_zab_from_p5(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
+  switch (panel) {
+    case 2:
+      break;
+    case 3:
+      break;
+    case 4:
+      break;
+    case 6:
+      break;
+  }
+}
+
+void vel_zab_from_p6(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel) {
+  vel_zab_to_zxy(vz, vx, vy, a, b);
+  Real v1 = *vz;
+  Real v2 = *vx;
+  Real v3 = *vy;
+  switch (panel) {
+    case 1:
+      // z->y, x->x, y->-z
+      *vz = v3;
+      *vx = v2;
+      *vy = -v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
+      break;
+    case 3:
+      break;
+    case 4:
+      break;
+    case 5:
+      break;
+  }
+}
+}  // namespace CubedSphereUtility
\ No newline at end of file
diff --git a/src/exo3/cs_velocity_rotation.hpp b/src/exo3/cs_velocity_rotation.hpp
index 81ae6cdd..9df5b4b6 100644
--- a/src/exo3/cs_velocity_rotation.hpp
+++ b/src/exo3/cs_velocity_rotation.hpp
@@ -41,196 +41,25 @@
 namespace CubedSphereUtility {
 
 //! Transform cubed sphere velocity to local cartesian velocity
-inline void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  Real x = tan(a);
-  Real y = tan(b);
-
-  Real vx = *v2;
-  Real vy = *v3;
-  Real vz = *v1;
-
-  Real delta = sqrt(x*x + y*y + 1);
-  Real C = sqrt(1 + x*x);
-  Real D = sqrt(1 + y*y);
-
-  *v1 = (vz - D * x * vx - C * y * vy) / delta;
-  *v2 = 
-      (x * vz + D * vx) / delta;
-  *v3 =
-      (y * vz + C * vy) / delta;
-}
-
+void vel_zab_to_zxy(Real *v1, Real *v2, Real *v3, Real a, Real b);
 //! Transform local cartesian velocity to cubed sphere velocity
-inline void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b) {
-  Real x = tan(a);
-  Real y = tan(b);
-
-  Real vx = *v2;
-  Real vy = *v3;
-  Real vz = *v1;
-
-  Real delta = sqrt(x*x + y*y + 1);
-  Real C = sqrt(1 + x*x);
-  Real D = sqrt(1 + y*y);
-
-  *v1 = (vz + x * vx + y * vy) / delta;
-  *v2 =
-      (-x * vz / D + vx * (1 + y*y) / D - vy * x * y / D) / delta;
-  *v3 =
-      (-y * vz / C - x * y * vx / C + (1 + x*x) * vy / C) / delta;
-}
+void vel_zxy_to_zab(Real *v1, Real *v2, Real *v3, Real a, Real b);
 
 //! Transform cubed sphere velocity from panel 1 to panel 2
 //! \param a $x = \tan(\xi)$ coordinates
 //! \param b $y = \tan(\eta)$ coordinat
-inline void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
-                            int panel) {
-  vel_zab_to_zxy(vz, vx, vy, a, b);
-  Real v1 = *vz;
-  Real v2 = *vx;
-  Real v3 = *vy;
-
-  switch (panel) {
-    case 2:
-      // z->y, x->-x, y->z
-      *vz = v3;
-      *vx = -v2;
-      *vy = v1;
-      vel_zxy_to_zab(vz, vx, vy, a, b);
-      break;
-    case 3:
-      // z->-x, x->z, y->y
-      *vz = v2;
-      *vx = -v1;
-      *vy = v3;
-      vel_zxy_to_zab(vz, vx, vy, a, b);
-      break;
-    case 4:
-      // z->-x, x->-y, y->z
-      *vz = -v2;
-      *vx = -v3;
-      *vy = v1;
-      vel_zxy_to_zab(vz, vx, vy, a, b);
-      break;
-    case 6:
-      // z->-y, x->x, y->z
-      *vz = -v3;
-      *vx = v2;
-      *vy = v1;
-      vel_zxy_to_zab(vz, vx, vy, a, b);
-      break;
-  }
-}
-
-inline void vel_zab_from_p2(Real *vz, Real *vx, Real *vy, Real a, Real b,
-                            int panel) {
-  vel_zab_to_zxy(vz, vx, vy, a, b);
-  Real v1 = *vz;
-  Real v2 = *vx;
-  Real v3 = *vy;
-  switch (panel) {
-    case 1:
-      // z->y, x->-x, y->z
-      *vz = v3;
-      *vx = -v2;
-      *vy = v1;
-      vel_zxy_to_zab(vz, vx, vy, a, b);
-      break;
-    case 2:
-      break;
-    case 4:
-      break;
-    case 5:
-      break;
-  }
-}
-
-inline void vel_zab_from_p3(Real *vz, Real *vx, Real *vy, Real a, Real b,
-                            int panel) {
-  vel_zab_to_zxy(vz, vx, vy, a, b);
-  Real v1 = *vz;
-  Real v2 = *vx;
-  Real v3 = *vy;
-  switch (panel) {
-    case 1:
-      // z->x, x->-z, y->y
-      *vz = -v2;
-      *vx = v1;
-      *vy = v3;
-      vel_zxy_to_zab(vz, vx, vy, a, b);
-      break;
-    case 2:
-      break;
-    case 5:
-      break;
-    case 6:
-      break;
-  }
-}
-
-inline void vel_zab_from_p4(Real *vz, Real *vx, Real *vy, Real a, Real b,
-                            int panel) {
-  vel_zab_to_zxy(vz, vx, vy, a, b);
-  Real v1 = *vz;
-  Real v2 = *vx;
-  Real v3 = *vy;
-  switch (panel) {
-    case 1:
-      // z->y, x->-z, y->-x
-      *vz = v3;
-      *vx = -v1;
-      *vy = -v2;
-      vel_zxy_to_zab(vz, vx, vy, a, b);
-      break;
-    case 2:
-      break;
-    case 5:
-      break;
-    case 6:
-      break;
-  }
-}
-
-inline void vel_zab_from_p5(Real *vz, Real *vx, Real *vy, Real a, Real b,
-                            int panel) {
-  vel_zab_to_zxy(vz, vx, vy, a, b);
-  Real v1 = *vz;
-  Real v2 = *vx;
-  Real v3 = *vy;
-  switch (panel) {
-    case 2:
-      break;
-    case 3:
-      break;
-    case 4:
-      break;
-    case 6:
-      break;
-  }
-}
-
-inline void vel_zab_from_p6(Real *vz, Real *vx, Real *vy, Real a, Real b,
-                            int panel) {
-  vel_zab_to_zxy(vz, vx, vy, a, b);
-  Real v1 = *vz;
-  Real v2 = *vx;
-  Real v3 = *vy;
-  switch (panel) {
-    case 1:
-      // z->y, x->x, y->-z
-      *vz = v3;
-      *vx = v2;
-      *vy = -v1;
-      vel_zxy_to_zab(vz, vx, vy, a, b);
-      break;
-    case 3:
-      break;
-    case 4:
-      break;
-    case 5:
-      break;
-  }
-}
+void vel_zab_from_p1(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel);
+void vel_zab_from_p2(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel);
+void vel_zab_from_p3(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel);
+void vel_zab_from_p4(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel);
+void vel_zab_from_p5(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel);
+void vel_zab_from_p6(Real *vz, Real *vx, Real *vy, Real a, Real b,
+                            int panel);
 }  // namespace CubedSphereUtility
 
 #endif  // SRC_EXO3_VELOCITY_ROTATION_HPP_
\ No newline at end of file

From c5ca89a9cc314f987baf866ffdd92e7d7dca537c Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Mon, 1 Apr 2024 00:11:29 -0400
Subject: [PATCH 21/22] file added

---
 src/checks.cpp | 304 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 304 insertions(+)
 create mode 100644 src/checks.cpp

diff --git a/src/checks.cpp b/src/checks.cpp
new file mode 100644
index 00000000..045aea3a
--- /dev/null
+++ b/src/checks.cpp
@@ -0,0 +1,304 @@
+// C/C++
+#include <iomanip>
+#include <sstream>
+#include <string>
+
+// athena
+#include <athena/athena.hpp>
+#include <athena/coordinates/coordinates.hpp>
+#include <athena/globals.hpp>
+#include <athena/mesh/mesh.hpp>
+
+// canoe
+#include <air_parcel.hpp>
+#include <configure.hpp>
+#include <impl.hpp>
+
+// snap
+#include <snap/thermodynamics/thermodynamics.hpp>
+
+// single column
+#include <single_column/single_column.hpp>
+
+#ifdef ENABLE_GLOG
+#include <glog/logging.h>
+#endif
+
+std::string print_column_table(std::string name, AthenaArray<Real> const& var,
+                               int k, int j, int il, int iu, int width = 1) {
+  std::stringstream msg;
+
+  msg << "rank = " << Globals::my_rank << ", " << name << " dump:" << std::endl;
+
+  for (int i = il; i <= iu; ++i) {
+    msg << "i = " << std::setw(4) << i << " |";
+    msg << std::setw(4) << "(";
+    for (int n = 0; n < NHYDRO; ++n) msg << var(n, k, j, i) << ", ";
+    msg << ")" << std::endl;
+  }
+
+  return msg.str();
+}
+
+std::string print_column_table(std::string name, AthenaArray<Real> const& var,
+                               int il, int iu) {
+  std::stringstream msg;
+
+  msg << "rank = " << Globals::my_rank << ", " << name << " dump:" << std::endl;
+
+  for (int i = il; i <= iu; ++i) {
+    msg << "i = " << std::setw(4) << i << " |";
+    msg << std::setw(4) << "(";
+    for (int n = 0; n < NHYDRO; ++n) msg << var(n, i) << ", ";
+    msg << ")" << std::endl;
+  }
+
+  return msg.str();
+}
+
+void check_eos_cons2prim(AthenaArray<Real> const& prim, int k, int j, int il,
+                         int iu) {
+#ifdef ENABLE_GLOG
+  for (int i = il; i <= iu; ++i) {
+    Real const& w_d = prim(IDN, k, j, i);
+    Real const& w_p = prim(IPR, k, j, i);
+
+    int ifix = il;
+    for (; ifix <= iu; ++ifix) {
+      if ((prim(IDN, k, j, ifix) < 0.) || std::isnan(prim(IDN, k, j, ifix)) ||
+          (prim(IPR, k, j, ifix) < 0.) || std::isnan(prim(IPR, k, j, ifix))) {
+        break;
+      }
+    }
+
+    LOG_IF(FATAL, std::isnan(w_d) || (w_d < 0.))
+        << "ifix = " << ifix << ", "
+        << print_column_table("prim-den", prim, k, j, il, iu);
+
+    LOG_IF(FATAL, std::isnan(w_p) || (w_p < 0.))
+        << "ifix = " << ifix << ", "
+        << print_column_table("prim-pre", prim, k, j, il, iu);
+  }
+#endif  // ENABLE_GLOG
+}
+
+void check_reconstruct(AthenaArray<Real> const& wl, AthenaArray<Real> const& wr,
+                       int dir, int k, int j, int il, int iu) {
+#ifdef ENABLE_GLOG
+  for (int i = il; i <= iu; ++i) {
+    char name[80];
+    snprintf(name, 80, "wl-den-%d", dir + 1);
+    LOG_IF(FATAL, wl(IDN, i) < 0.) << print_column_table(name, wl, il, iu);
+
+    snprintf(name, 80, "wr-den-%d", dir + 1);
+    LOG_IF(FATAL, wr(IDN, i) < 0.) << print_column_table(name, wr, il, iu);
+
+    snprintf(name, 80, "wl-pre-%d", dir + 1);
+    LOG_IF(FATAL, wl(IPR, i) < 0.) << print_column_table(name, wl, il, iu);
+
+    snprintf(name, 80, "wr-pre-%d", dir + 1);
+    LOG_IF(FATAL, wr(IPR, i) < 0.) << print_column_table(name, wr, il, iu);
+  }
+#endif  // ENABLE_GLOG
+}
+
+void check_hydro_riemann_solver_flux(AthenaArray<Real> const& flux, int ivx,
+                                     int k, int j, int il, int iu) {
+#ifdef ENABLE_GLOG
+  for (int i = il; i <= iu; ++i) {
+    for (int n = 0; n < NHYDRO; ++n) {
+      char name[80];
+      snprintf(name, 80, "flux%d-%d", ivx, n);
+      LOG_IF(FATAL, std::isnan(flux(n, k, j, i)))
+          << print_column_table(name, flux, n, k, j, il, iu);
+    }
+  }
+#endif  // ENABLE_GLOG
+}
+
+void check_decomposition(AthenaArray<Real> const& wl,
+                         AthenaArray<Real> const& wr, int k, int j, int il,
+                         int iu) {
+  /*#ifdef ENABLE_GLOG
+    for (int i = il; i <= iu; ++i) {
+      LOG_IF(FATAL, wl(IDN, k, j, i) < 0.)
+          << print_column_table("wl-den", wl, k, j, il, iu);
+
+      LOG_IF(FATAL, wr(IDN, k, j, i) < 0.)
+          << print_column_table("wr-den", wr, k, j, il, iu);
+
+      LOG_IF(ERROR, wl(IPR, k, j, i) < 0.)
+          << print_column_table("wl-pre", wl, k, j, il, iu);
+
+      LOG_IF(ERROR, wr(IPR, k, j, i) < 0.)
+          << print_column_table("wl-pre", wr, k, j, il, iu);
+    }
+  #endif  // ENABLE_GLOG*/
+}
+
+void check_implicit_cons(AthenaArray<Real> const& cons, int il, int iu, int jl,
+                         int ju, int kl, int ku) {
+#ifdef ENABLE_GLOG
+  for (int k = kl; k <= ku; ++k)
+    for (int j = jl; j <= ju; ++j)
+      for (int i = il; i <= iu; ++i) {
+        Real const& u_d = cons(IDN, k, j, i);
+        Real const& u_e = cons(IEN, k, j, i);
+
+        LOG_IF(FATAL, std::isnan(u_d) || (u_d < 0.))
+            << print_column_table("cons-den", cons, k, j, il, iu);
+
+        LOG_IF(FATAL, std::isnan(u_e) || (u_e < 0.))
+            << print_column_table("cons-eng", cons, k, j, il, iu);
+      }
+#endif  // ENABLE_GLOG
+}
+
+// dirty fix for negative pressure and density
+void fix_eos_cons2prim(MeshBlock* pmb, AthenaArray<Real>& prim,
+                       AthenaArray<Real>& cons, int k, int j, int il, int iu) {
+#ifdef ENABLE_FIX
+  auto pthermo = Thermodynamics::GetInstance();
+  auto pcoord = pmb->pcoord;
+  auto pscm = pmb->pimpl->pscm;
+
+  Real Rd = pthermo->GetRd();
+  Real grav = pmb->phydro->hsrc.GetG1();
+
+  int ifix = il;
+  for (; ifix <= iu; ++ifix) {
+    if ((prim(IDN, k, j, ifix) < 0.) || std::isnan(prim(IDN, k, j, ifix)) ||
+        (prim(IPR, k, j, ifix) < 0.) || std::isnan(prim(IPR, k, j, ifix))) {
+      break;
+    }
+  }
+
+  AirColumn ac(pmb->ncells1);
+  for (int i = ifix - 1; i <= iu; ++i) {
+    ac[i].SetType(AirParcel::Type::MassFrac);
+    for (int n = 0; n < NHYDRO; ++n) {
+      ac[i].w[n] = prim(n, k, j, i);
+    }
+  }
+
+  pscm->ConvectiveAdjustment(ac, k, j, ifix - 1, iu);
+
+  for (int i = ifix - 1; i <= iu; ++i) {
+    ac[i].ToMassFraction();
+    for (int n = 0; n < NHYDRO; ++n) {
+      prim(n, k, j, i) = ac[i].w[n];
+    }
+
+    ac[i].ToMassConcentration();
+    for (int n = 0; n < NHYDRO; ++n) {
+      cons(n, k, j, i) = ac[i].w[n];
+    }
+  }
+
+  /*Real temp = pthermo->GetTemp(pmb, k, j, ifix - 1);
+  for (int i = ifix; i <= iu; ++i) {
+    Real z = pcoord->x1v(i) - pcoord->x1v(ifix - 1);
+    prim(IDN, k, j, i) =
+        prim(IDN, k, j, ifix - 1) * exp(grav * z / (Rd * temp));
+    prim(IPR, k, j, i) =
+        prim(IPR, k, j, ifix - 1) * exp(grav * z / (Rd * temp));
+    prim(IVX, k, j, i) /= 2.;
+    prim(IVY, k, j, i) /= 2.;
+    prim(IVZ, k, j, i) /= 2.;
+  }*/
+
+#endif  // ENABLE_FIX
+}
+
+void fix_reconstruct_x1(MeshBlock* pmb, AthenaArray<Real>& wl,
+                        AthenaArray<Real>& wr, AthenaArray<Real> const& w,
+                        int k, int j, int il, int iu) {}
+
+void fix_reconstruct_x2(AthenaArray<Real>& wl, AthenaArray<Real>& wr,
+                        AthenaArray<Real> const& w, int k, int j, int il,
+                        int iu) {
+#ifdef ENABLE_FIX
+  for (int i = il; i <= iu; ++i) {
+    if (wl(IDN, i) < 0.) wl(IDN, i) = w(IDN, k, j - 1, i);
+    if (wr(IDN, i) < 0.) wr(IDN, i) = w(IDN, k, j, i);
+    if (wl(IPR, i) < 0.) wl(IPR, i) = w(IPR, k, j - 1, i);
+    if (wr(IPR, i) < 0.) wr(IPR, i) = w(IPR, k, j, i);
+  }
+#endif  // ENABLE_FIX
+}
+
+void fix_reconstruct_x3(AthenaArray<Real>& wl, AthenaArray<Real>& wr,
+                        AthenaArray<Real> const& w, int k, int j, int il,
+                        int iu) {
+#ifdef ENABLE_FIX
+  for (int i = il; i <= iu; ++i) {
+    if (wl(IDN, i) < 0.) wl(IDN, i) = w(IDN, k - 1, j, i);
+    if (wr(IDN, i) < 0.) wr(IDN, i) = w(IDN, k, j, i);
+    if (wl(IPR, i) < 0.) wl(IPR, i) = w(IPR, k - 1, j, i);
+    if (wr(IPR, i) < 0.) wr(IPR, i) = w(IPR, k, j, i);
+  }
+#endif  // ENABLE_FIX
+}
+
+void fix_implicit_cons(MeshBlock* pmb, AthenaArray<Real>& cons, int il, int iu,
+                       int jl, int ju, int kl, int ku) {
+#ifdef ENABLE_FIX
+  auto pthermo = Thermodynamics::GetInstance();
+  auto pcoord = pmb->pcoord;
+  auto pscm = pmb->pimpl->pscm;
+
+  Real Rd = pthermo->GetRd();
+  Real grav = pmb->phydro->hsrc.GetG1();
+
+  for (int k = kl; k <= ku; ++k)
+    for (int j = jl; j <= ju; ++j) {
+      int ifix = il;
+
+      for (; ifix <= iu; ++ifix) {
+        if ((cons(IDN, k, j, ifix) < 0.) || std::isnan(cons(IDN, k, j, ifix)) ||
+            (cons(IEN, k, j, ifix) < 0.) || std::isnan(cons(IEN, k, j, ifix))) {
+          break;
+        }
+      }
+
+      AirColumn ac(pmb->ncells1);
+      for (int i = ifix - 1; i <= iu; ++i) {
+        ac[i].SetType(AirParcel::Type::MassConc);
+        for (int n = 0; n < NHYDRO; ++n) {
+          ac[i].w[n] = cons(n, k, j, i);
+        }
+      }
+
+      pscm->ConvectiveAdjustment(ac, k, j, ifix - 1, iu);
+
+      for (int i = ifix - 1; i <= iu; ++i) {
+        for (int n = 0; n < NHYDRO; ++n) {
+          cons(n, k, j, i) = ac[i].w[n];
+        }
+      }
+
+      /*AirParcel air0(AirParcel::Type::MassConc);
+      for (int n = 0; n < NHYDRO; ++n) air0.w[n] = cons(n, k, j, ifix - 1);
+      air0.ToMoleFraction();
+      Real temp = air0.w[IDN];
+      air0.ToMassFraction();
+
+      AirParcel air(AirParcel::Type::MassConc);
+
+      for (int i = ifix; i <= iu; ++i) {
+        for (int n = 0; n < NHYDRO; ++n) air.w[n] = cons(n, k, j, i);
+        air.ToMassFraction();
+
+        Real z = pcoord->x1v(i) - pcoord->x1v(ifix - 1);
+        air.w[IDN] = air0.w[IDN] * exp(grav * z / (Rd * temp));
+        air.w[IPR] = air0.w[IPR] * exp(grav * z / (Rd * temp));
+        air.w[IVX] /= 2.;
+        air.w[IVY] /= 2.;
+        air.w[IVZ] /= 2.;
+
+        air.ToMassConcentration();
+        for (int n = 0; n < NHYDRO; ++n) cons(n, k, j, i) = air.w[n];
+      }*/
+    }
+#endif  // ENABLE_FIX
+}

From 2024a4647732f20ae218ba05614f1b71415324d1 Mon Sep 17 00:00:00 2001
From: jeffyujianfu <yujianfu@umich.edu>
Date: Wed, 10 Apr 2024 03:48:47 -0400
Subject: [PATCH 22/22] rotation done

---
 src/exo3/cs_velocity_rotation.cpp   |  84 ++++++++-
 tests/test_cs_velocity_rotation.cpp | 260 ++++++++++++++++++++++++++++
 2 files changed, 342 insertions(+), 2 deletions(-)

diff --git a/src/exo3/cs_velocity_rotation.cpp b/src/exo3/cs_velocity_rotation.cpp
index 630fb4bb..5b82f230 100644
--- a/src/exo3/cs_velocity_rotation.cpp
+++ b/src/exo3/cs_velocity_rotation.cpp
@@ -98,11 +98,26 @@ void vel_zab_from_p2(Real *vz, Real *vx, Real *vy, Real a, Real b,
       *vy = v1;
       vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
-    case 2:
+    case 3:
+      // z->-x, x->-y, y->z
+      *vz = -v2;
+      *vx = -v3;
+      *vy = v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 4:
+      // z->x, x->-z, y->y
+      *vz = v2;
+      *vx = -v1;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 5:
+      // z->-y, x->x, y->z
+      *vz = -v3;
+      *vx = v2;
+      *vy = v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
   }
 }
@@ -115,17 +130,32 @@ void vel_zab_from_p3(Real *vz, Real *vx, Real *vy, Real a, Real b,
   Real v3 = *vy;
   switch (panel) {
     case 1:
-      // z->x, x->-z, y->y
+      // z->-x, x->z, y->y
       *vz = -v2;
       *vx = v1;
       *vy = v3;
       vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 2:
+      // z->y, x->-z, y->-x
+      *vz = v3;
+      *vx = -v1;
+      *vy = -v2;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 5:
+      // z->x, x->-z, y->y
+      *vz = v2;
+      *vx = -v1;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 6:
+      // z->-y, x->z, y->-x
+      *vz = -v3;
+      *vx = v1;
+      *vy = -v2;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
   }
 }
@@ -145,10 +175,25 @@ void vel_zab_from_p4(Real *vz, Real *vx, Real *vy, Real a, Real b,
       vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 2:
+      // z->-x, x->z, y->y
+      *vz = -v2;
+      *vx = v1;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 5:
+      // z->-y, x->z, y->-x
+      *vz = -v3;
+      *vx = v1;
+      *vy = -v2;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 6:
+      // z->x, x->-z, y->y
+      *vz = v2;
+      *vx = -v1;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
   }
 }
@@ -161,12 +206,32 @@ void vel_zab_from_p5(Real *vz, Real *vx, Real *vy, Real a, Real b,
   Real v3 = *vy;
   switch (panel) {
     case 2:
+      // z->y, x->x, y->-z
+      *vz = v3;
+      *vx = v2;
+      *vy = -v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 3:
+      // z->-x, x->z, y->y
+      *vz = -v2;
+      *vx = v1;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 4:
+      // z->x, x->-y, y->-z
+      *vz = v2;
+      *vx = -v3;
+      *vy = -v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 6:
+      // z->-y, x->-x, y->-z
+      *vz = -v3;
+      *vx = -v2;
+      *vy = -v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
   }
 }
@@ -186,10 +251,25 @@ void vel_zab_from_p6(Real *vz, Real *vx, Real *vy, Real a, Real b,
       vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 3:
+      // z->x, x->-y, y->-z
+      *vz = v2;
+      *vx = -v3;
+      *vy = -v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 4:
+      // z->-x, x->z, y->y
+      *vz = -v2;
+      *vx = v1;
+      *vy = v3;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
     case 5:
+      // z->-y, x->-x, y->-z
+      *vz = -v3;
+      *vx = -v2;
+      *vy = -v1;
+      vel_zxy_to_zab(vz, vx, vy, a, b);
       break;
   }
 }
diff --git a/tests/test_cs_velocity_rotation.cpp b/tests/test_cs_velocity_rotation.cpp
index c64f02fd..e0536841 100644
--- a/tests/test_cs_velocity_rotation.cpp
+++ b/tests/test_cs_velocity_rotation.cpp
@@ -80,6 +80,266 @@ TEST(vel_zab_from_test, test_case_1_to_6_to_1) {
   }
 }
 
+TEST(vel_zab_from_test, test_case_2_to_1_to_2) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p2(vz, vx, vy, PI/5*2, PI/8*3, 1);
+  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 2);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_2_to_3_to_2) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p2(vz, vx, vy, PI/5*2, PI/8*3, 3);
+  CubedSphereUtility::vel_zab_from_p3(vz, vx, vy, PI/5*2, PI/8*3, 2);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_2_to_4_to_2) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p2(vz, vx, vy, PI/5*2, PI/8*3, 4);
+  CubedSphereUtility::vel_zab_from_p4(vz, vx, vy, PI/5*2, PI/8*3, 2);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_2_to_5_to_2) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p2(vz, vx, vy, PI/5*2, PI/8*3, 5);
+  CubedSphereUtility::vel_zab_from_p5(vz, vx, vy, PI/5*2, PI/8*3, 2);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_3_to_1_to_3) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p3(vz, vx, vy, PI/5*2, PI/8*3, 1);
+  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 3);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_3_to_2_to_3) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p3(vz, vx, vy, PI/5*2, PI/8*3, 2);
+  CubedSphereUtility::vel_zab_from_p2(vz, vx, vy, PI/5*2, PI/8*3, 3);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_3_to_5_to_3) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p3(vz, vx, vy, PI/5*2, PI/8*3, 5);
+  CubedSphereUtility::vel_zab_from_p5(vz, vx, vy, PI/5*2, PI/8*3, 3);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_3_to_6_to_3) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p3(vz, vx, vy, PI/5*2, PI/8*3, 6);
+  CubedSphereUtility::vel_zab_from_p6(vz, vx, vy, PI/5*2, PI/8*3, 3);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_4_to_2_to_4) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p4(vz, vx, vy, PI/5*2, PI/8*3, 2);
+  CubedSphereUtility::vel_zab_from_p2(vz, vx, vy, PI/5*2, PI/8*3, 4);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_4_to_1_to_4) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p4(vz, vx, vy, PI/5*2, PI/8*3, 1);
+  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 4);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_4_to_5_to_4) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p4(vz, vx, vy, PI/5*2, PI/8*3, 5);
+  CubedSphereUtility::vel_zab_from_p5(vz, vx, vy, PI/5*2, PI/8*3, 4);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_4_to_6_to_4) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p4(vz, vx, vy, PI/5*2, PI/8*3, 6);
+  CubedSphereUtility::vel_zab_from_p6(vz, vx, vy, PI/5*2, PI/8*3, 4);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_5_to_2_to_5) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p5(vz, vx, vy, PI/5*2, PI/8*3, 2);
+  CubedSphereUtility::vel_zab_from_p2(vz, vx, vy, PI/5*2, PI/8*3, 5);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_5_to_3_to_5) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p5(vz, vx, vy, PI/5*2, PI/8*3, 3);
+  CubedSphereUtility::vel_zab_from_p3(vz, vx, vy, PI/5*2, PI/8*3, 5);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_5_to_4_to_5) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p5(vz, vx, vy, PI/5*2, PI/8*3, 4);
+  CubedSphereUtility::vel_zab_from_p4(vz, vx, vy, PI/5*2, PI/8*3, 5);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_5_to_6_to_5) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p5(vz, vx, vy, PI/5*2, PI/8*3, 6);
+  CubedSphereUtility::vel_zab_from_p6(vz, vx, vy, PI/5*2, PI/8*3, 5);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_6_to_1_to_6) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p6(vz, vx, vy, PI/5*2, PI/8*3, 1);
+  CubedSphereUtility::vel_zab_from_p1(vz, vx, vy, PI/5*2, PI/8*3, 6);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_6_to_3_to_6) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p6(vz, vx, vy, PI/5*2, PI/8*3, 3);
+  CubedSphereUtility::vel_zab_from_p3(vz, vx, vy, PI/5*2, PI/8*3, 6);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_6_to_4_to_6) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p6(vz, vx, vy, PI/5*2, PI/8*3, 4);
+  CubedSphereUtility::vel_zab_from_p4(vz, vx, vy, PI/5*2, PI/8*3, 6);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
+TEST(vel_zab_from_test, test_case_6_to_5_to_6) {
+  Real result[3] = {1,2,3};
+  Real *vz = result;
+  Real *vx = result + 1;
+  Real *vy = result + 2;
+  Real expected_result[3] = {1,2,3};
+  CubedSphereUtility::vel_zab_from_p6(vz, vx, vy, PI/5*2, PI/8*3, 5);
+  CubedSphereUtility::vel_zab_from_p5(vz, vx, vy, PI/5*2, PI/8*3, 6);
+  for (int i = 0; i < 3; i++) {
+    EXPECT_NEAR(result[i], expected_result[i], 1e-5);
+  }
+}
+
 int main(int argc, char **argv) {
   testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();