struct Mat4x4_ {
  float4 mx;
  float4 my;
  float4 mz;
  float4 mw;
};
struct Mat4x3_ {
  float4 mx;
  float4 my;
  float4 mz;
};
struct Mat4x2_ {
  float4 mx;
  float4 my;
};
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 = (Mat4x3_)0;
  m1 = m;
  const Mat4x3_ x_e2 = m1;
  const Mat4x3_ x_e5 = m1;
  const Mat4x3_ x_e8 = m1;
  return float3(x_e2.mx.x, x_e5.my.x, x_e8.mz.x);
}

float3 Mat4x3GetCol1_(Mat4x3_ m2) {
  Mat4x3_ m3 = (Mat4x3_)0;
  m3 = m2;
  const Mat4x3_ x_e2 = m3;
  const Mat4x3_ x_e5 = m3;
  const Mat4x3_ x_e8 = m3;
  return float3(x_e2.mx.y, x_e5.my.y, x_e8.mz.y);
}

float3 Mat4x3GetCol2_(Mat4x3_ m4) {
  Mat4x3_ m5 = (Mat4x3_)0;
  m5 = m4;
  const Mat4x3_ x_e2 = m5;
  const Mat4x3_ x_e5 = m5;
  const Mat4x3_ x_e8 = m5;
  return float3(x_e2.mx.z, x_e5.my.z, x_e8.mz.z);
}

float3 Mat4x3GetCol3_(Mat4x3_ m6) {
  Mat4x3_ m7 = (Mat4x3_)0;
  m7 = m6;
  const Mat4x3_ x_e2 = m7;
  const Mat4x3_ x_e5 = m7;
  const Mat4x3_ x_e8 = m7;
  return float3(x_e2.mx.w, x_e5.my.w, x_e8.mz.w);
}

float4 Mul(Mat4x4_ m8, float4 v) {
  Mat4x4_ m9 = (Mat4x4_)0;
  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  m9 = m8;
  v1 = v;
  const Mat4x4_ x_e4 = m9;
  const float4 x_e6 = v1;
  const Mat4x4_ x_e8 = m9;
  const float4 x_e10 = v1;
  const Mat4x4_ x_e12 = m9;
  const float4 x_e14 = v1;
  const Mat4x4_ x_e16 = m9;
  const float4 x_e18 = v1;
  return float4(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14), dot(x_e16.mw, x_e18));
}

float3 Mul1(Mat4x3_ m10, float4 v2) {
  Mat4x3_ m11 = (Mat4x3_)0;
  float4 v3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  m11 = m10;
  v3 = v2;
  const Mat4x3_ x_e4 = m11;
  const float4 x_e6 = v3;
  const Mat4x3_ x_e8 = m11;
  const float4 x_e10 = v3;
  const Mat4x3_ x_e12 = m11;
  const float4 x_e14 = v3;
  return float3(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14));
}

float2 Mul2(Mat4x2_ m12, float4 v4) {
  Mat4x2_ m13 = (Mat4x2_)0;
  float4 v5 = float4(0.0f, 0.0f, 0.0f, 0.0f);
  m13 = m12;
  v5 = v4;
  const Mat4x2_ x_e4 = m13;
  const float4 x_e6 = v5;
  const Mat4x2_ x_e8 = m13;
  const float4 x_e10 = v5;
  return float2(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10));
}

float4 Mul3(float3 v6, Mat4x3_ m14) {
  float3 v7 = float3(0.0f, 0.0f, 0.0f);
  Mat4x3_ m15 = (Mat4x3_)0;
  v7 = v6;
  m15 = m14;
  const Mat4x3_ x_e5 = m15;
  const float3 x_e6 = Mat4x3GetCol0_(x_e5);
  const float3 x_e7 = v7;
  const Mat4x3_ x_e10 = m15;
  const float3 x_e11 = Mat4x3GetCol1_(x_e10);
  const float3 x_e12 = v7;
  const Mat4x3_ x_e15 = m15;
  const float3 x_e16 = Mat4x3GetCol2_(x_e15);
  const float3 x_e17 = v7;
  const Mat4x3_ x_e20 = m15;
  const float3 x_e21 = Mat4x3GetCol3_(x_e20);
  const float3 x_e22 = v7;
  return float4(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, x_e22));
}

