#version 310 es

struct Inner {
  ivec3 a;
  int b;
  uvec3 c;
  uint d;
  vec3 e;
  float f;
  mat2x3 g;
  mat3x2 h;
  ivec4 i[4];
};

layout(binding = 0, std430) buffer S_1 {
  Inner arr[];
} s;
void tint_symbol(uint idx) {
  s.arr[idx].a = ivec3(0, 0, 0);
  s.arr[idx].b = 0;
  s.arr[idx].c = uvec3(0u, 0u, 0u);
  s.arr[idx].d = 0u;
  s.arr[idx].e = vec3(0.0f, 0.0f, 0.0f);
  s.arr[idx].f = 0.0f;
  s.arr[idx].g = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  s.arr[idx].h = mat3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  ivec4 tint_symbol_1[4] = ivec4[4](ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
  s.arr[idx].i = tint_symbol_1;
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
  tint_symbol(gl_LocalInvocationIndex);
  return;
}
