struct Mat4x4_ {
  float4 mx;
  float4 my;
  float4 mz;
  float4 mw;
};
struct Mat4x3_ {
  float4 mx;
  float4 my;
  float4 mz;
};
struct Mat4x2_ {
  float4 mx;
  float4 my;
};

Mat4x4_ tint_symbol_7(uint4 buffer[4], uint offset) {
  const int scalar_offset = ((offset + 0u)) / 4;
  const int scalar_offset_1 = ((offset + 16u)) / 4;
  const int scalar_offset_2 = ((offset + 32u)) / 4;
  const int scalar_offset_3 = ((offset + 48u)) / 4;
  const Mat4x4_ tint_symbol_10 = {asfloat(buffer[scalar_offset / 4]), asfloat(buffer[scalar_offset_1 / 4]), asfloat(buffer[scalar_offset_2 / 4]), asfloat(buffer[scalar_offset_3 / 4])};
  return tint_symbol_10;
}

Mat4x2_ tint_symbol_9(uint4 buffer[3], uint offset) {
  const int scalar_offset_4 = ((offset + 0u)) / 4;
  const int scalar_offset_5 = ((offset + 16u)) / 4;
  const Mat4x2_ tint_symbol_11 = {asfloat(buffer[scalar_offset_4 / 4]), asfloat(buffer[scalar_offset_5 / 4])};
  return tint_symbol_11;
}

Mat4x3_ tint_symbol_5(uint4 buffer[96], uint offset) {
  const int scalar_offset_6 = ((offset + 0u)) / 4;
  const int scalar_offset_7 = ((offset + 16u)) / 4;
  const int scalar_offset_8 = ((offset + 32u)) / 4;
  const Mat4x3_ tint_symbol_12 = {asfloat(buffer[scalar_offset_6 / 4]), asfloat(buffer[scalar_offset_7 / 4]), asfloat(buffer[scalar_offset_8 / 4])};
  return tint_symbol_12;
}

struct VertexOutput {
  float4 v_Color;
  float2 v_TexCoord;
  float4 member;
};

cbuffer cbuffer_global : register(b0, space0) {
  uint4 global[4];
};
cbuffer cbuffer_global1 : register(b1, space0) {
  uint4 global1[3];
};
cbuffer cbuffer_global2 : register(b2, space0) {
  uint4 global2[96];
};
static float3 a_Position1 = float3(0.0f, 0.0f, 0.0f);
static float2 a_UV1 = float2(0.0f, 0.0f);
static float4 a_Color1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
static float3 a_Normal1 = float3(0.0f, 0.0f, 0.0f);
static float a_PosMtxIdx1 = 0.0f;
static float4 v_Color = float4(0.0f, 0.0f, 0.0f, 0.0f);
static float2 v_TexCoord = float2(0.0f, 0.0f);
static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);

float3 Mat4x3GetCol0_(Mat4x3_ m) {
  Mat4x3_ m1 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  m1 = m;
  const Mat4x3_ _e2 = m1;
  const Mat4x3_ _e5 = m1;
  const Mat4x3_ _e8 = m1;
  return float3(_e2.mx.x, _e5.my.x, _e8.mz.x);
}

float3 Mat4x3GetCol1_(Mat4x3_ m2) {
  Mat4x3_ m3 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  m3 = m2;
  const Mat4x3_ _e2 = m3;
  const Mat4x3_ _e5 = m3;
  const Mat4x3_ _e8 = m3;
  return float3(_e2.mx.y, _e5.my.y, _e8.mz.y);
}

float3 Mat4x3GetCol2_(Mat4x3_ m4) {
  Mat4x3_ m5 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  m5 = m4;
  const Mat4x3_ _e2 = m5;
  const Mat4x3_ _e5 = m5;
  const Mat4x3_ _e8 = m5;
  return float3(_e2.mx.z, _e5.my.z, _e8.mz.z);
}

float3 Mat4x3GetCol3_(Mat4x3_ m6) {
  Mat4x3_ m7 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  m7 = m6;
  const Mat4x3_ _e2 = m7;
  const Mat4x3_ _e5 = m7;
  const Mat4x3_ _e8 = m7;
  return float3(_e2.mx.w, _e5.my.w, _e8.mz.w);
}

