floooh / sokol-tools

Command line tools for use with sokol headers
MIT License
219 stars 54 forks source link

Fix Jai code generator #138

Closed colinbellino closed 1 month ago

colinbellino commented 1 month ago

I noticed a lot of small issues with the initial PR that merged the code generator for Jai (ie: it doesn't compile), so i though i'd open a PR for the fixed since i've been using a private fork for a while.

The current version in master had invalid syntax so i'm assuming the author used the syntax of Odin (or another) and forgot to replace some of the things. I compiled the SDF.glsl file from the samples to show the differences in output to save some time.

Most issues were , instead of ; and struct padding issues and i also removed the #scope_module since that's the default.

I've a comment to explain why i don't think importing sokol_gfx is the right call at the moment, let me know what you think about this.

I also have generated the bindings for sokol, if that's something you'd be interested in let me.

Current:

/*
    #version:1# (machine generated, don't edit!)

    Generated by sokol-shdc (https://github.com/floooh/sokol-tools)

    Cmdline:
        sokol-shdc -i sdf.glsl -o sdf_current.jai -l glsl410 -f sokol_jai

    Overview:
    =========
    Shader program: 'sdf':
        Get shader desc: sdf_shader_desc(sg_query_backend())
        Vertex shader: vs
            Attributes:
                ATTR_vs_position => 0
            Uniform block 'vs_params':
                Jai struct: Vs_Params
                Bind slot: SLOT_vs_params => 0
        Fragment shader: fs
*/
ATTR_vs_position :: 0;
SLOT_vs_params :: 0;
Vs_Params :: struct {
    using _: struct {
        aspect: float32,
        time: float32,
        _: [8]u8,
    } #no_padding #align 16,
}
/*
    #version 410

    uniform vec4 vs_params[1];
    layout(location = 0) in vec4 position;
    layout(location = 0) out vec2 pos;
    layout(location = 1) out vec3 eye;
    layout(location = 4) out vec3 fwd;
    layout(location = 3) out vec3 right;
    layout(location = 2) out vec3 up;

    vec3 eye_pos(float time, vec3 center)
    {
        return center + vec3(sin(time * 0.0500000007450580596923828125) * 3.0, sin(time * 0.100000001490116119384765625) * 2.0, cos(time * 0.0500000007450580596923828125) * 3.0);
    }

    void lookat(vec3 eye_1, vec3 center, vec3 up_1, inout vec3 out_fwd, inout vec3 out_right, out vec3 out_up)
    {
        out_fwd = normalize(center - eye_1);
        out_right = normalize(cross(out_fwd, up_1));
        out_up = cross(out_right, out_fwd);
    }

    void main()
    {
        gl_Position = position;
        pos.x = position.x * vs_params[0].x;
        pos.y = position.y;
        float param = vs_params[0].y * 5.0;
        vec3 param_1 = vec3(0.0);
        eye = eye_pos(param, param_1);
        vec3 param_2 = eye;
        vec3 param_3 = vec3(0.0);
        vec3 param_4 = vec3(0.0, 1.0, 0.0);
        vec3 param_5;
        vec3 param_6;
        vec3 param_7;
        lookat(param_2, param_3, param_4, param_5, param_6, param_7);
        fwd = param_5;
        right = param_6;
        up = param_7;
    }

*/
vs_source_glsl410 : [1205] u8 : .[
    0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x75,0x6e,
    0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61,
    0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,
    0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,
    0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,
    0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,
    0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,
    0x73,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,
    0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x33,
    0x20,0x65,0x79,0x65,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,
    0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x34,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,
    0x65,0x63,0x33,0x20,0x66,0x77,0x64,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,
    0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x33,0x29,0x20,0x6f,0x75,
    0x74,0x20,0x76,0x65,0x63,0x33,0x20,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x6c,0x61,
    0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,
    0x32,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x33,0x20,0x75,0x70,0x3b,0x0a,
    0x0a,0x76,0x65,0x63,0x33,0x20,0x65,0x79,0x65,0x5f,0x70,0x6f,0x73,0x28,0x66,0x6c,
    0x6f,0x61,0x74,0x20,0x74,0x69,0x6d,0x65,0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x63,
    0x65,0x6e,0x74,0x65,0x72,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,
    0x75,0x72,0x6e,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x20,0x2b,0x20,0x76,0x65,0x63,
    0x33,0x28,0x73,0x69,0x6e,0x28,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x30,0x2e,0x30,
    0x35,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x37,0x34,0x35,0x30,0x35,0x38,0x30,0x35,
    0x39,0x36,0x39,0x32,0x33,0x38,0x32,0x38,0x31,0x32,0x35,0x29,0x20,0x2a,0x20,0x33,
    0x2e,0x30,0x2c,0x20,0x73,0x69,0x6e,0x28,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x30,
    0x2e,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,
    0x31,0x31,0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x29,0x20,0x2a,0x20,
    0x32,0x2e,0x30,0x2c,0x20,0x63,0x6f,0x73,0x28,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,
    0x30,0x2e,0x30,0x35,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x37,0x34,0x35,0x30,0x35,
    0x38,0x30,0x35,0x39,0x36,0x39,0x32,0x33,0x38,0x32,0x38,0x31,0x32,0x35,0x29,0x20,
    0x2a,0x20,0x33,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,
    0x6c,0x6f,0x6f,0x6b,0x61,0x74,0x28,0x76,0x65,0x63,0x33,0x20,0x65,0x79,0x65,0x5f,
    0x31,0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x20,
    0x76,0x65,0x63,0x33,0x20,0x75,0x70,0x5f,0x31,0x2c,0x20,0x69,0x6e,0x6f,0x75,0x74,
    0x20,0x76,0x65,0x63,0x33,0x20,0x6f,0x75,0x74,0x5f,0x66,0x77,0x64,0x2c,0x20,0x69,
    0x6e,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x33,0x20,0x6f,0x75,0x74,0x5f,0x72,0x69,
    0x67,0x68,0x74,0x2c,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x33,0x20,0x6f,0x75,
    0x74,0x5f,0x75,0x70,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x5f,
    0x66,0x77,0x64,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,
    0x63,0x65,0x6e,0x74,0x65,0x72,0x20,0x2d,0x20,0x65,0x79,0x65,0x5f,0x31,0x29,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x5f,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,
    0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x63,0x72,0x6f,0x73,0x73,
    0x28,0x6f,0x75,0x74,0x5f,0x66,0x77,0x64,0x2c,0x20,0x75,0x70,0x5f,0x31,0x29,0x29,
    0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x5f,0x75,0x70,0x20,0x3d,0x20,0x63,
    0x72,0x6f,0x73,0x73,0x28,0x6f,0x75,0x74,0x5f,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,
    0x6f,0x75,0x74,0x5f,0x66,0x77,0x64,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x76,0x6f,0x69,
    0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,
    0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x70,0x6f,0x73,
    0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x70,0x6f,0x73,0x2e,0x78,
    0x20,0x3d,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x78,0x20,0x2a,0x20,
    0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2e,0x78,0x3b,0x0a,
    0x20,0x20,0x20,0x20,0x70,0x6f,0x73,0x2e,0x79,0x20,0x3d,0x20,0x70,0x6f,0x73,0x69,
    0x74,0x69,0x6f,0x6e,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,
    0x74,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,
    0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2e,0x79,0x20,0x2a,0x20,0x35,0x2e,0x30,0x3b,0x0a,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,
    0x20,0x3d,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,
    0x20,0x20,0x65,0x79,0x65,0x20,0x3d,0x20,0x65,0x79,0x65,0x5f,0x70,0x6f,0x73,0x28,
    0x70,0x61,0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x29,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,
    0x32,0x20,0x3d,0x20,0x65,0x79,0x65,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,
    0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,0x20,0x3d,0x20,0x76,0x65,0x63,0x33,
    0x28,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,
    0x70,0x61,0x72,0x61,0x6d,0x5f,0x34,0x20,0x3d,0x20,0x76,0x65,0x63,0x33,0x28,0x30,
    0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x35,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,
    0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,
    0x6d,0x5f,0x37,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6c,0x6f,0x6f,0x6b,0x61,0x74,0x28,
    0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,
    0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x34,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,
    0x5f,0x35,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x36,0x2c,0x20,0x70,0x61,0x72,
    0x61,0x6d,0x5f,0x37,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x77,0x64,0x20,0x3d,
    0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x35,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x69,
    0x67,0x68,0x74,0x20,0x3d,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x36,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x75,0x70,0x20,0x3d,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x37,0x3b,
    0x0a,0x7d,0x0a,0x0a,0x00,
];
/*
    #version 410

    layout(location = 1) in vec3 eye;
    layout(location = 4) in vec3 fwd;
    layout(location = 3) in vec3 right;
    layout(location = 0) in vec2 pos;
    layout(location = 2) in vec3 up;
    layout(location = 0) out vec4 frag_color;

    float sd_sphere(vec3 p, float s)
    {
        return length(p) - s;
    }

    float sd_mandelbulb(vec3 p, inout vec4 res_color)
    {
        vec3 w = p;
        float _49 = dot(p, p);
        float m = _49;
        vec4 trap = vec4(abs(p), _49);
        float dz = 1.0;
        for (int i = 0; i < 4; i++)
        {
            float _76 = m * m;
            dz = fma(8.0 * sqrt(((_76 * _76) * _76) * m), dz, 1.0);
            vec3 _653 = w;
            float _100 = _653.x * _653.x;
            float _104 = _100 * _100;
            float _112 = _653.y * _653.y;
            float _124 = _653.z * _653.z;
            float _128 = _124 * _124;
            float _132 = fma(_653.x, _653.x, _124);
            float _147 = inversesqrt((((((_132 * _132) * _132) * _132) * _132) * _132) * _132);
            float _170 = fma(2.0 * _124, _100, fma(_100 * (-6.0), _112, fma(_112 * (-6.0), _124, fma(_124, _124, fma(_100, _100, _112 * _112)))));
            float _176 = fma(_653.z, _653.z, fma(_653.x, _653.x, -_112));
            vec3 _670 = vec3(fma(((((((64.0 * _653.x) * _653.y) * _653.z) * fma(_653.x, _653.x, -_124)) * _176) * fma(_124, _124, fma(_100, _100, -((6.0 * _100) * _124)))) * _170, _147, p.x), fma(_170, _170, fma((((-16.0) * _112) * _132) * _176, _176, p.y)), fma(((((-8.0) * _653.y) * _176) * fma(_128, _128, fma(-((28.0 * _100) * _124), _128, fma(70.0 * _104, _128, fma(_104, _104, -(((28.0 * _104) * _100) * _124)))))) * _170, _147, p.z));
            w = _670;
            trap = min(trap, vec4(abs(_670), m));
            float _277 = dot(_670, _670);
            m = _277;
            if (_277 > 256.0)
            {
                break;
            }
        }
        res_color = vec4(m, trap.yzw);
        return ((0.25 * log(m)) * sqrt(m)) / dz;
    }

    float d_scene(vec3 p, out vec4 res_color)
    {
        vec3 param = p;
        float param_1 = 1.10000002384185791015625;
        float _310 = sd_sphere(param, param_1);
        float d = _310;
        if (_310 < 0.100000001490116119384765625)
        {
            vec3 param_2 = p;
            vec4 param_3;
            float _319 = sd_mandelbulb(param_2, param_3);
            res_color = param_3;
            d = _319;
        }
        else
        {
            res_color = vec4(0.0);
        }
        return d;
    }

    vec3 surface_normal(vec3 p, float dp)
    {
        vec3 param = p + vec3(0.001000000047497451305389404296875, 0.0, 0.0);
        vec4 param_1;
        float _335 = d_scene(param, param_1);
        vec3 param_2 = p + vec3(0.0, 0.001000000047497451305389404296875, 0.0);
        vec4 param_3;
        float _345 = d_scene(param_2, param_3);
        vec3 param_4 = p + vec3(0.0, 0.0, 0.001000000047497451305389404296875);
        vec4 param_5;
        float _355 = d_scene(param_4, param_5);
        return normalize(vec3(_335 - dp, _345 - dp, _355 - dp));
    }

    vec3 calc_color(vec3 ro, vec3 rd, float t, vec4 tra)
    {
        vec3 param = ro + (rd * t);
        float param_1 = t;
        vec3 _377 = surface_normal(param, param_1);
        vec3 _384 = normalize(vec3(0.57700002193450927734375, 0.57700002193450927734375, -0.57700002193450927734375) - rd);
        float _391 = clamp(0.0500000007450580596923828125 * log(tra.x), 0.0, 1.0);
        float _401 = clamp(dot(vec3(0.57700002193450927734375, 0.57700002193450927734375, -0.57700002193450927734375), _377), 0.0, 1.0);
        return sqrt(pow(mix(mix(mix(vec3(0.00999999977648258209228515625), vec3(0.100000001490116119384765625, 0.20000000298023223876953125, 0.300000011920928955078125), vec3(clamp(tra.y, 0.0, 1.0))), vec3(0.0199999995529651641845703125, 0.100000001490116119384765625, 0.300000011920928955078125), vec3(clamp(tra.z * tra.z, 0.0, 1.0))), vec3(0.300000011920928955078125, 0.100000001490116119384765625, 0.0199999995529651641845703125), vec3(clamp(pow(tra.w, 6.0), 0.0, 1.0))) * (((((vec3(10.5, 7.69999980926513671875, 4.900000095367431640625) * _401) + (vec3(1.0, 0.800000011920928955078125, 0.60000002384185791015625) * (clamp(fma(0.5, dot(vec3(-0.7070000171661376953125, 0.0, 0.7070000171661376953125), _377), 0.5), 0.0, 1.0) * _391))) + (vec3(0.1500000059604644775390625, 0.300000011920928955078125, 0.449999988079071044921875) * (fma(0.300000011920928955078125, _377.y, 0.699999988079071044921875) * fma(0.800000011920928955078125, _391, 0.20000000298023223876953125)))) + (vec3(0.875, 0.75, 0.625) * fma(0.949999988079071044921875, _391, 0.0500000007450580596923828125))) + vec3((4.0 * clamp(1.0 + dot(rd, _377), 0.0, 1.0)) * _391)), vec3(0.699999988079071044921875, 0.89999997615814208984375, 1.0)) + vec3(((pow(clamp(dot(_377, _384), 0.0, 1.0), 32.0) * _401) * fma(0.959999978542327880859375, pow(clamp(1.0 - dot(_384, vec3(0.57700002193450927734375, 0.57700002193450927734375, -0.57700002193450927734375)), 0.0, 1.0), 5.0), 0.039999999105930328369140625)) * 15.0));
    }

    void main()
    {
        vec3 _561 = ((eye + (fwd * 1.7999999523162841796875)) + (right * pos.x)) + (up * pos.y);
        vec3 _566 = normalize(_561 - eye);
        vec4 color = vec4(0.100000001490116119384765625, 0.20000000298023223876953125, 0.300000011920928955078125, 1.0);
        float t = 0.0;
        vec4 param_1;
        for (int i = 0; i < 96; i++)
        {
            vec3 _584 = _561 + (_566 * t);
            vec3 param = _584;
            float _590 = d_scene(param, param_1);
            if (_590 < 0.001000000047497451305389404296875)
            {
                vec3 param_2 = _584;
                vec3 param_3 = _566;
                float param_4 = _590;
                vec4 param_5 = param_1;
                vec3 _604 = calc_color(param_2, param_3, param_4, param_5);
                vec4 _641 = color;
                _641.x = _604.x;
                _641.y = _604.y;
                _641.z = _604.z;
                color = _641;
                break;
            }
            else
            {
                vec4 _618 = color;
                vec3 _620 = _618.xyz + (vec3(0.0030000000260770320892333984375, 0.001000000047497451305389404296875, 0.0) * float(i));
                vec4 _648 = _618;
                _648.x = _620.x;
                _648.y = _620.y;
                _648.z = _620.z;
                color = _648;
            }
            if (t > 3.0)
            {
                break;
            }
            t += _590;
        }
        frag_color = color;
    }

*/
fs_source_glsl410 : [6135] u8 : .[
    0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x6c,0x61,
    0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,
    0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x65,0x79,0x65,0x3b,0x0a,
    0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,
    0x3d,0x20,0x34,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x66,0x77,0x64,
    0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,
    0x6e,0x20,0x3d,0x20,0x33,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x72,
    0x69,0x67,0x68,0x74,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,
    0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,
    0x63,0x32,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,
    0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,
    0x76,0x65,0x63,0x33,0x20,0x75,0x70,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,
    0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,
    0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,
    0x72,0x3b,0x0a,0x0a,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x64,0x5f,0x73,0x70,0x68,
    0x65,0x72,0x65,0x28,0x76,0x65,0x63,0x33,0x20,0x70,0x2c,0x20,0x66,0x6c,0x6f,0x61,
    0x74,0x20,0x73,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,
    0x6e,0x20,0x6c,0x65,0x6e,0x67,0x74,0x68,0x28,0x70,0x29,0x20,0x2d,0x20,0x73,0x3b,
    0x0a,0x7d,0x0a,0x0a,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x64,0x5f,0x6d,0x61,0x6e,
    0x64,0x65,0x6c,0x62,0x75,0x6c,0x62,0x28,0x76,0x65,0x63,0x33,0x20,0x70,0x2c,0x20,
    0x69,0x6e,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x72,0x65,0x73,0x5f,0x63,
    0x6f,0x6c,0x6f,0x72,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,
    0x20,0x77,0x20,0x3d,0x20,0x70,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,
    0x74,0x20,0x5f,0x34,0x39,0x20,0x3d,0x20,0x64,0x6f,0x74,0x28,0x70,0x2c,0x20,0x70,
    0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x6d,0x20,0x3d,
    0x20,0x5f,0x34,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x74,
    0x72,0x61,0x70,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x61,0x62,0x73,0x28,0x70,
    0x29,0x2c,0x20,0x5f,0x34,0x39,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,
    0x61,0x74,0x20,0x64,0x7a,0x20,0x3d,0x20,0x31,0x2e,0x30,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,
    0x20,0x69,0x20,0x3c,0x20,0x34,0x3b,0x20,0x69,0x2b,0x2b,0x29,0x0a,0x20,0x20,0x20,
    0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,
    0x20,0x5f,0x37,0x36,0x20,0x3d,0x20,0x6d,0x20,0x2a,0x20,0x6d,0x3b,0x0a,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x7a,0x20,0x3d,0x20,0x66,0x6d,0x61,0x28,0x38,
    0x2e,0x30,0x20,0x2a,0x20,0x73,0x71,0x72,0x74,0x28,0x28,0x28,0x5f,0x37,0x36,0x20,
    0x2a,0x20,0x5f,0x37,0x36,0x29,0x20,0x2a,0x20,0x5f,0x37,0x36,0x29,0x20,0x2a,0x20,
    0x6d,0x29,0x2c,0x20,0x64,0x7a,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x36,0x35,0x33,0x20,
    0x3d,0x20,0x77,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,
    0x61,0x74,0x20,0x5f,0x31,0x30,0x30,0x20,0x3d,0x20,0x5f,0x36,0x35,0x33,0x2e,0x78,
    0x20,0x2a,0x20,0x5f,0x36,0x35,0x33,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x30,0x34,0x20,0x3d,0x20,
    0x5f,0x31,0x30,0x30,0x20,0x2a,0x20,0x5f,0x31,0x30,0x30,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x31,0x32,0x20,
    0x3d,0x20,0x5f,0x36,0x35,0x33,0x2e,0x79,0x20,0x2a,0x20,0x5f,0x36,0x35,0x33,0x2e,
    0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,
    0x20,0x5f,0x31,0x32,0x34,0x20,0x3d,0x20,0x5f,0x36,0x35,0x33,0x2e,0x7a,0x20,0x2a,
    0x20,0x5f,0x36,0x35,0x33,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x32,0x38,0x20,0x3d,0x20,0x5f,0x31,
    0x32,0x34,0x20,0x2a,0x20,0x5f,0x31,0x32,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x33,0x32,0x20,0x3d,0x20,
    0x66,0x6d,0x61,0x28,0x5f,0x36,0x35,0x33,0x2e,0x78,0x2c,0x20,0x5f,0x36,0x35,0x33,
    0x2e,0x78,0x2c,0x20,0x5f,0x31,0x32,0x34,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x34,0x37,0x20,0x3d,0x20,
    0x69,0x6e,0x76,0x65,0x72,0x73,0x65,0x73,0x71,0x72,0x74,0x28,0x28,0x28,0x28,0x28,
    0x28,0x5f,0x31,0x33,0x32,0x20,0x2a,0x20,0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,
    0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,
    0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,
    0x5f,0x31,0x33,0x32,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,
    0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x37,0x30,0x20,0x3d,0x20,0x66,0x6d,0x61,0x28,
    0x32,0x2e,0x30,0x20,0x2a,0x20,0x5f,0x31,0x32,0x34,0x2c,0x20,0x5f,0x31,0x30,0x30,
    0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,0x30,0x30,0x20,0x2a,0x20,0x28,0x2d,0x36,
    0x2e,0x30,0x29,0x2c,0x20,0x5f,0x31,0x31,0x32,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,
    0x31,0x31,0x32,0x20,0x2a,0x20,0x28,0x2d,0x36,0x2e,0x30,0x29,0x2c,0x20,0x5f,0x31,
    0x32,0x34,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,0x32,0x34,0x2c,0x20,0x5f,0x31,
    0x32,0x34,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,0x30,0x30,0x2c,0x20,0x5f,0x31,
    0x30,0x30,0x2c,0x20,0x5f,0x31,0x31,0x32,0x20,0x2a,0x20,0x5f,0x31,0x31,0x32,0x29,
    0x29,0x29,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,
    0x6f,0x61,0x74,0x20,0x5f,0x31,0x37,0x36,0x20,0x3d,0x20,0x66,0x6d,0x61,0x28,0x5f,
    0x36,0x35,0x33,0x2e,0x7a,0x2c,0x20,0x5f,0x36,0x35,0x33,0x2e,0x7a,0x2c,0x20,0x66,
    0x6d,0x61,0x28,0x5f,0x36,0x35,0x33,0x2e,0x78,0x2c,0x20,0x5f,0x36,0x35,0x33,0x2e,
    0x78,0x2c,0x20,0x2d,0x5f,0x31,0x31,0x32,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x36,0x37,0x30,0x20,0x3d,0x20,
    0x76,0x65,0x63,0x33,0x28,0x66,0x6d,0x61,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x36,
    0x34,0x2e,0x30,0x20,0x2a,0x20,0x5f,0x36,0x35,0x33,0x2e,0x78,0x29,0x20,0x2a,0x20,
    0x5f,0x36,0x35,0x33,0x2e,0x79,0x29,0x20,0x2a,0x20,0x5f,0x36,0x35,0x33,0x2e,0x7a,
    0x29,0x20,0x2a,0x20,0x66,0x6d,0x61,0x28,0x5f,0x36,0x35,0x33,0x2e,0x78,0x2c,0x20,
    0x5f,0x36,0x35,0x33,0x2e,0x78,0x2c,0x20,0x2d,0x5f,0x31,0x32,0x34,0x29,0x29,0x20,
    0x2a,0x20,0x5f,0x31,0x37,0x36,0x29,0x20,0x2a,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,
    0x32,0x34,0x2c,0x20,0x5f,0x31,0x32,0x34,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,
    0x30,0x30,0x2c,0x20,0x5f,0x31,0x30,0x30,0x2c,0x20,0x2d,0x28,0x28,0x36,0x2e,0x30,
    0x20,0x2a,0x20,0x5f,0x31,0x30,0x30,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x34,0x29,
    0x29,0x29,0x29,0x20,0x2a,0x20,0x5f,0x31,0x37,0x30,0x2c,0x20,0x5f,0x31,0x34,0x37,
    0x2c,0x20,0x70,0x2e,0x78,0x29,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,0x37,0x30,
    0x2c,0x20,0x5f,0x31,0x37,0x30,0x2c,0x20,0x66,0x6d,0x61,0x28,0x28,0x28,0x28,0x2d,
    0x31,0x36,0x2e,0x30,0x29,0x20,0x2a,0x20,0x5f,0x31,0x31,0x32,0x29,0x20,0x2a,0x20,
    0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x37,0x36,0x2c,0x20,0x5f,0x31,
    0x37,0x36,0x2c,0x20,0x70,0x2e,0x79,0x29,0x29,0x2c,0x20,0x66,0x6d,0x61,0x28,0x28,
    0x28,0x28,0x28,0x2d,0x38,0x2e,0x30,0x29,0x20,0x2a,0x20,0x5f,0x36,0x35,0x33,0x2e,
    0x79,0x29,0x20,0x2a,0x20,0x5f,0x31,0x37,0x36,0x29,0x20,0x2a,0x20,0x66,0x6d,0x61,
    0x28,0x5f,0x31,0x32,0x38,0x2c,0x20,0x5f,0x31,0x32,0x38,0x2c,0x20,0x66,0x6d,0x61,
    0x28,0x2d,0x28,0x28,0x32,0x38,0x2e,0x30,0x20,0x2a,0x20,0x5f,0x31,0x30,0x30,0x29,
    0x20,0x2a,0x20,0x5f,0x31,0x32,0x34,0x29,0x2c,0x20,0x5f,0x31,0x32,0x38,0x2c,0x20,
    0x66,0x6d,0x61,0x28,0x37,0x30,0x2e,0x30,0x20,0x2a,0x20,0x5f,0x31,0x30,0x34,0x2c,
    0x20,0x5f,0x31,0x32,0x38,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,0x30,0x34,0x2c,
    0x20,0x5f,0x31,0x30,0x34,0x2c,0x20,0x2d,0x28,0x28,0x28,0x32,0x38,0x2e,0x30,0x20,
    0x2a,0x20,0x5f,0x31,0x30,0x34,0x29,0x20,0x2a,0x20,0x5f,0x31,0x30,0x30,0x29,0x20,
    0x2a,0x20,0x5f,0x31,0x32,0x34,0x29,0x29,0x29,0x29,0x29,0x29,0x20,0x2a,0x20,0x5f,
    0x31,0x37,0x30,0x2c,0x20,0x5f,0x31,0x34,0x37,0x2c,0x20,0x70,0x2e,0x7a,0x29,0x29,
    0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x77,0x20,0x3d,0x20,0x5f,0x36,
    0x37,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x72,0x61,0x70,
    0x20,0x3d,0x20,0x6d,0x69,0x6e,0x28,0x74,0x72,0x61,0x70,0x2c,0x20,0x76,0x65,0x63,
    0x34,0x28,0x61,0x62,0x73,0x28,0x5f,0x36,0x37,0x30,0x29,0x2c,0x20,0x6d,0x29,0x29,
    0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,
    0x5f,0x32,0x37,0x37,0x20,0x3d,0x20,0x64,0x6f,0x74,0x28,0x5f,0x36,0x37,0x30,0x2c,
    0x20,0x5f,0x36,0x37,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x6d,0x20,0x3d,0x20,0x5f,0x32,0x37,0x37,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x32,0x37,0x37,0x20,0x3e,0x20,0x32,0x35,0x36,
    0x2e,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x72,0x65,0x61,0x6b,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,
    0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x73,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,
    0x20,0x76,0x65,0x63,0x34,0x28,0x6d,0x2c,0x20,0x74,0x72,0x61,0x70,0x2e,0x79,0x7a,
    0x77,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x28,
    0x28,0x30,0x2e,0x32,0x35,0x20,0x2a,0x20,0x6c,0x6f,0x67,0x28,0x6d,0x29,0x29,0x20,
    0x2a,0x20,0x73,0x71,0x72,0x74,0x28,0x6d,0x29,0x29,0x20,0x2f,0x20,0x64,0x7a,0x3b,
    0x0a,0x7d,0x0a,0x0a,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x5f,0x73,0x63,0x65,0x6e,
    0x65,0x28,0x76,0x65,0x63,0x33,0x20,0x70,0x2c,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,
    0x63,0x34,0x20,0x72,0x65,0x73,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x29,0x0a,0x7b,0x0a,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,
    0x20,0x70,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x61,
    0x72,0x61,0x6d,0x5f,0x31,0x20,0x3d,0x20,0x31,0x2e,0x31,0x30,0x30,0x30,0x30,0x30,
    0x30,0x32,0x33,0x38,0x34,0x31,0x38,0x35,0x37,0x39,0x31,0x30,0x31,0x35,0x36,0x32,
    0x35,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x31,
    0x30,0x20,0x3d,0x20,0x73,0x64,0x5f,0x73,0x70,0x68,0x65,0x72,0x65,0x28,0x70,0x61,
    0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x29,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x20,0x3d,0x20,0x5f,0x33,0x31,
    0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x33,0x31,0x30,0x20,
    0x3c,0x20,0x30,0x2e,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,
    0x31,0x31,0x36,0x31,0x31,0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x29,
    0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,
    0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x20,0x3d,0x20,0x70,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x61,
    0x72,0x61,0x6d,0x5f,0x33,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,
    0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x31,0x39,0x20,0x3d,0x20,0x73,0x64,0x5f,0x6d,
    0x61,0x6e,0x64,0x65,0x6c,0x62,0x75,0x6c,0x62,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,
    0x32,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,0x29,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x73,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,
    0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x64,0x20,0x3d,0x20,0x5f,0x33,0x31,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,
    0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,
    0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x73,0x5f,0x63,0x6f,0x6c,
    0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x30,0x2e,0x30,0x29,0x3b,0x0a,
    0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,
    0x20,0x64,0x3b,0x0a,0x7d,0x0a,0x0a,0x76,0x65,0x63,0x33,0x20,0x73,0x75,0x72,0x66,
    0x61,0x63,0x65,0x5f,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x28,0x76,0x65,0x63,0x33,0x20,
    0x70,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x70,0x29,0x0a,0x7b,0x0a,0x20,
    0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,0x20,
    0x70,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,
    0x30,0x30,0x30,0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,
    0x33,0x38,0x39,0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x2c,0x20,0x30,0x2e,
    0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,
    0x34,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,
    0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x33,0x35,0x20,0x3d,0x20,0x64,0x5f,0x73,0x63,
    0x65,0x6e,0x65,0x28,0x70,0x61,0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,
    0x5f,0x31,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,
    0x72,0x61,0x6d,0x5f,0x32,0x20,0x3d,0x20,0x70,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,
    0x28,0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,
    0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38,0x39,
    0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,
    0x33,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x34,
    0x35,0x20,0x3d,0x20,0x64,0x5f,0x73,0x63,0x65,0x6e,0x65,0x28,0x70,0x61,0x72,0x61,
    0x6d,0x5f,0x32,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,0x29,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x34,0x20,
    0x3d,0x20,0x70,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x2c,0x20,
    0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,
    0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38,0x39,0x34,
    0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,
    0x65,0x63,0x34,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x35,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x35,0x35,0x20,0x3d,0x20,0x64,0x5f,
    0x73,0x63,0x65,0x6e,0x65,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,0x34,0x2c,0x20,0x70,
    0x61,0x72,0x61,0x6d,0x5f,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,
    0x75,0x72,0x6e,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x76,0x65,
    0x63,0x33,0x28,0x5f,0x33,0x33,0x35,0x20,0x2d,0x20,0x64,0x70,0x2c,0x20,0x5f,0x33,
    0x34,0x35,0x20,0x2d,0x20,0x64,0x70,0x2c,0x20,0x5f,0x33,0x35,0x35,0x20,0x2d,0x20,
    0x64,0x70,0x29,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x76,0x65,0x63,0x33,0x20,0x63,0x61,
    0x6c,0x63,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x28,0x76,0x65,0x63,0x33,0x20,0x72,0x6f,
    0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x72,0x64,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,
    0x20,0x74,0x2c,0x20,0x76,0x65,0x63,0x34,0x20,0x74,0x72,0x61,0x29,0x0a,0x7b,0x0a,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,
    0x20,0x72,0x6f,0x20,0x2b,0x20,0x28,0x72,0x64,0x20,0x2a,0x20,0x74,0x29,0x3b,0x0a,
    0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,
    0x31,0x20,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,
    0x5f,0x33,0x37,0x37,0x20,0x3d,0x20,0x73,0x75,0x72,0x66,0x61,0x63,0x65,0x5f,0x6e,
    0x6f,0x72,0x6d,0x61,0x6c,0x28,0x70,0x61,0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,0x72,
    0x61,0x6d,0x5f,0x31,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,
    0x5f,0x33,0x38,0x34,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,
    0x28,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x37,0x37,0x30,0x30,0x30,0x30,0x32,
    0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,0x37,0x33,0x34,0x33,0x37,0x35,0x2c,
    0x20,0x30,0x2e,0x35,0x37,0x37,0x30,0x30,0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,
    0x30,0x39,0x32,0x37,0x37,0x33,0x34,0x33,0x37,0x35,0x2c,0x20,0x2d,0x30,0x2e,0x35,
    0x37,0x37,0x30,0x30,0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,
    0x37,0x33,0x34,0x33,0x37,0x35,0x29,0x20,0x2d,0x20,0x72,0x64,0x29,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x39,0x31,0x20,0x3d,0x20,
    0x63,0x6c,0x61,0x6d,0x70,0x28,0x30,0x2e,0x30,0x35,0x30,0x30,0x30,0x30,0x30,0x30,
    0x30,0x37,0x34,0x35,0x30,0x35,0x38,0x30,0x35,0x39,0x36,0x39,0x32,0x33,0x38,0x32,
    0x38,0x31,0x32,0x35,0x20,0x2a,0x20,0x6c,0x6f,0x67,0x28,0x74,0x72,0x61,0x2e,0x78,
    0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,
    0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x34,0x30,0x31,0x20,0x3d,0x20,0x63,
    0x6c,0x61,0x6d,0x70,0x28,0x64,0x6f,0x74,0x28,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,
    0x35,0x37,0x37,0x30,0x30,0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,
    0x37,0x37,0x33,0x34,0x33,0x37,0x35,0x2c,0x20,0x30,0x2e,0x35,0x37,0x37,0x30,0x30,
    0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,0x37,0x33,0x34,0x33,
    0x37,0x35,0x2c,0x20,0x2d,0x30,0x2e,0x35,0x37,0x37,0x30,0x30,0x30,0x30,0x32,0x31,
    0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,0x37,0x33,0x34,0x33,0x37,0x35,0x29,0x2c,
    0x20,0x5f,0x33,0x37,0x37,0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,
    0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x71,
    0x72,0x74,0x28,0x70,0x6f,0x77,0x28,0x6d,0x69,0x78,0x28,0x6d,0x69,0x78,0x28,0x6d,
    0x69,0x78,0x28,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x30,0x39,0x39,0x39,0x39,
    0x39,0x39,0x39,0x37,0x37,0x36,0x34,0x38,0x32,0x35,0x38,0x32,0x30,0x39,0x32,0x32,
    0x38,0x35,0x31,0x35,0x36,0x32,0x35,0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,
    0x2e,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,
    0x31,0x31,0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,0x30,0x2e,
    0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32,0x39,0x38,0x30,0x32,0x33,0x32,0x32,
    0x33,0x38,0x37,0x36,0x39,0x35,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x33,0x30,
    0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,
    0x30,0x37,0x38,0x31,0x32,0x35,0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x63,0x6c,
    0x61,0x6d,0x70,0x28,0x74,0x72,0x61,0x2e,0x79,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,
    0x31,0x2e,0x30,0x29,0x29,0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,
    0x31,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x35,0x35,0x32,0x39,0x36,0x35,0x31,0x36,
    0x34,0x31,0x38,0x34,0x35,0x37,0x30,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x31,
    0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,0x31,0x31,
    0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,0x30,0x2e,0x33,0x30,
    0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,
    0x30,0x37,0x38,0x31,0x32,0x35,0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x63,0x6c,
    0x61,0x6d,0x70,0x28,0x74,0x72,0x61,0x2e,0x7a,0x20,0x2a,0x20,0x74,0x72,0x61,0x2e,
    0x7a,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x29,0x29,0x2c,0x20,
    0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,
    0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,
    0x20,0x30,0x2e,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,
    0x31,0x36,0x31,0x31,0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,
    0x30,0x2e,0x30,0x31,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x35,0x35,0x32,0x39,0x36,
    0x35,0x31,0x36,0x34,0x31,0x38,0x34,0x35,0x37,0x30,0x33,0x31,0x32,0x35,0x29,0x2c,
    0x20,0x76,0x65,0x63,0x33,0x28,0x63,0x6c,0x61,0x6d,0x70,0x28,0x70,0x6f,0x77,0x28,
    0x74,0x72,0x61,0x2e,0x77,0x2c,0x20,0x36,0x2e,0x30,0x29,0x2c,0x20,0x30,0x2e,0x30,
    0x2c,0x20,0x31,0x2e,0x30,0x29,0x29,0x29,0x20,0x2a,0x20,0x28,0x28,0x28,0x28,0x28,
    0x76,0x65,0x63,0x33,0x28,0x31,0x30,0x2e,0x35,0x2c,0x20,0x37,0x2e,0x36,0x39,0x39,
    0x39,0x39,0x39,0x38,0x30,0x39,0x32,0x36,0x35,0x31,0x33,0x36,0x37,0x31,0x38,0x37,
    0x35,0x2c,0x20,0x34,0x2e,0x39,0x30,0x30,0x30,0x30,0x30,0x30,0x39,0x35,0x33,0x36,
    0x37,0x34,0x33,0x31,0x36,0x34,0x30,0x36,0x32,0x35,0x29,0x20,0x2a,0x20,0x5f,0x34,
    0x30,0x31,0x29,0x20,0x2b,0x20,0x28,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x2c,
    0x20,0x30,0x2e,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,
    0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x36,
    0x30,0x30,0x30,0x30,0x30,0x30,0x32,0x33,0x38,0x34,0x31,0x38,0x35,0x37,0x39,0x31,
    0x30,0x31,0x35,0x36,0x32,0x35,0x29,0x20,0x2a,0x20,0x28,0x63,0x6c,0x61,0x6d,0x70,
    0x28,0x66,0x6d,0x61,0x28,0x30,0x2e,0x35,0x2c,0x20,0x64,0x6f,0x74,0x28,0x76,0x65,
    0x63,0x33,0x28,0x2d,0x30,0x2e,0x37,0x30,0x37,0x30,0x30,0x30,0x30,0x31,0x37,0x31,
    0x36,0x36,0x31,0x33,0x37,0x36,0x39,0x35,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,
    0x30,0x2c,0x20,0x30,0x2e,0x37,0x30,0x37,0x30,0x30,0x30,0x30,0x31,0x37,0x31,0x36,
    0x36,0x31,0x33,0x37,0x36,0x39,0x35,0x33,0x31,0x32,0x35,0x29,0x2c,0x20,0x5f,0x33,
    0x37,0x37,0x29,0x2c,0x20,0x30,0x2e,0x35,0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,
    0x31,0x2e,0x30,0x29,0x20,0x2a,0x20,0x5f,0x33,0x39,0x31,0x29,0x29,0x29,0x20,0x2b,
    0x20,0x28,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x31,0x35,0x30,0x30,0x30,0x30,0x30,
    0x30,0x35,0x39,0x36,0x30,0x34,0x36,0x34,0x34,0x37,0x37,0x35,0x33,0x39,0x30,0x36,
    0x32,0x35,0x2c,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,
    0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20,
    0x30,0x2e,0x34,0x34,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30,0x37,
    0x31,0x30,0x34,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x29,0x20,0x2a,0x20,0x28,0x66,
    0x6d,0x61,0x28,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,
    0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20,0x5f,
    0x33,0x37,0x37,0x2e,0x79,0x2c,0x20,0x30,0x2e,0x36,0x39,0x39,0x39,0x39,0x39,0x39,
    0x38,0x38,0x30,0x37,0x39,0x30,0x37,0x31,0x30,0x34,0x34,0x39,0x32,0x31,0x38,0x37,
    0x35,0x29,0x20,0x2a,0x20,0x66,0x6d,0x61,0x28,0x30,0x2e,0x38,0x30,0x30,0x30,0x30,
    0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,
    0x31,0x32,0x35,0x2c,0x20,0x5f,0x33,0x39,0x31,0x2c,0x20,0x30,0x2e,0x32,0x30,0x30,
    0x30,0x30,0x30,0x30,0x30,0x32,0x39,0x38,0x30,0x32,0x33,0x32,0x32,0x33,0x38,0x37,
    0x36,0x39,0x35,0x33,0x31,0x32,0x35,0x29,0x29,0x29,0x29,0x20,0x2b,0x20,0x28,0x76,
    0x65,0x63,0x33,0x28,0x30,0x2e,0x38,0x37,0x35,0x2c,0x20,0x30,0x2e,0x37,0x35,0x2c,
    0x20,0x30,0x2e,0x36,0x32,0x35,0x29,0x20,0x2a,0x20,0x66,0x6d,0x61,0x28,0x30,0x2e,
    0x39,0x34,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30,0x37,0x31,0x30,
    0x34,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x2c,0x20,0x5f,0x33,0x39,0x31,0x2c,0x20,
    0x30,0x2e,0x30,0x35,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x37,0x34,0x35,0x30,0x35,
    0x38,0x30,0x35,0x39,0x36,0x39,0x32,0x33,0x38,0x32,0x38,0x31,0x32,0x35,0x29,0x29,
    0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x28,0x34,0x2e,0x30,0x20,0x2a,0x20,
    0x63,0x6c,0x61,0x6d,0x70,0x28,0x31,0x2e,0x30,0x20,0x2b,0x20,0x64,0x6f,0x74,0x28,
    0x72,0x64,0x2c,0x20,0x5f,0x33,0x37,0x37,0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,
    0x31,0x2e,0x30,0x29,0x29,0x20,0x2a,0x20,0x5f,0x33,0x39,0x31,0x29,0x29,0x2c,0x20,
    0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x36,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,
    0x30,0x37,0x39,0x30,0x37,0x31,0x30,0x34,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x2c,
    0x20,0x30,0x2e,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x37,0x36,0x31,0x35,0x38,0x31,
    0x34,0x32,0x30,0x38,0x39,0x38,0x34,0x33,0x37,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,
    0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x28,0x28,0x70,0x6f,0x77,0x28,0x63,
    0x6c,0x61,0x6d,0x70,0x28,0x64,0x6f,0x74,0x28,0x5f,0x33,0x37,0x37,0x2c,0x20,0x5f,
    0x33,0x38,0x34,0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x2c,
    0x20,0x33,0x32,0x2e,0x30,0x29,0x20,0x2a,0x20,0x5f,0x34,0x30,0x31,0x29,0x20,0x2a,
    0x20,0x66,0x6d,0x61,0x28,0x30,0x2e,0x39,0x35,0x39,0x39,0x39,0x39,0x39,0x37,0x38,
    0x35,0x34,0x32,0x33,0x32,0x37,0x38,0x38,0x30,0x38,0x35,0x39,0x33,0x37,0x35,0x2c,
    0x20,0x70,0x6f,0x77,0x28,0x63,0x6c,0x61,0x6d,0x70,0x28,0x31,0x2e,0x30,0x20,0x2d,
    0x20,0x64,0x6f,0x74,0x28,0x5f,0x33,0x38,0x34,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,
    0x30,0x2e,0x35,0x37,0x37,0x30,0x30,0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,0x30,
    0x39,0x32,0x37,0x37,0x33,0x34,0x33,0x37,0x35,0x2c,0x20,0x30,0x2e,0x35,0x37,0x37,
    0x30,0x30,0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,0x37,0x33,
    0x34,0x33,0x37,0x35,0x2c,0x20,0x2d,0x30,0x2e,0x35,0x37,0x37,0x30,0x30,0x30,0x30,
    0x32,0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,0x37,0x33,0x34,0x33,0x37,0x35,
    0x29,0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x2c,0x20,0x35,
    0x2e,0x30,0x29,0x2c,0x20,0x30,0x2e,0x30,0x33,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
    0x31,0x30,0x35,0x39,0x33,0x30,0x33,0x32,0x38,0x33,0x36,0x39,0x31,0x34,0x30,0x36,
    0x32,0x35,0x29,0x29,0x20,0x2a,0x20,0x31,0x35,0x2e,0x30,0x29,0x29,0x3b,0x0a,0x7d,
    0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x35,0x36,0x31,0x20,0x3d,0x20,
    0x28,0x28,0x65,0x79,0x65,0x20,0x2b,0x20,0x28,0x66,0x77,0x64,0x20,0x2a,0x20,0x31,
    0x2e,0x37,0x39,0x39,0x39,0x39,0x39,0x39,0x35,0x32,0x33,0x31,0x36,0x32,0x38,0x34,
    0x31,0x37,0x39,0x36,0x38,0x37,0x35,0x29,0x29,0x20,0x2b,0x20,0x28,0x72,0x69,0x67,
    0x68,0x74,0x20,0x2a,0x20,0x70,0x6f,0x73,0x2e,0x78,0x29,0x29,0x20,0x2b,0x20,0x28,
    0x75,0x70,0x20,0x2a,0x20,0x70,0x6f,0x73,0x2e,0x79,0x29,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x35,0x36,0x36,0x20,0x3d,0x20,0x6e,0x6f,0x72,
    0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x5f,0x35,0x36,0x31,0x20,0x2d,0x20,0x65,0x79,
    0x65,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,
    0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x30,0x2e,0x31,0x30,0x30,0x30,
    0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,0x31,0x31,0x39,0x33,0x38,
    0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,0x30,0x2e,0x32,0x30,0x30,0x30,0x30,
    0x30,0x30,0x30,0x32,0x39,0x38,0x30,0x32,0x33,0x32,0x32,0x33,0x38,0x37,0x36,0x39,
    0x35,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,
    0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,
    0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,
    0x61,0x74,0x20,0x74,0x20,0x3d,0x20,0x30,0x2e,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,
    0x76,0x65,0x63,0x34,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x3b,0x0a,0x20,0x20,
    0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,
    0x3b,0x20,0x69,0x20,0x3c,0x20,0x39,0x36,0x3b,0x20,0x69,0x2b,0x2b,0x29,0x0a,0x20,
    0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,
    0x33,0x20,0x5f,0x35,0x38,0x34,0x20,0x3d,0x20,0x5f,0x35,0x36,0x31,0x20,0x2b,0x20,
    0x28,0x5f,0x35,0x36,0x36,0x20,0x2a,0x20,0x74,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,
    0x20,0x5f,0x35,0x38,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,
    0x6c,0x6f,0x61,0x74,0x20,0x5f,0x35,0x39,0x30,0x20,0x3d,0x20,0x64,0x5f,0x73,0x63,
    0x65,0x6e,0x65,0x28,0x70,0x61,0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,
    0x5f,0x31,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,
    0x28,0x5f,0x35,0x39,0x30,0x20,0x3c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,
    0x30,0x30,0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,
    0x38,0x39,0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x29,0x0a,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x20,
    0x3d,0x20,0x5f,0x35,0x38,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,
    0x20,0x3d,0x20,0x5f,0x35,0x36,0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x61,0x72,0x61,0x6d,
    0x5f,0x34,0x20,0x3d,0x20,0x5f,0x35,0x39,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x61,0x72,0x61,
    0x6d,0x5f,0x35,0x20,0x3d,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,
    0x5f,0x36,0x30,0x34,0x20,0x3d,0x20,0x63,0x61,0x6c,0x63,0x5f,0x63,0x6f,0x6c,0x6f,
    0x72,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,
    0x5f,0x33,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x34,0x2c,0x20,0x70,0x61,0x72,
    0x61,0x6d,0x5f,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x36,0x34,0x31,0x20,0x3d,0x20,0x63,
    0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x5f,0x36,0x34,0x31,0x2e,0x78,0x20,0x3d,0x20,0x5f,0x36,0x30,0x34,0x2e,
    0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,
    0x36,0x34,0x31,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x36,0x30,0x34,0x2e,0x79,0x3b,0x0a,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x36,0x34,0x31,
    0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x36,0x30,0x34,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,
    0x20,0x5f,0x36,0x34,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x62,0x72,0x65,0x61,0x6b,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,
    0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x36,0x31,0x38,
    0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x36,0x32,0x30,0x20,
    0x3d,0x20,0x5f,0x36,0x31,0x38,0x2e,0x78,0x79,0x7a,0x20,0x2b,0x20,0x28,0x76,0x65,
    0x63,0x33,0x28,0x30,0x2e,0x30,0x30,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32,
    0x36,0x30,0x37,0x37,0x30,0x33,0x32,0x30,0x38,0x39,0x32,0x33,0x33,0x33,0x39,0x38,
    0x34,0x33,0x37,0x35,0x2c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,
    0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38,0x39,
    0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x2c,0x20,0x30,0x2e,0x30,0x29,0x20,
    0x2a,0x20,0x66,0x6c,0x6f,0x61,0x74,0x28,0x69,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x36,
    0x34,0x38,0x20,0x3d,0x20,0x5f,0x36,0x31,0x38,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x36,0x34,0x38,0x2e,0x78,0x20,0x3d,0x20,
    0x5f,0x36,0x32,0x30,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x5f,0x36,0x34,0x38,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x36,0x32,
    0x30,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x5f,0x36,0x34,0x38,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x36,0x32,0x30,0x2e,0x7a,
    0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,
    0x6c,0x6f,0x72,0x20,0x3d,0x20,0x5f,0x36,0x34,0x38,0x3b,0x0a,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,
    0x20,0x28,0x74,0x20,0x3e,0x20,0x33,0x2e,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x62,0x72,0x65,0x61,0x6b,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x20,0x2b,0x3d,0x20,0x5f,
    0x35,0x39,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x66,
    0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,
    0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
];
sdf_shader_desc :: (backend: sg_backend) -> sg_shader_desc {
    desc: sg_shader_desc;
    desc.label = "sdf_shader";
    if backend == {
        case .GLCORE;
            desc.attrs[0].name = "position";
            desc.vs.source = xx *vs_source_glsl410;
            desc.vs.entry = "main";
            desc.vs.uniform_blocks[0].size = 16;
            desc.vs.uniform_blocks[0].layout = .STD140;
            desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params";
            desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4;
            desc.vs.uniform_blocks[0].uniforms[0].array_count = 1;
            desc.fs.source = xx *fs_source_glsl410;
            desc.fs.entry = "main";
    }
    return desc;
}

#scope_module

#import "sokol_gfx";

Fixed:

/*
    #version:1# (machine generated, don't edit!)

    Generated by sokol-shdc (https://github.com/floooh/sokol-tools)

    Cmdline:
        sokol-shdc -i sdf.glsl -o sdf_fixed.jai -l glsl410 -f sokol_jai

    Overview:
    =========
    Shader program: 'sdf':
        Get shader desc: sdf_shader_desc(sg_query_backend())
        Vertex shader: vs
            Attributes:
                ATTR_vs_position => 0
            Uniform block 'vs_params':
                Jai struct: Vs_Params
                Bind slot: SLOT_vs_params => 0
        Fragment shader: fs
*/
ATTR_vs_position :: 0;
SLOT_vs_params :: 0;
Vs_Params :: struct {
    aspect: float;
    time: float;
    _: [8]u8;
};
/*
    #version 410

    uniform vec4 vs_params[1];
    layout(location = 0) in vec4 position;
    layout(location = 0) out vec2 pos;
    layout(location = 1) out vec3 eye;
    layout(location = 4) out vec3 fwd;
    layout(location = 3) out vec3 right;
    layout(location = 2) out vec3 up;

    vec3 eye_pos(float time, vec3 center)
    {
        return center + vec3(sin(time * 0.0500000007450580596923828125) * 3.0, sin(time * 0.100000001490116119384765625) * 2.0, cos(time * 0.0500000007450580596923828125) * 3.0);
    }

    void lookat(vec3 eye_1, vec3 center, vec3 up_1, inout vec3 out_fwd, inout vec3 out_right, out vec3 out_up)
    {
        out_fwd = normalize(center - eye_1);
        out_right = normalize(cross(out_fwd, up_1));
        out_up = cross(out_right, out_fwd);
    }

    void main()
    {
        gl_Position = position;
        pos.x = position.x * vs_params[0].x;
        pos.y = position.y;
        float param = vs_params[0].y * 5.0;
        vec3 param_1 = vec3(0.0);
        eye = eye_pos(param, param_1);
        vec3 param_2 = eye;
        vec3 param_3 = vec3(0.0);
        vec3 param_4 = vec3(0.0, 1.0, 0.0);
        vec3 param_5;
        vec3 param_6;
        vec3 param_7;
        lookat(param_2, param_3, param_4, param_5, param_6, param_7);
        fwd = param_5;
        right = param_6;
        up = param_7;
    }

*/
vs_source_glsl410 := u8.[
    0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x75,0x6e,
    0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61,
    0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,
    0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,
    0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,
    0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,
    0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,
    0x73,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,
    0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x33,
    0x20,0x65,0x79,0x65,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,
    0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x34,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,
    0x65,0x63,0x33,0x20,0x66,0x77,0x64,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,
    0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x33,0x29,0x20,0x6f,0x75,
    0x74,0x20,0x76,0x65,0x63,0x33,0x20,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x6c,0x61,
    0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,
    0x32,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x33,0x20,0x75,0x70,0x3b,0x0a,
    0x0a,0x76,0x65,0x63,0x33,0x20,0x65,0x79,0x65,0x5f,0x70,0x6f,0x73,0x28,0x66,0x6c,
    0x6f,0x61,0x74,0x20,0x74,0x69,0x6d,0x65,0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x63,
    0x65,0x6e,0x74,0x65,0x72,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,
    0x75,0x72,0x6e,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x20,0x2b,0x20,0x76,0x65,0x63,
    0x33,0x28,0x73,0x69,0x6e,0x28,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x30,0x2e,0x30,
    0x35,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x37,0x34,0x35,0x30,0x35,0x38,0x30,0x35,
    0x39,0x36,0x39,0x32,0x33,0x38,0x32,0x38,0x31,0x32,0x35,0x29,0x20,0x2a,0x20,0x33,
    0x2e,0x30,0x2c,0x20,0x73,0x69,0x6e,0x28,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x30,
    0x2e,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,
    0x31,0x31,0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x29,0x20,0x2a,0x20,
    0x32,0x2e,0x30,0x2c,0x20,0x63,0x6f,0x73,0x28,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,
    0x30,0x2e,0x30,0x35,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x37,0x34,0x35,0x30,0x35,
    0x38,0x30,0x35,0x39,0x36,0x39,0x32,0x33,0x38,0x32,0x38,0x31,0x32,0x35,0x29,0x20,
    0x2a,0x20,0x33,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,
    0x6c,0x6f,0x6f,0x6b,0x61,0x74,0x28,0x76,0x65,0x63,0x33,0x20,0x65,0x79,0x65,0x5f,
    0x31,0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x20,
    0x76,0x65,0x63,0x33,0x20,0x75,0x70,0x5f,0x31,0x2c,0x20,0x69,0x6e,0x6f,0x75,0x74,
    0x20,0x76,0x65,0x63,0x33,0x20,0x6f,0x75,0x74,0x5f,0x66,0x77,0x64,0x2c,0x20,0x69,
    0x6e,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x33,0x20,0x6f,0x75,0x74,0x5f,0x72,0x69,
    0x67,0x68,0x74,0x2c,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x33,0x20,0x6f,0x75,
    0x74,0x5f,0x75,0x70,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x5f,
    0x66,0x77,0x64,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,
    0x63,0x65,0x6e,0x74,0x65,0x72,0x20,0x2d,0x20,0x65,0x79,0x65,0x5f,0x31,0x29,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x5f,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,
    0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x63,0x72,0x6f,0x73,0x73,
    0x28,0x6f,0x75,0x74,0x5f,0x66,0x77,0x64,0x2c,0x20,0x75,0x70,0x5f,0x31,0x29,0x29,
    0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x5f,0x75,0x70,0x20,0x3d,0x20,0x63,
    0x72,0x6f,0x73,0x73,0x28,0x6f,0x75,0x74,0x5f,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,
    0x6f,0x75,0x74,0x5f,0x66,0x77,0x64,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x76,0x6f,0x69,
    0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,
    0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x70,0x6f,0x73,
    0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x70,0x6f,0x73,0x2e,0x78,
    0x20,0x3d,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x78,0x20,0x2a,0x20,
    0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2e,0x78,0x3b,0x0a,
    0x20,0x20,0x20,0x20,0x70,0x6f,0x73,0x2e,0x79,0x20,0x3d,0x20,0x70,0x6f,0x73,0x69,
    0x74,0x69,0x6f,0x6e,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,
    0x74,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,
    0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2e,0x79,0x20,0x2a,0x20,0x35,0x2e,0x30,0x3b,0x0a,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,
    0x20,0x3d,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,
    0x20,0x20,0x65,0x79,0x65,0x20,0x3d,0x20,0x65,0x79,0x65,0x5f,0x70,0x6f,0x73,0x28,
    0x70,0x61,0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x29,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,
    0x32,0x20,0x3d,0x20,0x65,0x79,0x65,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,
    0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,0x20,0x3d,0x20,0x76,0x65,0x63,0x33,
    0x28,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,
    0x70,0x61,0x72,0x61,0x6d,0x5f,0x34,0x20,0x3d,0x20,0x76,0x65,0x63,0x33,0x28,0x30,
    0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x35,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,
    0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,
    0x6d,0x5f,0x37,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6c,0x6f,0x6f,0x6b,0x61,0x74,0x28,
    0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,
    0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x34,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,
    0x5f,0x35,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x36,0x2c,0x20,0x70,0x61,0x72,
    0x61,0x6d,0x5f,0x37,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x77,0x64,0x20,0x3d,
    0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x35,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x69,
    0x67,0x68,0x74,0x20,0x3d,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x36,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x75,0x70,0x20,0x3d,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x37,0x3b,
    0x0a,0x7d,0x0a,0x0a,0x00,
];
/*
    #version 410

    layout(location = 1) in vec3 eye;
    layout(location = 4) in vec3 fwd;
    layout(location = 3) in vec3 right;
    layout(location = 0) in vec2 pos;
    layout(location = 2) in vec3 up;
    layout(location = 0) out vec4 frag_color;

    float sd_sphere(vec3 p, float s)
    {
        return length(p) - s;
    }

    float sd_mandelbulb(vec3 p, inout vec4 res_color)
    {
        vec3 w = p;
        float _49 = dot(p, p);
        float m = _49;
        vec4 trap = vec4(abs(p), _49);
        float dz = 1.0;
        for (int i = 0; i < 4; i++)
        {
            float _76 = m * m;
            dz = fma(8.0 * sqrt(((_76 * _76) * _76) * m), dz, 1.0);
            vec3 _653 = w;
            float _100 = _653.x * _653.x;
            float _104 = _100 * _100;
            float _112 = _653.y * _653.y;
            float _124 = _653.z * _653.z;
            float _128 = _124 * _124;
            float _132 = fma(_653.x, _653.x, _124);
            float _147 = inversesqrt((((((_132 * _132) * _132) * _132) * _132) * _132) * _132);
            float _170 = fma(2.0 * _124, _100, fma(_100 * (-6.0), _112, fma(_112 * (-6.0), _124, fma(_124, _124, fma(_100, _100, _112 * _112)))));
            float _176 = fma(_653.z, _653.z, fma(_653.x, _653.x, -_112));
            vec3 _670 = vec3(fma(((((((64.0 * _653.x) * _653.y) * _653.z) * fma(_653.x, _653.x, -_124)) * _176) * fma(_124, _124, fma(_100, _100, -((6.0 * _100) * _124)))) * _170, _147, p.x), fma(_170, _170, fma((((-16.0) * _112) * _132) * _176, _176, p.y)), fma(((((-8.0) * _653.y) * _176) * fma(_128, _128, fma(-((28.0 * _100) * _124), _128, fma(70.0 * _104, _128, fma(_104, _104, -(((28.0 * _104) * _100) * _124)))))) * _170, _147, p.z));
            w = _670;
            trap = min(trap, vec4(abs(_670), m));
            float _277 = dot(_670, _670);
            m = _277;
            if (_277 > 256.0)
            {
                break;
            }
        }
        res_color = vec4(m, trap.yzw);
        return ((0.25 * log(m)) * sqrt(m)) / dz;
    }

    float d_scene(vec3 p, out vec4 res_color)
    {
        vec3 param = p;
        float param_1 = 1.10000002384185791015625;
        float _310 = sd_sphere(param, param_1);
        float d = _310;
        if (_310 < 0.100000001490116119384765625)
        {
            vec3 param_2 = p;
            vec4 param_3;
            float _319 = sd_mandelbulb(param_2, param_3);
            res_color = param_3;
            d = _319;
        }
        else
        {
            res_color = vec4(0.0);
        }
        return d;
    }

    vec3 surface_normal(vec3 p, float dp)
    {
        vec3 param = p + vec3(0.001000000047497451305389404296875, 0.0, 0.0);
        vec4 param_1;
        float _335 = d_scene(param, param_1);
        vec3 param_2 = p + vec3(0.0, 0.001000000047497451305389404296875, 0.0);
        vec4 param_3;
        float _345 = d_scene(param_2, param_3);
        vec3 param_4 = p + vec3(0.0, 0.0, 0.001000000047497451305389404296875);
        vec4 param_5;
        float _355 = d_scene(param_4, param_5);
        return normalize(vec3(_335 - dp, _345 - dp, _355 - dp));
    }

    vec3 calc_color(vec3 ro, vec3 rd, float t, vec4 tra)
    {
        vec3 param = ro + (rd * t);
        float param_1 = t;
        vec3 _377 = surface_normal(param, param_1);
        vec3 _384 = normalize(vec3(0.57700002193450927734375, 0.57700002193450927734375, -0.57700002193450927734375) - rd);
        float _391 = clamp(0.0500000007450580596923828125 * log(tra.x), 0.0, 1.0);
        float _401 = clamp(dot(vec3(0.57700002193450927734375, 0.57700002193450927734375, -0.57700002193450927734375), _377), 0.0, 1.0);
        return sqrt(pow(mix(mix(mix(vec3(0.00999999977648258209228515625), vec3(0.100000001490116119384765625, 0.20000000298023223876953125, 0.300000011920928955078125), vec3(clamp(tra.y, 0.0, 1.0))), vec3(0.0199999995529651641845703125, 0.100000001490116119384765625, 0.300000011920928955078125), vec3(clamp(tra.z * tra.z, 0.0, 1.0))), vec3(0.300000011920928955078125, 0.100000001490116119384765625, 0.0199999995529651641845703125), vec3(clamp(pow(tra.w, 6.0), 0.0, 1.0))) * (((((vec3(10.5, 7.69999980926513671875, 4.900000095367431640625) * _401) + (vec3(1.0, 0.800000011920928955078125, 0.60000002384185791015625) * (clamp(fma(0.5, dot(vec3(-0.7070000171661376953125, 0.0, 0.7070000171661376953125), _377), 0.5), 0.0, 1.0) * _391))) + (vec3(0.1500000059604644775390625, 0.300000011920928955078125, 0.449999988079071044921875) * (fma(0.300000011920928955078125, _377.y, 0.699999988079071044921875) * fma(0.800000011920928955078125, _391, 0.20000000298023223876953125)))) + (vec3(0.875, 0.75, 0.625) * fma(0.949999988079071044921875, _391, 0.0500000007450580596923828125))) + vec3((4.0 * clamp(1.0 + dot(rd, _377), 0.0, 1.0)) * _391)), vec3(0.699999988079071044921875, 0.89999997615814208984375, 1.0)) + vec3(((pow(clamp(dot(_377, _384), 0.0, 1.0), 32.0) * _401) * fma(0.959999978542327880859375, pow(clamp(1.0 - dot(_384, vec3(0.57700002193450927734375, 0.57700002193450927734375, -0.57700002193450927734375)), 0.0, 1.0), 5.0), 0.039999999105930328369140625)) * 15.0));
    }

    void main()
    {
        vec3 _561 = ((eye + (fwd * 1.7999999523162841796875)) + (right * pos.x)) + (up * pos.y);
        vec3 _566 = normalize(_561 - eye);
        vec4 color = vec4(0.100000001490116119384765625, 0.20000000298023223876953125, 0.300000011920928955078125, 1.0);
        float t = 0.0;
        vec4 param_1;
        for (int i = 0; i < 96; i++)
        {
            vec3 _584 = _561 + (_566 * t);
            vec3 param = _584;
            float _590 = d_scene(param, param_1);
            if (_590 < 0.001000000047497451305389404296875)
            {
                vec3 param_2 = _584;
                vec3 param_3 = _566;
                float param_4 = _590;
                vec4 param_5 = param_1;
                vec3 _604 = calc_color(param_2, param_3, param_4, param_5);
                vec4 _641 = color;
                _641.x = _604.x;
                _641.y = _604.y;
                _641.z = _604.z;
                color = _641;
                break;
            }
            else
            {
                vec4 _618 = color;
                vec3 _620 = _618.xyz + (vec3(0.0030000000260770320892333984375, 0.001000000047497451305389404296875, 0.0) * float(i));
                vec4 _648 = _618;
                _648.x = _620.x;
                _648.y = _620.y;
                _648.z = _620.z;
                color = _648;
            }
            if (t > 3.0)
            {
                break;
            }
            t += _590;
        }
        frag_color = color;
    }

*/
fs_source_glsl410 := u8.[
    0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x6c,0x61,
    0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,
    0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x65,0x79,0x65,0x3b,0x0a,
    0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,
    0x3d,0x20,0x34,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x66,0x77,0x64,
    0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,
    0x6e,0x20,0x3d,0x20,0x33,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x72,
    0x69,0x67,0x68,0x74,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,
    0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,
    0x63,0x32,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,
    0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,
    0x76,0x65,0x63,0x33,0x20,0x75,0x70,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,
    0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,
    0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,
    0x72,0x3b,0x0a,0x0a,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x64,0x5f,0x73,0x70,0x68,
    0x65,0x72,0x65,0x28,0x76,0x65,0x63,0x33,0x20,0x70,0x2c,0x20,0x66,0x6c,0x6f,0x61,
    0x74,0x20,0x73,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,
    0x6e,0x20,0x6c,0x65,0x6e,0x67,0x74,0x68,0x28,0x70,0x29,0x20,0x2d,0x20,0x73,0x3b,
    0x0a,0x7d,0x0a,0x0a,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x64,0x5f,0x6d,0x61,0x6e,
    0x64,0x65,0x6c,0x62,0x75,0x6c,0x62,0x28,0x76,0x65,0x63,0x33,0x20,0x70,0x2c,0x20,
    0x69,0x6e,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x72,0x65,0x73,0x5f,0x63,
    0x6f,0x6c,0x6f,0x72,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,
    0x20,0x77,0x20,0x3d,0x20,0x70,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,
    0x74,0x20,0x5f,0x34,0x39,0x20,0x3d,0x20,0x64,0x6f,0x74,0x28,0x70,0x2c,0x20,0x70,
    0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x6d,0x20,0x3d,
    0x20,0x5f,0x34,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x74,
    0x72,0x61,0x70,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x61,0x62,0x73,0x28,0x70,
    0x29,0x2c,0x20,0x5f,0x34,0x39,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,
    0x61,0x74,0x20,0x64,0x7a,0x20,0x3d,0x20,0x31,0x2e,0x30,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,
    0x20,0x69,0x20,0x3c,0x20,0x34,0x3b,0x20,0x69,0x2b,0x2b,0x29,0x0a,0x20,0x20,0x20,
    0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,
    0x20,0x5f,0x37,0x36,0x20,0x3d,0x20,0x6d,0x20,0x2a,0x20,0x6d,0x3b,0x0a,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x7a,0x20,0x3d,0x20,0x66,0x6d,0x61,0x28,0x38,
    0x2e,0x30,0x20,0x2a,0x20,0x73,0x71,0x72,0x74,0x28,0x28,0x28,0x5f,0x37,0x36,0x20,
    0x2a,0x20,0x5f,0x37,0x36,0x29,0x20,0x2a,0x20,0x5f,0x37,0x36,0x29,0x20,0x2a,0x20,
    0x6d,0x29,0x2c,0x20,0x64,0x7a,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x36,0x35,0x33,0x20,
    0x3d,0x20,0x77,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,
    0x61,0x74,0x20,0x5f,0x31,0x30,0x30,0x20,0x3d,0x20,0x5f,0x36,0x35,0x33,0x2e,0x78,
    0x20,0x2a,0x20,0x5f,0x36,0x35,0x33,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x30,0x34,0x20,0x3d,0x20,
    0x5f,0x31,0x30,0x30,0x20,0x2a,0x20,0x5f,0x31,0x30,0x30,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x31,0x32,0x20,
    0x3d,0x20,0x5f,0x36,0x35,0x33,0x2e,0x79,0x20,0x2a,0x20,0x5f,0x36,0x35,0x33,0x2e,
    0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,
    0x20,0x5f,0x31,0x32,0x34,0x20,0x3d,0x20,0x5f,0x36,0x35,0x33,0x2e,0x7a,0x20,0x2a,
    0x20,0x5f,0x36,0x35,0x33,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x32,0x38,0x20,0x3d,0x20,0x5f,0x31,
    0x32,0x34,0x20,0x2a,0x20,0x5f,0x31,0x32,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x33,0x32,0x20,0x3d,0x20,
    0x66,0x6d,0x61,0x28,0x5f,0x36,0x35,0x33,0x2e,0x78,0x2c,0x20,0x5f,0x36,0x35,0x33,
    0x2e,0x78,0x2c,0x20,0x5f,0x31,0x32,0x34,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x34,0x37,0x20,0x3d,0x20,
    0x69,0x6e,0x76,0x65,0x72,0x73,0x65,0x73,0x71,0x72,0x74,0x28,0x28,0x28,0x28,0x28,
    0x28,0x5f,0x31,0x33,0x32,0x20,0x2a,0x20,0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,
    0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,
    0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,
    0x5f,0x31,0x33,0x32,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,
    0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x37,0x30,0x20,0x3d,0x20,0x66,0x6d,0x61,0x28,
    0x32,0x2e,0x30,0x20,0x2a,0x20,0x5f,0x31,0x32,0x34,0x2c,0x20,0x5f,0x31,0x30,0x30,
    0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,0x30,0x30,0x20,0x2a,0x20,0x28,0x2d,0x36,
    0x2e,0x30,0x29,0x2c,0x20,0x5f,0x31,0x31,0x32,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,
    0x31,0x31,0x32,0x20,0x2a,0x20,0x28,0x2d,0x36,0x2e,0x30,0x29,0x2c,0x20,0x5f,0x31,
    0x32,0x34,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,0x32,0x34,0x2c,0x20,0x5f,0x31,
    0x32,0x34,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,0x30,0x30,0x2c,0x20,0x5f,0x31,
    0x30,0x30,0x2c,0x20,0x5f,0x31,0x31,0x32,0x20,0x2a,0x20,0x5f,0x31,0x31,0x32,0x29,
    0x29,0x29,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,
    0x6f,0x61,0x74,0x20,0x5f,0x31,0x37,0x36,0x20,0x3d,0x20,0x66,0x6d,0x61,0x28,0x5f,
    0x36,0x35,0x33,0x2e,0x7a,0x2c,0x20,0x5f,0x36,0x35,0x33,0x2e,0x7a,0x2c,0x20,0x66,
    0x6d,0x61,0x28,0x5f,0x36,0x35,0x33,0x2e,0x78,0x2c,0x20,0x5f,0x36,0x35,0x33,0x2e,
    0x78,0x2c,0x20,0x2d,0x5f,0x31,0x31,0x32,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x36,0x37,0x30,0x20,0x3d,0x20,
    0x76,0x65,0x63,0x33,0x28,0x66,0x6d,0x61,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x36,
    0x34,0x2e,0x30,0x20,0x2a,0x20,0x5f,0x36,0x35,0x33,0x2e,0x78,0x29,0x20,0x2a,0x20,
    0x5f,0x36,0x35,0x33,0x2e,0x79,0x29,0x20,0x2a,0x20,0x5f,0x36,0x35,0x33,0x2e,0x7a,
    0x29,0x20,0x2a,0x20,0x66,0x6d,0x61,0x28,0x5f,0x36,0x35,0x33,0x2e,0x78,0x2c,0x20,
    0x5f,0x36,0x35,0x33,0x2e,0x78,0x2c,0x20,0x2d,0x5f,0x31,0x32,0x34,0x29,0x29,0x20,
    0x2a,0x20,0x5f,0x31,0x37,0x36,0x29,0x20,0x2a,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,
    0x32,0x34,0x2c,0x20,0x5f,0x31,0x32,0x34,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,
    0x30,0x30,0x2c,0x20,0x5f,0x31,0x30,0x30,0x2c,0x20,0x2d,0x28,0x28,0x36,0x2e,0x30,
    0x20,0x2a,0x20,0x5f,0x31,0x30,0x30,0x29,0x20,0x2a,0x20,0x5f,0x31,0x32,0x34,0x29,
    0x29,0x29,0x29,0x20,0x2a,0x20,0x5f,0x31,0x37,0x30,0x2c,0x20,0x5f,0x31,0x34,0x37,
    0x2c,0x20,0x70,0x2e,0x78,0x29,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,0x37,0x30,
    0x2c,0x20,0x5f,0x31,0x37,0x30,0x2c,0x20,0x66,0x6d,0x61,0x28,0x28,0x28,0x28,0x2d,
    0x31,0x36,0x2e,0x30,0x29,0x20,0x2a,0x20,0x5f,0x31,0x31,0x32,0x29,0x20,0x2a,0x20,
    0x5f,0x31,0x33,0x32,0x29,0x20,0x2a,0x20,0x5f,0x31,0x37,0x36,0x2c,0x20,0x5f,0x31,
    0x37,0x36,0x2c,0x20,0x70,0x2e,0x79,0x29,0x29,0x2c,0x20,0x66,0x6d,0x61,0x28,0x28,
    0x28,0x28,0x28,0x2d,0x38,0x2e,0x30,0x29,0x20,0x2a,0x20,0x5f,0x36,0x35,0x33,0x2e,
    0x79,0x29,0x20,0x2a,0x20,0x5f,0x31,0x37,0x36,0x29,0x20,0x2a,0x20,0x66,0x6d,0x61,
    0x28,0x5f,0x31,0x32,0x38,0x2c,0x20,0x5f,0x31,0x32,0x38,0x2c,0x20,0x66,0x6d,0x61,
    0x28,0x2d,0x28,0x28,0x32,0x38,0x2e,0x30,0x20,0x2a,0x20,0x5f,0x31,0x30,0x30,0x29,
    0x20,0x2a,0x20,0x5f,0x31,0x32,0x34,0x29,0x2c,0x20,0x5f,0x31,0x32,0x38,0x2c,0x20,
    0x66,0x6d,0x61,0x28,0x37,0x30,0x2e,0x30,0x20,0x2a,0x20,0x5f,0x31,0x30,0x34,0x2c,
    0x20,0x5f,0x31,0x32,0x38,0x2c,0x20,0x66,0x6d,0x61,0x28,0x5f,0x31,0x30,0x34,0x2c,
    0x20,0x5f,0x31,0x30,0x34,0x2c,0x20,0x2d,0x28,0x28,0x28,0x32,0x38,0x2e,0x30,0x20,
    0x2a,0x20,0x5f,0x31,0x30,0x34,0x29,0x20,0x2a,0x20,0x5f,0x31,0x30,0x30,0x29,0x20,
    0x2a,0x20,0x5f,0x31,0x32,0x34,0x29,0x29,0x29,0x29,0x29,0x29,0x20,0x2a,0x20,0x5f,
    0x31,0x37,0x30,0x2c,0x20,0x5f,0x31,0x34,0x37,0x2c,0x20,0x70,0x2e,0x7a,0x29,0x29,
    0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x77,0x20,0x3d,0x20,0x5f,0x36,
    0x37,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x72,0x61,0x70,
    0x20,0x3d,0x20,0x6d,0x69,0x6e,0x28,0x74,0x72,0x61,0x70,0x2c,0x20,0x76,0x65,0x63,
    0x34,0x28,0x61,0x62,0x73,0x28,0x5f,0x36,0x37,0x30,0x29,0x2c,0x20,0x6d,0x29,0x29,
    0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,
    0x5f,0x32,0x37,0x37,0x20,0x3d,0x20,0x64,0x6f,0x74,0x28,0x5f,0x36,0x37,0x30,0x2c,
    0x20,0x5f,0x36,0x37,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x6d,0x20,0x3d,0x20,0x5f,0x32,0x37,0x37,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x32,0x37,0x37,0x20,0x3e,0x20,0x32,0x35,0x36,
    0x2e,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x72,0x65,0x61,0x6b,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,
    0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x73,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,
    0x20,0x76,0x65,0x63,0x34,0x28,0x6d,0x2c,0x20,0x74,0x72,0x61,0x70,0x2e,0x79,0x7a,
    0x77,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x28,
    0x28,0x30,0x2e,0x32,0x35,0x20,0x2a,0x20,0x6c,0x6f,0x67,0x28,0x6d,0x29,0x29,0x20,
    0x2a,0x20,0x73,0x71,0x72,0x74,0x28,0x6d,0x29,0x29,0x20,0x2f,0x20,0x64,0x7a,0x3b,
    0x0a,0x7d,0x0a,0x0a,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x5f,0x73,0x63,0x65,0x6e,
    0x65,0x28,0x76,0x65,0x63,0x33,0x20,0x70,0x2c,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,
    0x63,0x34,0x20,0x72,0x65,0x73,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x29,0x0a,0x7b,0x0a,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,
    0x20,0x70,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x61,
    0x72,0x61,0x6d,0x5f,0x31,0x20,0x3d,0x20,0x31,0x2e,0x31,0x30,0x30,0x30,0x30,0x30,
    0x30,0x32,0x33,0x38,0x34,0x31,0x38,0x35,0x37,0x39,0x31,0x30,0x31,0x35,0x36,0x32,
    0x35,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x31,
    0x30,0x20,0x3d,0x20,0x73,0x64,0x5f,0x73,0x70,0x68,0x65,0x72,0x65,0x28,0x70,0x61,
    0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x29,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x20,0x3d,0x20,0x5f,0x33,0x31,
    0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x33,0x31,0x30,0x20,
    0x3c,0x20,0x30,0x2e,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,
    0x31,0x31,0x36,0x31,0x31,0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x29,
    0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,
    0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x20,0x3d,0x20,0x70,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x61,
    0x72,0x61,0x6d,0x5f,0x33,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,
    0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x31,0x39,0x20,0x3d,0x20,0x73,0x64,0x5f,0x6d,
    0x61,0x6e,0x64,0x65,0x6c,0x62,0x75,0x6c,0x62,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,
    0x32,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,0x29,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x73,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,
    0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x64,0x20,0x3d,0x20,0x5f,0x33,0x31,0x39,0x3b,0x0a,0x20,0x20,0x20,0x20,
    0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,
    0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x73,0x5f,0x63,0x6f,0x6c,
    0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x30,0x2e,0x30,0x29,0x3b,0x0a,
    0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,
    0x20,0x64,0x3b,0x0a,0x7d,0x0a,0x0a,0x76,0x65,0x63,0x33,0x20,0x73,0x75,0x72,0x66,
    0x61,0x63,0x65,0x5f,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x28,0x76,0x65,0x63,0x33,0x20,
    0x70,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x70,0x29,0x0a,0x7b,0x0a,0x20,
    0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,0x20,
    0x70,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,
    0x30,0x30,0x30,0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,
    0x33,0x38,0x39,0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x2c,0x20,0x30,0x2e,
    0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,
    0x34,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,
    0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x33,0x35,0x20,0x3d,0x20,0x64,0x5f,0x73,0x63,
    0x65,0x6e,0x65,0x28,0x70,0x61,0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,
    0x5f,0x31,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,
    0x72,0x61,0x6d,0x5f,0x32,0x20,0x3d,0x20,0x70,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,
    0x28,0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,
    0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38,0x39,
    0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,
    0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,
    0x33,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x34,
    0x35,0x20,0x3d,0x20,0x64,0x5f,0x73,0x63,0x65,0x6e,0x65,0x28,0x70,0x61,0x72,0x61,
    0x6d,0x5f,0x32,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,0x29,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x34,0x20,
    0x3d,0x20,0x70,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x2c,0x20,
    0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,
    0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38,0x39,0x34,
    0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,
    0x65,0x63,0x34,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x35,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x35,0x35,0x20,0x3d,0x20,0x64,0x5f,
    0x73,0x63,0x65,0x6e,0x65,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,0x34,0x2c,0x20,0x70,
    0x61,0x72,0x61,0x6d,0x5f,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,
    0x75,0x72,0x6e,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x76,0x65,
    0x63,0x33,0x28,0x5f,0x33,0x33,0x35,0x20,0x2d,0x20,0x64,0x70,0x2c,0x20,0x5f,0x33,
    0x34,0x35,0x20,0x2d,0x20,0x64,0x70,0x2c,0x20,0x5f,0x33,0x35,0x35,0x20,0x2d,0x20,
    0x64,0x70,0x29,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x76,0x65,0x63,0x33,0x20,0x63,0x61,
    0x6c,0x63,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x28,0x76,0x65,0x63,0x33,0x20,0x72,0x6f,
    0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x72,0x64,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,
    0x20,0x74,0x2c,0x20,0x76,0x65,0x63,0x34,0x20,0x74,0x72,0x61,0x29,0x0a,0x7b,0x0a,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,
    0x20,0x72,0x6f,0x20,0x2b,0x20,0x28,0x72,0x64,0x20,0x2a,0x20,0x74,0x29,0x3b,0x0a,
    0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,
    0x31,0x20,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,
    0x5f,0x33,0x37,0x37,0x20,0x3d,0x20,0x73,0x75,0x72,0x66,0x61,0x63,0x65,0x5f,0x6e,
    0x6f,0x72,0x6d,0x61,0x6c,0x28,0x70,0x61,0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,0x72,
    0x61,0x6d,0x5f,0x31,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,
    0x5f,0x33,0x38,0x34,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,
    0x28,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x37,0x37,0x30,0x30,0x30,0x30,0x32,
    0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,0x37,0x33,0x34,0x33,0x37,0x35,0x2c,
    0x20,0x30,0x2e,0x35,0x37,0x37,0x30,0x30,0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,
    0x30,0x39,0x32,0x37,0x37,0x33,0x34,0x33,0x37,0x35,0x2c,0x20,0x2d,0x30,0x2e,0x35,
    0x37,0x37,0x30,0x30,0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,
    0x37,0x33,0x34,0x33,0x37,0x35,0x29,0x20,0x2d,0x20,0x72,0x64,0x29,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x33,0x39,0x31,0x20,0x3d,0x20,
    0x63,0x6c,0x61,0x6d,0x70,0x28,0x30,0x2e,0x30,0x35,0x30,0x30,0x30,0x30,0x30,0x30,
    0x30,0x37,0x34,0x35,0x30,0x35,0x38,0x30,0x35,0x39,0x36,0x39,0x32,0x33,0x38,0x32,
    0x38,0x31,0x32,0x35,0x20,0x2a,0x20,0x6c,0x6f,0x67,0x28,0x74,0x72,0x61,0x2e,0x78,
    0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,
    0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x34,0x30,0x31,0x20,0x3d,0x20,0x63,
    0x6c,0x61,0x6d,0x70,0x28,0x64,0x6f,0x74,0x28,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,
    0x35,0x37,0x37,0x30,0x30,0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,
    0x37,0x37,0x33,0x34,0x33,0x37,0x35,0x2c,0x20,0x30,0x2e,0x35,0x37,0x37,0x30,0x30,
    0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,0x37,0x33,0x34,0x33,
    0x37,0x35,0x2c,0x20,0x2d,0x30,0x2e,0x35,0x37,0x37,0x30,0x30,0x30,0x30,0x32,0x31,
    0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,0x37,0x33,0x34,0x33,0x37,0x35,0x29,0x2c,
    0x20,0x5f,0x33,0x37,0x37,0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,
    0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x71,
    0x72,0x74,0x28,0x70,0x6f,0x77,0x28,0x6d,0x69,0x78,0x28,0x6d,0x69,0x78,0x28,0x6d,
    0x69,0x78,0x28,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,0x30,0x39,0x39,0x39,0x39,
    0x39,0x39,0x39,0x37,0x37,0x36,0x34,0x38,0x32,0x35,0x38,0x32,0x30,0x39,0x32,0x32,
    0x38,0x35,0x31,0x35,0x36,0x32,0x35,0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,
    0x2e,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,
    0x31,0x31,0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,0x30,0x2e,
    0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32,0x39,0x38,0x30,0x32,0x33,0x32,0x32,
    0x33,0x38,0x37,0x36,0x39,0x35,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x33,0x30,
    0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,
    0x30,0x37,0x38,0x31,0x32,0x35,0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x63,0x6c,
    0x61,0x6d,0x70,0x28,0x74,0x72,0x61,0x2e,0x79,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,
    0x31,0x2e,0x30,0x29,0x29,0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x30,
    0x31,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x35,0x35,0x32,0x39,0x36,0x35,0x31,0x36,
    0x34,0x31,0x38,0x34,0x35,0x37,0x30,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x31,
    0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,0x31,0x31,
    0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,0x30,0x2e,0x33,0x30,
    0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,
    0x30,0x37,0x38,0x31,0x32,0x35,0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x63,0x6c,
    0x61,0x6d,0x70,0x28,0x74,0x72,0x61,0x2e,0x7a,0x20,0x2a,0x20,0x74,0x72,0x61,0x2e,
    0x7a,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x29,0x29,0x2c,0x20,
    0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,
    0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,
    0x20,0x30,0x2e,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,
    0x31,0x36,0x31,0x31,0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,
    0x30,0x2e,0x30,0x31,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x35,0x35,0x32,0x39,0x36,
    0x35,0x31,0x36,0x34,0x31,0x38,0x34,0x35,0x37,0x30,0x33,0x31,0x32,0x35,0x29,0x2c,
    0x20,0x76,0x65,0x63,0x33,0x28,0x63,0x6c,0x61,0x6d,0x70,0x28,0x70,0x6f,0x77,0x28,
    0x74,0x72,0x61,0x2e,0x77,0x2c,0x20,0x36,0x2e,0x30,0x29,0x2c,0x20,0x30,0x2e,0x30,
    0x2c,0x20,0x31,0x2e,0x30,0x29,0x29,0x29,0x20,0x2a,0x20,0x28,0x28,0x28,0x28,0x28,
    0x76,0x65,0x63,0x33,0x28,0x31,0x30,0x2e,0x35,0x2c,0x20,0x37,0x2e,0x36,0x39,0x39,
    0x39,0x39,0x39,0x38,0x30,0x39,0x32,0x36,0x35,0x31,0x33,0x36,0x37,0x31,0x38,0x37,
    0x35,0x2c,0x20,0x34,0x2e,0x39,0x30,0x30,0x30,0x30,0x30,0x30,0x39,0x35,0x33,0x36,
    0x37,0x34,0x33,0x31,0x36,0x34,0x30,0x36,0x32,0x35,0x29,0x20,0x2a,0x20,0x5f,0x34,
    0x30,0x31,0x29,0x20,0x2b,0x20,0x28,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x2c,
    0x20,0x30,0x2e,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,
    0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x36,
    0x30,0x30,0x30,0x30,0x30,0x30,0x32,0x33,0x38,0x34,0x31,0x38,0x35,0x37,0x39,0x31,
    0x30,0x31,0x35,0x36,0x32,0x35,0x29,0x20,0x2a,0x20,0x28,0x63,0x6c,0x61,0x6d,0x70,
    0x28,0x66,0x6d,0x61,0x28,0x30,0x2e,0x35,0x2c,0x20,0x64,0x6f,0x74,0x28,0x76,0x65,
    0x63,0x33,0x28,0x2d,0x30,0x2e,0x37,0x30,0x37,0x30,0x30,0x30,0x30,0x31,0x37,0x31,
    0x36,0x36,0x31,0x33,0x37,0x36,0x39,0x35,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,
    0x30,0x2c,0x20,0x30,0x2e,0x37,0x30,0x37,0x30,0x30,0x30,0x30,0x31,0x37,0x31,0x36,
    0x36,0x31,0x33,0x37,0x36,0x39,0x35,0x33,0x31,0x32,0x35,0x29,0x2c,0x20,0x5f,0x33,
    0x37,0x37,0x29,0x2c,0x20,0x30,0x2e,0x35,0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,
    0x31,0x2e,0x30,0x29,0x20,0x2a,0x20,0x5f,0x33,0x39,0x31,0x29,0x29,0x29,0x20,0x2b,
    0x20,0x28,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x31,0x35,0x30,0x30,0x30,0x30,0x30,
    0x30,0x35,0x39,0x36,0x30,0x34,0x36,0x34,0x34,0x37,0x37,0x35,0x33,0x39,0x30,0x36,
    0x32,0x35,0x2c,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,
    0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20,
    0x30,0x2e,0x34,0x34,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30,0x37,
    0x31,0x30,0x34,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x29,0x20,0x2a,0x20,0x28,0x66,
    0x6d,0x61,0x28,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,
    0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x2c,0x20,0x5f,
    0x33,0x37,0x37,0x2e,0x79,0x2c,0x20,0x30,0x2e,0x36,0x39,0x39,0x39,0x39,0x39,0x39,
    0x38,0x38,0x30,0x37,0x39,0x30,0x37,0x31,0x30,0x34,0x34,0x39,0x32,0x31,0x38,0x37,
    0x35,0x29,0x20,0x2a,0x20,0x66,0x6d,0x61,0x28,0x30,0x2e,0x38,0x30,0x30,0x30,0x30,
    0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,
    0x31,0x32,0x35,0x2c,0x20,0x5f,0x33,0x39,0x31,0x2c,0x20,0x30,0x2e,0x32,0x30,0x30,
    0x30,0x30,0x30,0x30,0x30,0x32,0x39,0x38,0x30,0x32,0x33,0x32,0x32,0x33,0x38,0x37,
    0x36,0x39,0x35,0x33,0x31,0x32,0x35,0x29,0x29,0x29,0x29,0x20,0x2b,0x20,0x28,0x76,
    0x65,0x63,0x33,0x28,0x30,0x2e,0x38,0x37,0x35,0x2c,0x20,0x30,0x2e,0x37,0x35,0x2c,
    0x20,0x30,0x2e,0x36,0x32,0x35,0x29,0x20,0x2a,0x20,0x66,0x6d,0x61,0x28,0x30,0x2e,
    0x39,0x34,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x30,0x37,0x39,0x30,0x37,0x31,0x30,
    0x34,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x2c,0x20,0x5f,0x33,0x39,0x31,0x2c,0x20,
    0x30,0x2e,0x30,0x35,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x37,0x34,0x35,0x30,0x35,
    0x38,0x30,0x35,0x39,0x36,0x39,0x32,0x33,0x38,0x32,0x38,0x31,0x32,0x35,0x29,0x29,
    0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x28,0x34,0x2e,0x30,0x20,0x2a,0x20,
    0x63,0x6c,0x61,0x6d,0x70,0x28,0x31,0x2e,0x30,0x20,0x2b,0x20,0x64,0x6f,0x74,0x28,
    0x72,0x64,0x2c,0x20,0x5f,0x33,0x37,0x37,0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,
    0x31,0x2e,0x30,0x29,0x29,0x20,0x2a,0x20,0x5f,0x33,0x39,0x31,0x29,0x29,0x2c,0x20,
    0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x36,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,
    0x30,0x37,0x39,0x30,0x37,0x31,0x30,0x34,0x34,0x39,0x32,0x31,0x38,0x37,0x35,0x2c,
    0x20,0x30,0x2e,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x37,0x36,0x31,0x35,0x38,0x31,
    0x34,0x32,0x30,0x38,0x39,0x38,0x34,0x33,0x37,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,
    0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x28,0x28,0x70,0x6f,0x77,0x28,0x63,
    0x6c,0x61,0x6d,0x70,0x28,0x64,0x6f,0x74,0x28,0x5f,0x33,0x37,0x37,0x2c,0x20,0x5f,
    0x33,0x38,0x34,0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x2c,
    0x20,0x33,0x32,0x2e,0x30,0x29,0x20,0x2a,0x20,0x5f,0x34,0x30,0x31,0x29,0x20,0x2a,
    0x20,0x66,0x6d,0x61,0x28,0x30,0x2e,0x39,0x35,0x39,0x39,0x39,0x39,0x39,0x37,0x38,
    0x35,0x34,0x32,0x33,0x32,0x37,0x38,0x38,0x30,0x38,0x35,0x39,0x33,0x37,0x35,0x2c,
    0x20,0x70,0x6f,0x77,0x28,0x63,0x6c,0x61,0x6d,0x70,0x28,0x31,0x2e,0x30,0x20,0x2d,
    0x20,0x64,0x6f,0x74,0x28,0x5f,0x33,0x38,0x34,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,
    0x30,0x2e,0x35,0x37,0x37,0x30,0x30,0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,0x30,
    0x39,0x32,0x37,0x37,0x33,0x34,0x33,0x37,0x35,0x2c,0x20,0x30,0x2e,0x35,0x37,0x37,
    0x30,0x30,0x30,0x30,0x32,0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,0x37,0x33,
    0x34,0x33,0x37,0x35,0x2c,0x20,0x2d,0x30,0x2e,0x35,0x37,0x37,0x30,0x30,0x30,0x30,
    0x32,0x31,0x39,0x33,0x34,0x35,0x30,0x39,0x32,0x37,0x37,0x33,0x34,0x33,0x37,0x35,
    0x29,0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x2c,0x20,0x35,
    0x2e,0x30,0x29,0x2c,0x20,0x30,0x2e,0x30,0x33,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
    0x31,0x30,0x35,0x39,0x33,0x30,0x33,0x32,0x38,0x33,0x36,0x39,0x31,0x34,0x30,0x36,
    0x32,0x35,0x29,0x29,0x20,0x2a,0x20,0x31,0x35,0x2e,0x30,0x29,0x29,0x3b,0x0a,0x7d,
    0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x35,0x36,0x31,0x20,0x3d,0x20,
    0x28,0x28,0x65,0x79,0x65,0x20,0x2b,0x20,0x28,0x66,0x77,0x64,0x20,0x2a,0x20,0x31,
    0x2e,0x37,0x39,0x39,0x39,0x39,0x39,0x39,0x35,0x32,0x33,0x31,0x36,0x32,0x38,0x34,
    0x31,0x37,0x39,0x36,0x38,0x37,0x35,0x29,0x29,0x20,0x2b,0x20,0x28,0x72,0x69,0x67,
    0x68,0x74,0x20,0x2a,0x20,0x70,0x6f,0x73,0x2e,0x78,0x29,0x29,0x20,0x2b,0x20,0x28,
    0x75,0x70,0x20,0x2a,0x20,0x70,0x6f,0x73,0x2e,0x79,0x29,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x35,0x36,0x36,0x20,0x3d,0x20,0x6e,0x6f,0x72,
    0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x5f,0x35,0x36,0x31,0x20,0x2d,0x20,0x65,0x79,
    0x65,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,
    0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x30,0x2e,0x31,0x30,0x30,0x30,
    0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,0x31,0x31,0x39,0x33,0x38,
    0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,0x30,0x2e,0x32,0x30,0x30,0x30,0x30,
    0x30,0x30,0x30,0x32,0x39,0x38,0x30,0x32,0x33,0x32,0x32,0x33,0x38,0x37,0x36,0x39,
    0x35,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,
    0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,
    0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,
    0x61,0x74,0x20,0x74,0x20,0x3d,0x20,0x30,0x2e,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,
    0x76,0x65,0x63,0x34,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x3b,0x0a,0x20,0x20,
    0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,
    0x3b,0x20,0x69,0x20,0x3c,0x20,0x39,0x36,0x3b,0x20,0x69,0x2b,0x2b,0x29,0x0a,0x20,
    0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,
    0x33,0x20,0x5f,0x35,0x38,0x34,0x20,0x3d,0x20,0x5f,0x35,0x36,0x31,0x20,0x2b,0x20,
    0x28,0x5f,0x35,0x36,0x36,0x20,0x2a,0x20,0x74,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,
    0x20,0x5f,0x35,0x38,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,
    0x6c,0x6f,0x61,0x74,0x20,0x5f,0x35,0x39,0x30,0x20,0x3d,0x20,0x64,0x5f,0x73,0x63,
    0x65,0x6e,0x65,0x28,0x70,0x61,0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,
    0x5f,0x31,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,
    0x28,0x5f,0x35,0x39,0x30,0x20,0x3c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,
    0x30,0x30,0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,
    0x38,0x39,0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x29,0x0a,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x20,
    0x3d,0x20,0x5f,0x35,0x38,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x33,
    0x20,0x3d,0x20,0x5f,0x35,0x36,0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x61,0x72,0x61,0x6d,
    0x5f,0x34,0x20,0x3d,0x20,0x5f,0x35,0x39,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x61,0x72,0x61,
    0x6d,0x5f,0x35,0x20,0x3d,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x3b,0x0a,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,
    0x5f,0x36,0x30,0x34,0x20,0x3d,0x20,0x63,0x61,0x6c,0x63,0x5f,0x63,0x6f,0x6c,0x6f,
    0x72,0x28,0x70,0x61,0x72,0x61,0x6d,0x5f,0x32,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,
    0x5f,0x33,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x34,0x2c,0x20,0x70,0x61,0x72,
    0x61,0x6d,0x5f,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x36,0x34,0x31,0x20,0x3d,0x20,0x63,
    0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x5f,0x36,0x34,0x31,0x2e,0x78,0x20,0x3d,0x20,0x5f,0x36,0x30,0x34,0x2e,
    0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,
    0x36,0x34,0x31,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x36,0x30,0x34,0x2e,0x79,0x3b,0x0a,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x36,0x34,0x31,
    0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x36,0x30,0x34,0x2e,0x7a,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,
    0x20,0x5f,0x36,0x34,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x62,0x72,0x65,0x61,0x6b,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,
    0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x36,0x31,0x38,
    0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x36,0x32,0x30,0x20,
    0x3d,0x20,0x5f,0x36,0x31,0x38,0x2e,0x78,0x79,0x7a,0x20,0x2b,0x20,0x28,0x76,0x65,
    0x63,0x33,0x28,0x30,0x2e,0x30,0x30,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32,
    0x36,0x30,0x37,0x37,0x30,0x33,0x32,0x30,0x38,0x39,0x32,0x33,0x33,0x33,0x39,0x38,
    0x34,0x33,0x37,0x35,0x2c,0x20,0x30,0x2e,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,
    0x30,0x30,0x34,0x37,0x34,0x39,0x37,0x34,0x35,0x31,0x33,0x30,0x35,0x33,0x38,0x39,
    0x34,0x30,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x2c,0x20,0x30,0x2e,0x30,0x29,0x20,
    0x2a,0x20,0x66,0x6c,0x6f,0x61,0x74,0x28,0x69,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x5f,0x36,
    0x34,0x38,0x20,0x3d,0x20,0x5f,0x36,0x31,0x38,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x36,0x34,0x38,0x2e,0x78,0x20,0x3d,0x20,
    0x5f,0x36,0x32,0x30,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x5f,0x36,0x34,0x38,0x2e,0x79,0x20,0x3d,0x20,0x5f,0x36,0x32,
    0x30,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x5f,0x36,0x34,0x38,0x2e,0x7a,0x20,0x3d,0x20,0x5f,0x36,0x32,0x30,0x2e,0x7a,
    0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,
    0x6c,0x6f,0x72,0x20,0x3d,0x20,0x5f,0x36,0x34,0x38,0x3b,0x0a,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,
    0x20,0x28,0x74,0x20,0x3e,0x20,0x33,0x2e,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,
    0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x20,0x62,0x72,0x65,0x61,0x6b,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x20,0x2b,0x3d,0x20,0x5f,
    0x35,0x39,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x66,
    0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,
    0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
];
sdf_shader_desc :: (backend: sg_backend) -> sg_shader_desc {
    desc: sg_shader_desc;
    desc.label = "sdf_shader";
    if backend == {
    case .GLCORE;
        desc.attrs[0].name = "position";
        desc.vs.source = xx *vs_source_glsl410;
        desc.vs.entry = "main";
        desc.vs.uniform_blocks[0].size = 16;
        desc.vs.uniform_blocks[0].layout = .STD140;
        desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params";
        desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4;
        desc.vs.uniform_blocks[0].uniforms[0].array_count = 1;
        desc.fs.source = xx *fs_source_glsl410;
        desc.fs.entry = "main";
    }
    return desc;
}

Edit: turns out, it's a huge pain to post text files inside a PR on GitHub and the editor is super laggy now, uh... Sorry for the mess.

floooh commented 1 month ago

Ah thanks, very cool! I added two comments, see above.

@NEO97online I guess/hope you are ok with these changes?

floooh commented 1 month ago

Thanks for the change! I'll wait a bit to give @NEO97online an opportunity to respond, and will probably merge tomorrow evening.

colinbellino commented 1 month ago

Yeah, there is no rush.

It wasn't really my intent to change this much code, but it didn't feel right by me to keep a version on the main branch that broke like that, hopefully that's alright with @NEO97online!

floooh commented 1 month ago

Ok merged, thanks for the fixes!

Binaries will be uptodate when this CI pipeline goes green: https://github.com/floooh/sokol-tools/actions/runs/10270309931

colinbellino commented 1 month ago

Thanks!

Since i know you don't have access to the beta, i made some tests and can confirm the binaries above work on the following versions (3 latests):

image
NEO97online commented 1 month ago

Thanks for these fixes @colinbellino ! I was surprised to find that my PR was already merged, this is awesome. I made it for myself in a bit of a hurry and wanted to share, looks like I left some of my own type aliases in there.

Great improvements!!