Mat4x4_ x_Mat4x4_(float n) {
  float n1 = 0.0f;
  Mat4x4_ o = (Mat4x4_)0;
  n1 = n;
  const float x_e4 = n1;
  o.mx = float4(x_e4, 0.0f, 0.0f, 0.0f);
  const float x_e11 = n1;
  o.my = float4(0.0f, x_e11, 0.0f, 0.0f);
  const float x_e18 = n1;
  o.mz = float4(0.0f, 0.0f, x_e18, 0.0f);
  const float x_e25 = n1;
  o.mw = float4(0.0f, 0.0f, 0.0f, x_e25);
  const Mat4x4_ x_e27 = o;
  return x_e27;
}

Mat4x4_ x_Mat4x4_1(Mat4x3_ m16) {
  Mat4x3_ m17 = (Mat4x3_)0;
  Mat4x4_ o1 = (Mat4x4_)0;
  m17 = m16;
  const Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
  o1 = x_e4;
  const Mat4x3_ x_e7 = m17;
  o1.mx = x_e7.mx;
  const Mat4x3_ x_e10 = m17;
  o1.my = x_e10.my;
  const Mat4x3_ x_e13 = m17;
  o1.mz = x_e13.mz;
  const Mat4x4_ x_e15 = o1;
  return x_e15;
}

Mat4x4_ x_Mat4x4_2(Mat4x2_ m18) {
  Mat4x2_ m19 = (Mat4x2_)0;
  Mat4x4_ o2 = (Mat4x4_)0;
  m19 = m18;
  const Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
  o2 = x_e4;
  const Mat4x2_ x_e7 = m19;
  o2.mx = x_e7.mx;
  const Mat4x2_ x_e10 = m19;
  o2.my = x_e10.my;
  const Mat4x4_ x_e12 = o2;
  return x_e12;
}

Mat4x3_ x_Mat4x3_(float n2) {
  float n3 = 0.0f;
  Mat4x3_ o3 = (Mat4x3_)0;
  n3 = n2;
  const float x_e4 = n3;
  o3.mx = float4(x_e4, 0.0f, 0.0f, 0.0f);
  const float x_e11 = n3;
  o3.my = float4(0.0f, x_e11, 0.0f, 0.0f);
  const float x_e18 = n3;
  o3.mz = float4(0.0f, 0.0f, x_e18, 0.0f);
  const Mat4x3_ x_e21 = o3;
  return x_e21;
}

Mat4x3_ x_Mat4x3_1(Mat4x4_ m20) {
  Mat4x4_ m21 = (Mat4x4_)0;
  Mat4x3_ o4 = (Mat4x3_)0;
  m21 = m20;
  const Mat4x4_ x_e4 = m21;
  o4.mx = x_e4.mx;
  const Mat4x4_ x_e7 = m21;
  o4.my = x_e7.my;
  const Mat4x4_ x_e10 = m21;
  o4.mz = x_e10.mz;
  const Mat4x3_ x_e12 = o4;
  return x_e12;
}

Mat4x3_ tint_symbol_3(uint4 buffer[96], uint offset) {
  const uint scalar_offset = ((offset + 0u)) / 4;
  const uint scalar_offset_1 = ((offset + 16u)) / 4;
  const uint scalar_offset_2 = ((offset + 32u)) / 4;
  const Mat4x3_ tint_symbol_9 = {asfloat(buffer[scalar_offset / 4]), asfloat(buffer[scalar_offset_1 / 4]), asfloat(buffer[scalar_offset_2 / 4])};
  return tint_symbol_9;
}