float4 Mul(Mat4x4_ m8, float4 v) {
  Mat4x4_ m9 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  m9 = m8;
  v1 = v;
  const Mat4x4_ _e4 = m9;
  const float4 _e6 = v1;
  const Mat4x4_ _e8 = m9;
  const float4 _e10 = v1;
  const Mat4x4_ _e12 = m9;
  const float4 _e14 = v1;
  const Mat4x4_ _e16 = m9;
  const float4 _e18 = v1;
  return float4(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14), dot(_e16.mw, _e18));
}

float3 Mul1(Mat4x3_ m10, float4 v2) {
  Mat4x3_ m11 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  float4 v3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  m11 = m10;
  v3 = v2;
  const Mat4x3_ _e4 = m11;
  const float4 _e6 = v3;
  const Mat4x3_ _e8 = m11;
  const float4 _e10 = v3;
  const Mat4x3_ _e12 = m11;
  const float4 _e14 = v3;
  return float3(dot(_e4.mx, _e6), dot(_e8.my, _e10), dot(_e12.mz, _e14));
}

float2 Mul2(Mat4x2_ m12, float4 v4) {
  Mat4x2_ m13 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  float4 v5 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  m13 = m12;
  v5 = v4;
  const Mat4x2_ _e4 = m13;
  const float4 _e6 = v5;
  const Mat4x2_ _e8 = m13;
  const float4 _e10 = v5;
  return float2(dot(_e4.mx, _e6), dot(_e8.my, _e10));
}

float4 Mul3(float3 v6, Mat4x3_ m14) {
  float3 v7 = float3(0.0f, 0.0f, 0.0f);
  Mat4x3_ m15 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  v7 = v6;
  m15 = m14;
  const Mat4x3_ _e5 = m15;
  const float3 _e6 = Mat4x3GetCol0_(_e5);
  const float3 _e7 = v7;
  const Mat4x3_ _e10 = m15;
  const float3 _e11 = Mat4x3GetCol1_(_e10);
  const float3 _e12 = v7;
  const Mat4x3_ _e15 = m15;
  const float3 _e16 = Mat4x3GetCol2_(_e15);
  const float3 _e17 = v7;
  const Mat4x3_ _e20 = m15;
  const float3 _e21 = Mat4x3GetCol3_(_e20);
  const float3 _e22 = v7;
  return float4(dot(_e6, _e7), dot(_e11, _e12), dot(_e16, _e17), dot(_e21, _e22));
}

Mat4x4_ _Mat4x4_(float n) {
  float n1 = 0.0f;
  Mat4x4_ o = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  n1 = n;
  const float _e4 = n1;
  o.mx = float4(_e4, 0.0f, 0.0f, 0.0f);
  const float _e11 = n1;
  o.my = float4(0.0f, _e11, 0.0f, 0.0f);
  const float _e18 = n1;
  o.mz = float4(0.0f, 0.0f, _e18, 0.0f);
  const float _e25 = n1;
  o.mw = float4(0.0f, 0.0f, 0.0f, _e25);
  const Mat4x4_ _e27 = o;
  return _e27;
}

Mat4x4_ _Mat4x4_1(Mat4x3_ m16) {
  Mat4x3_ m17 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  Mat4x4_ o1 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  m17 = m16;
  const Mat4x4_ _e4 = _Mat4x4_(1.0f);
  o1 = _e4;
  const Mat4x3_ _e7 = m17;
  o1.mx = _e7.mx;
  const Mat4x3_ _e10 = m17;
  o1.my = _e10.my;
  const Mat4x3_ _e13 = m17;
  o1.mz = _e13.mz;
  const Mat4x4_ _e15 = o1;
  return _e15;
}

Mat4x4_ _Mat4x4_2(Mat4x2_ m18) {
  Mat4x2_ m19 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  Mat4x4_ o2 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  m19 = m18;
  const Mat4x4_ _e4 = _Mat4x4_(1.0f);
  o2 = _e4;
  const Mat4x2_ _e7 = m19;
  o2.mx = _e7.mx;
  const Mat4x2_ _e10 = m19;
  o2.my = _e10.my;
  const Mat4x4_ _e12 = o2;
  return _e12;
}

Mat4x3_ _Mat4x3_(float n2) {
  float n3 = 0.0f;
  Mat4x3_ o3 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  n3 = n2;
  const float _e4 = n3;
  o3.mx = float4(_e4, 0.0f, 0.0f, 0.0f);
  const float _e11 = n3;
  o3.my = float4(0.0f, _e11, 0.0f, 0.0f);
  const float _e18 = n3;
  o3.mz = float4(0.0f, 0.0f, _e18, 0.0f);
  const Mat4x3_ _e21 = o3;
  return _e21;
}

