#include <metal_stdlib>
using namespace metal;
struct VertexOutput {
  float4 pos;
};
struct vertex_main_outputs {
  float4 VertexOutput_pos [[position]];
};

void asinh_16b543() {
  float2 res = float2(0.88137358427047729492f);
}
fragment void fragment_main() {
  asinh_16b543();
}
kernel void compute_main() {
  asinh_16b543();
}
VertexOutput vertex_main_inner() {
  VertexOutput out = {};
  out.pos = float4(0.0f);
  asinh_16b543();
  return out;
}
vertex vertex_main_outputs vertex_main() {
  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
}
