#version 100

#extension GL_OES_standard_derivatives : require
precision mediump float;
precision mediump sampler2D;
uniform sampler2D uTextureSampler_0_Stage0;
varying mediump vec4 vinColor_Stage0;
varying highp vec2 vTextureCoords_Stage0;
varying highp float vTexIndex_Stage0;
varying highp vec2 vIntTextureCoords_Stage0;
void main() {
    mediump vec4 outputColor_Stage0;
    mediump vec4 outputCoverage_Stage0;
    {
        outputColor_Stage0 = vinColor_Stage0;
        highp vec2 uv = vTextureCoords_Stage0;
        mediump vec4 texColor;
        {
            texColor = texture2D(uTextureSampler_0_Stage0, uv).wwww;
        }
        mediump float distance = 7.96875 * (texColor.x - 0.50196081399917603);
        mediump float afwidth;
        mediump vec2 dist_grad = vec2(dFdx(distance), -dFdy(distance));
        mediump float dg_len2 = dot(dist_grad, dist_grad);
        if (dg_len2 < 9.9999997473787516e-05) {
            dist_grad = vec2(0.70709997415542603, 0.70709997415542603);
        } else {
            dist_grad = dist_grad * inversesqrt(dg_len2);
        }
        mediump vec2 Jdx = dFdx(vIntTextureCoords_Stage0);
        mediump vec2 Jdy = -dFdy(vIntTextureCoords_Stage0);
        mediump vec2 grad = vec2(dist_grad.x * Jdx.x + dist_grad.y * Jdy.x, dist_grad.x * Jdx.y + dist_grad.y * Jdy.y);
        afwidth = 0.64999997615814209 * length(grad);
        mediump float val = smoothstep(-afwidth, afwidth, distance);
        outputCoverage_Stage0 = vec4(val);
    }
    {
        gl_FragColor = outputColor_Stage0 * outputCoverage_Stage0;
    }
}
