#include <metal_stdlib>

using namespace metal;

template<typename T, size_t N>
struct tint_array {
    const constant T& operator[](size_t i) const constant { return elements[i]; }
    device T& operator[](size_t i) device { return elements[i]; }
    const device T& operator[](size_t i) const device { return elements[i]; }
    thread T& operator[](size_t i) thread { return elements[i]; }
    const thread T& operator[](size_t i) const thread { return elements[i]; }
    threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
    const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
    T elements[N];
};

struct S {
  /* 0x0000 */ packed_uint3 v;
  /* 0x000c */ tint_array<int8_t, 4> tint_pad;
};

void f(const constant S* const tint_symbol) {
  uint3 v = uint3((*(tint_symbol)).v);
  uint x = (*(tint_symbol)).v[0];
  uint y = (*(tint_symbol)).v[1];
  uint z = (*(tint_symbol)).v[2];
  uint2 xx = uint3((*(tint_symbol)).v).xx;
  uint2 xy = uint3((*(tint_symbol)).v).xy;
  uint2 xz = uint3((*(tint_symbol)).v).xz;
  uint2 yx = uint3((*(tint_symbol)).v).yx;
  uint2 yy = uint3((*(tint_symbol)).v).yy;
  uint2 yz = uint3((*(tint_symbol)).v).yz;
  uint2 zx = uint3((*(tint_symbol)).v).zx;
  uint2 zy = uint3((*(tint_symbol)).v).zy;
  uint2 zz = uint3((*(tint_symbol)).v).zz;
  uint3 xxx = uint3((*(tint_symbol)).v).xxx;
  uint3 xxy = uint3((*(tint_symbol)).v).xxy;
  uint3 xxz = uint3((*(tint_symbol)).v).xxz;
  uint3 xyx = uint3((*(tint_symbol)).v).xyx;
  uint3 xyy = uint3((*(tint_symbol)).v).xyy;
  uint3 xyz = uint3((*(tint_symbol)).v).xyz;
  uint3 xzx = uint3((*(tint_symbol)).v).xzx;
  uint3 xzy = uint3((*(tint_symbol)).v).xzy;
  uint3 xzz = uint3((*(tint_symbol)).v).xzz;
  uint3 yxx = uint3((*(tint_symbol)).v).yxx;
  uint3 yxy = uint3((*(tint_symbol)).v).yxy;
  uint3 yxz = uint3((*(tint_symbol)).v).yxz;
  uint3 yyx = uint3((*(tint_symbol)).v).yyx;
  uint3 yyy = uint3((*(tint_symbol)).v).yyy;
  uint3 yyz = uint3((*(tint_symbol)).v).yyz;
  uint3 yzx = uint3((*(tint_symbol)).v).yzx;
  uint3 yzy = uint3((*(tint_symbol)).v).yzy;
  uint3 yzz = uint3((*(tint_symbol)).v).yzz;
  uint3 zxx = uint3((*(tint_symbol)).v).zxx;
  uint3 zxy = uint3((*(tint_symbol)).v).zxy;
  uint3 zxz = uint3((*(tint_symbol)).v).zxz;
  uint3 zyx = uint3((*(tint_symbol)).v).zyx;
  uint3 zyy = uint3((*(tint_symbol)).v).zyy;
  uint3 zyz = uint3((*(tint_symbol)).v).zyz;
  uint3 zzx = uint3((*(tint_symbol)).v).zzx;
  uint3 zzy = uint3((*(tint_symbol)).v).zzy;
  uint3 zzz = uint3((*(tint_symbol)).v).zzz;
  uint4 xxxx = uint3((*(tint_symbol)).v).xxxx;
  uint4 xxxy = uint3((*(tint_symbol)).v).xxxy;
  uint4 xxxz = uint3((*(tint_symbol)).v).xxxz;
  uint4 xxyx = uint3((*(tint_symbol)).v).xxyx;
  uint4 xxyy = uint3((*(tint_symbol)).v).xxyy;
  uint4 xxyz = uint3((*(tint_symbol)).v).xxyz;
  uint4 xxzx = uint3((*(tint_symbol)).v).xxzx;
  uint4 xxzy = uint3((*(tint_symbol)).v).xxzy;
  uint4 xxzz = uint3((*(tint_symbol)).v).xxzz;
  uint4 xyxx = uint3((*(tint_symbol)).v).xyxx;
  uint4 xyxy = uint3((*(tint_symbol)).v).xyxy;
  uint4 xyxz = uint3((*(tint_symbol)).v).xyxz;
  uint4 xyyx = uint3((*(tint_symbol)).v).xyyx;
  uint4 xyyy = uint3((*(tint_symbol)).v).xyyy;
  uint4 xyyz = uint3((*(tint_symbol)).v).xyyz;
  uint4 xyzx = uint3((*(tint_symbol)).v).xyzx;
  uint4 xyzy = uint3((*(tint_symbol)).v).xyzy;
  uint4 xyzz = uint3((*(tint_symbol)).v).xyzz;
  uint4 xzxx = uint3((*(tint_symbol)).v).xzxx;
  uint4 xzxy = uint3((*(tint_symbol)).v).xzxy;
  uint4 xzxz = uint3((*(tint_symbol)).v).xzxz;
  uint4 xzyx = uint3((*(tint_symbol)).v).xzyx;
  uint4 xzyy = uint3((*(tint_symbol)).v).xzyy;
  uint4 xzyz = uint3((*(tint_symbol)).v).xzyz;
  uint4 xzzx = uint3((*(tint_symbol)).v).xzzx;
  uint4 xzzy = uint3((*(tint_symbol)).v).xzzy;
  uint4 xzzz = uint3((*(tint_symbol)).v).xzzz;
  uint4 yxxx = uint3((*(tint_symbol)).v).yxxx;
  uint4 yxxy = uint3((*(tint_symbol)).v).yxxy;
  uint4 yxxz = uint3((*(tint_symbol)).v).yxxz;
  uint4 yxyx = uint3((*(tint_symbol)).v).yxyx;
  uint4 yxyy = uint3((*(tint_symbol)).v).yxyy;
  uint4 yxyz = uint3((*(tint_symbol)).v).yxyz;
  uint4 yxzx = uint3((*(tint_symbol)).v).yxzx;
  uint4 yxzy = uint3((*(tint_symbol)).v).yxzy;
  uint4 yxzz = uint3((*(tint_symbol)).v).yxzz;
  uint4 yyxx = uint3((*(tint_symbol)).v).yyxx;
  uint4 yyxy = uint3((*(tint_symbol)).v).yyxy;
  uint4 yyxz = uint3((*(tint_symbol)).v).yyxz;
  uint4 yyyx = uint3((*(tint_symbol)).v).yyyx;
  uint4 yyyy = uint3((*(tint_symbol)).v).yyyy;
  uint4 yyyz = uint3((*(tint_symbol)).v).yyyz;
  uint4 yyzx = uint3((*(tint_symbol)).v).yyzx;
  uint4 yyzy = uint3((*(tint_symbol)).v).yyzy;
  uint4 yyzz = uint3((*(tint_symbol)).v).yyzz;
  uint4 yzxx = uint3((*(tint_symbol)).v).yzxx;
  uint4 yzxy = uint3((*(tint_symbol)).v).yzxy;
  uint4 yzxz = uint3((*(tint_symbol)).v).yzxz;
  uint4 yzyx = uint3((*(tint_symbol)).v).yzyx;
  uint4 yzyy = uint3((*(tint_symbol)).v).yzyy;
  uint4 yzyz = uint3((*(tint_symbol)).v).yzyz;
  uint4 yzzx = uint3((*(tint_symbol)).v).yzzx;
  uint4 yzzy = uint3((*(tint_symbol)).v).yzzy;
  uint4 yzzz = uint3((*(tint_symbol)).v).yzzz;
  uint4 zxxx = uint3((*(tint_symbol)).v).zxxx;
  uint4 zxxy = uint3((*(tint_symbol)).v).zxxy;
  uint4 zxxz = uint3((*(tint_symbol)).v).zxxz;
  uint4 zxyx = uint3((*(tint_symbol)).v).zxyx;
  uint4 zxyy = uint3((*(tint_symbol)).v).zxyy;
  uint4 zxyz = uint3((*(tint_symbol)).v).zxyz;
  uint4 zxzx = uint3((*(tint_symbol)).v).zxzx;
  uint4 zxzy = uint3((*(tint_symbol)).v).zxzy;
  uint4 zxzz = uint3((*(tint_symbol)).v).zxzz;
  uint4 zyxx = uint3((*(tint_symbol)).v).zyxx;
  uint4 zyxy = uint3((*(tint_symbol)).v).zyxy;
  uint4 zyxz = uint3((*(tint_symbol)).v).zyxz;
  uint4 zyyx = uint3((*(tint_symbol)).v).zyyx;
  uint4 zyyy = uint3((*(tint_symbol)).v).zyyy;
  uint4 zyyz = uint3((*(tint_symbol)).v).zyyz;
  uint4 zyzx = uint3((*(tint_symbol)).v).zyzx;
  uint4 zyzy = uint3((*(tint_symbol)).v).zyzy;
  uint4 zyzz = uint3((*(tint_symbol)).v).zyzz;
  uint4 zzxx = uint3((*(tint_symbol)).v).zzxx;
  uint4 zzxy = uint3((*(tint_symbol)).v).zzxy;
  uint4 zzxz = uint3((*(tint_symbol)).v).zzxz;
  uint4 zzyx = uint3((*(tint_symbol)).v).zzyx;
  uint4 zzyy = uint3((*(tint_symbol)).v).zzyy;
  uint4 zzyz = uint3((*(tint_symbol)).v).zzyz;
  uint4 zzzx = uint3((*(tint_symbol)).v).zzzx;
  uint4 zzzy = uint3((*(tint_symbol)).v).zzzy;
  uint4 zzzz = uint3((*(tint_symbol)).v).zzzz;
}