Mat4x4_ tint_symbol_5(uint4 buffer[4], uint offset) {
  const uint scalar_offset_3 = ((offset + 0u)) / 4;
  const uint scalar_offset_4 = ((offset + 16u)) / 4;
  const uint scalar_offset_5 = ((offset + 32u)) / 4;
  const uint scalar_offset_6 = ((offset + 48u)) / 4;
  const Mat4x4_ tint_symbol_10 = {asfloat(buffer[scalar_offset_3 / 4]), asfloat(buffer[scalar_offset_4 / 4]), asfloat(buffer[scalar_offset_5 / 4]), asfloat(buffer[scalar_offset_6 / 4])};
  return tint_symbol_10;
}

Mat4x2_ tint_symbol_8(uint4 buffer[3], uint offset) {
  const uint scalar_offset_7 = ((offset + 0u)) / 4;
  const uint scalar_offset_8 = ((offset + 16u)) / 4;
  const Mat4x2_ tint_symbol_11 = {asfloat(buffer[scalar_offset_7 / 4]), asfloat(buffer[scalar_offset_8 / 4])};
  return tint_symbol_11;
}

void main1() {
  Mat4x3_ t_PosMtx = (Mat4x3_)0;
  float2 t_TexSpaceCoord = float2(0.0f, 0.0f);
  const float x_e15 = a_PosMtxIdx1;
  const Mat4x3_ x_e18 = tint_symbol_3(global2, (48u * uint(int(x_e15))));
  t_PosMtx = x_e18;
  const Mat4x3_ x_e23 = t_PosMtx;
  const Mat4x4_ x_e24 = x_Mat4x4_1(x_e23);
  const float3 x_e25 = a_Position1;
  const Mat4x3_ x_e29 = t_PosMtx;
  const Mat4x4_ x_e30 = x_Mat4x4_1(x_e29);
  const float3 x_e31 = a_Position1;
  const float4 x_e34 = Mul(x_e30, float4(x_e31, 1.0f));
  const Mat4x4_ x_e35 = tint_symbol_5(global, 0u);
  const Mat4x3_ x_e37 = t_PosMtx;
  const Mat4x4_ x_e38 = x_Mat4x4_1(x_e37);
  const float3 x_e39 = a_Position1;
  const Mat4x3_ x_e43 = t_PosMtx;
  const Mat4x4_ x_e44 = x_Mat4x4_1(x_e43);
  const float3 x_e45 = a_Position1;
  const float4 x_e48 = Mul(x_e44, float4(x_e45, 1.0f));
  const float4 x_e49 = Mul(x_e35, x_e48);
  gl_Position = x_e49;
  const float4 x_e50 = a_Color1;
  v_Color = x_e50;
  const float4 x_e52 = asfloat(global1[2]);
  if ((x_e52.x == 2.0f)) {
    {
      const float3 x_e59 = a_Normal1;
      const Mat4x2_ x_e64 = tint_symbol_8(global1, 0u);
      const float3 x_e65 = a_Normal1;
      const float2 x_e68 = Mul2(x_e64, float4(x_e65, 1.0f));
      v_TexCoord = x_e68.xy;
      return;
    }
  } else {
    {
      const float2 x_e73 = a_UV1;
      const Mat4x2_ x_e79 = tint_symbol_8(global1, 0u);
      const float2 x_e80 = a_UV1;
      const float2 x_e84 = Mul2(x_e79, float4(x_e80, 1.0f, 1.0f));
      v_TexCoord = x_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;
};

VertexOutput main_inner(float3 a_Position, float2 a_UV, float4 a_Color, float3 a_Normal, float 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 x_e11 = v_Color;
  const float2 x_e13 = v_TexCoord;
  const float4 x_e15 = gl_Position;
  const VertexOutput tint_symbol_12 = {x_e11, x_e13, x_e15};
  return tint_symbol_12;
}

tint_symbol_2 main(tint_symbol_1 tint_symbol) {
  const VertexOutput inner_result = main_inner(tint_symbol.a_Position, tint_symbol.a_UV, tint_symbol.a_Color, tint_symbol.a_Normal, tint_symbol.a_PosMtxIdx);
  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
  wrapper_result.v_Color = inner_result.v_Color;
  wrapper_result.v_TexCoord = inner_result.v_TexCoord;
  wrapper_result.member = inner_result.member;
  return wrapper_result;
}