Mat4x3_ _Mat4x3_1(Mat4x4_ m20) {
  Mat4x4_ m21 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  Mat4x3_ o4 = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  m21 = m20;
  const Mat4x4_ _e4 = m21;
  o4.mx = _e4.mx;
  const Mat4x4_ _e7 = m21;
  o4.my = _e7.my;
  const Mat4x4_ _e10 = m21;
  o4.mz = _e10.mz;
  const Mat4x3_ _e12 = o4;
  return _e12;
}

void main1() {
  Mat4x3_ t_PosMtx = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
  float2 t_TexSpaceCoord = float2(0.0f, 0.0f);
  const float _e15 = a_PosMtxIdx1;
  const Mat4x3_ _e18 = tint_symbol_5(global2, (48u * uint(int(_e15))));
  t_PosMtx = _e18;
  const Mat4x3_ _e23 = t_PosMtx;
  const Mat4x4_ _e24 = _Mat4x4_1(_e23);
  const float3 _e25 = a_Position1;
  const Mat4x3_ _e29 = t_PosMtx;
  const Mat4x4_ _e30 = _Mat4x4_1(_e29);
  const float3 _e31 = a_Position1;
  const float4 _e34 = Mul(_e30, float4(_e31, 1.0f));
  const Mat4x4_ _e35 = tint_symbol_7(global, 0u);
  const Mat4x3_ _e37 = t_PosMtx;
  const Mat4x4_ _e38 = _Mat4x4_1(_e37);
  const float3 _e39 = a_Position1;
  const Mat4x3_ _e43 = t_PosMtx;
  const Mat4x4_ _e44 = _Mat4x4_1(_e43);
  const float3 _e45 = a_Position1;
  const float4 _e48 = Mul(_e44, float4(_e45, 1.0f));
  const float4 _e49 = Mul(_e35, _e48);
  gl_Position = _e49;
  const float4 _e50 = a_Color1;
  v_Color = _e50;
  const int scalar_offset_9 = (32u) / 4;
  const float4 _e52 = asfloat(global1[scalar_offset_9 / 4]);
  if ((_e52.x == 2.0f)) {
    {
      const float3 _e59 = a_Normal1;
      const Mat4x2_ _e64 = tint_symbol_9(global1, (32u * uint(0)));
      const float3 _e65 = a_Normal1;
      const float2 _e68 = Mul2(_e64, float4(_e65, 1.0f));
      v_TexCoord = _e68.xy;
      return;
    }
  } else {
    {
      const float2 _e73 = a_UV1;
      const Mat4x2_ _e79 = tint_symbol_9(global1, (32u * uint(0)));
      const float2 _e80 = a_UV1;
      const float2 _e84 = Mul2(_e79, float4(_e80, 1.0f, 1.0f));
      v_TexCoord = _e84.xy;
      return;
    }
  }
}

struct tint_symbol_1 {
  float3 a_Position : TEXCOORD0;
  float2 a_UV : TEXCOORD1;
  float4 a_Color : TEXCOORD2;
  float3 a_Normal : TEXCOORD3;
  float a_PosMtxIdx : TEXCOORD4;
};
struct tint_symbol_2 {
  float4 v_Color : TEXCOORD0;
  float2 v_TexCoord : TEXCOORD1;
  float4 member : SV_Position;
};

tint_symbol_2 main(tint_symbol_1 tint_symbol) {
  const float3 a_Position = tint_symbol.a_Position;
  const float2 a_UV = tint_symbol.a_UV;
  const float4 a_Color = tint_symbol.a_Color;
  const float3 a_Normal = tint_symbol.a_Normal;
  const float a_PosMtxIdx = tint_symbol.a_PosMtxIdx;
  a_Position1 = a_Position;
  a_UV1 = a_UV;
  a_Color1 = a_Color;
  a_Normal1 = a_Normal;
  a_PosMtxIdx1 = a_PosMtxIdx;
  main1();
  const float4 _e11 = v_Color;
  const float2 _e13 = v_TexCoord;
  const float4 _e15 = gl_Position;
  const VertexOutput tint_symbol_3 = {_e11, _e13, _e15};
  const tint_symbol_2 tint_symbol_13 = {tint_symbol_3.v_Color, tint_symbol_3.v_TexCoord, tint_symbol_3.member};
  return tint_symbol_13;
}
