1// #include <stdio.h>
2extern int stdin, stderr, errno;
3int d, z, C, h, P, K, ac, q, G, v, Q, R, D, L, W, M;
4
5void w();
6void ab(int);
7
8void E(int e) {
9    *(char*) D++ = e;
10}
11
12void o() {
13    if (L) {
14        h = *(char*) L++;
15        if (h == 2) {
16            L = 0;
17            h = W;
18        }
19    } else
20        h = fgetc(Q);
21}
22
23int X() {
24    return isalnum(h) | h == 95;
25}
26
27void Y() {
28    if (h == 92) {
29        o();
30        if (h == 110)
31            h = 10;
32    }
33}
34
35void ad() {
36    int e, j, m;
37    while (isspace(h) | h == 35) {
38        if (h == 35) {
39            o();
40            ad();
41            if (d == 536) {
42                ad();
43                E(32);
44                *(int*) d = 1;
45                *(int*) (d + 4) = D;
46            }
47            while (h != 10) {
48                E(h);
49                o();
50            }
51            E(h);
52            E(2);
53        }
54        o();
55    }
56    C = 0;
57    d = h;
58    if (X()) {
59        E(32);
60        M = D;
61        while (X()) {
62            E(h);
63            o();
64        }
65        if (isdigit(d)) {
66            z = strtol(M, 0, 0);
67            d = 2;
68        } else {
69            *(char*) D = 32;
70            d = strstr(R, M - 1) - R;
71            *(char*) D = 0;
72            d = d * 8 + 256;
73            if (d > 536) {
74                d = P + d;
75                if (*(int*) d == 1) {
76                    L = *(int*) (d + 4);
77                    W = h;
78                    o();
79                    ad();
80                }
81            }
82        }
83    } else {
84        o();
85        if (d == 39) {
86            d = 2;
87            Y();
88            z = h;
89            o();
90            o();
91        } else if (d == 47 & h == 42) {
92            o();
93            while (h) {
94                while (h != 42)
95                    o();
96                o();
97                if (h == 47)
98                    h = 0;
99            }
100            o();
101            ad();
102        } else {
103            e
104                    = "++#m--%am*@R<^1c/@%[_[H3c%@%[_[H3c+@.B#d-@%:_^BKd<<Z/03e>>`/03e<=0f>=/f<@.f>@1f==&g!='g&&k||#l&@.BCh^@.BSi|@.B+j~@/%Yd!@&d*@b";
105            while (j = *(char*) e++) {
106                m = *(char*) e++;
107                z = 0;
108                while ((C = *(char*) e++ - 98) < 0)
109                    z = z * 64 + C + 64;
110                if (j == d & (m == h | m == 64)) {
111                    if (m == h) {
112                        o();
113                        d = 1;
114                    }
115                    break;
116                }
117            }
118        }
119    }
120}
121
122void ae(int g) {
123    while( g&&g!=-1) {
124        *(char*) q++=g;
125        g=g>>8;
126    }
127}
128
129void A(int e) {
130    int g;
131    while( e) {
132        g=*(int*) e;
133        *(int*) e=q-e-4;
134        e=g;
135    }
136}
137
138int s(int g, int e) {
139    ae(g);
140    *(int*) q = e;
141    e = q;
142    q = q + 4;
143    return e;
144}
145
146void H(int e) {
147    s(184,e);
148}
149
150int B(int e) {
151    return s(233,e);
152}
153
154int S(int j, int e) {
155    ae(1032325);
156    return s(132 + j, e);
157}
158
159void Z(int e) {
160    ae( 49465);
161    H(0);
162    ae( 15);
163    ae( e+144);
164    ae( 192);
165}
166
167void N(int j, int e) {
168    ae(j + 131);
169    s((e > -512 && e < 512) << 7 | 5, e);
170}
171
172void T (int j) {
173    int g,e,m,aa;
174    g=1;
175    if( d == 34) {
176        H(v);
177        while( h!=34) {
178            Y ();
179            *(char*) v++=h;
180            o ();
181        }
182        *(char*) v=0;
183        v=v +4&-4;
184        o ();
185        ad();
186    }
187    else {
188        aa=C;
189        m= z;
190        e=d;
191        ad();
192        if( e == 2) {
193            H(m);
194        }
195        else if( aa == 2) {
196            T(0);
197            s(185,0);
198            if( e == 33)Z(m);
199            else ae( m);
200        }
201        else if( e == 40) {
202            w ();
203            ad();
204        }
205        else if( e == 42) {
206            ad();
207            e=d;
208            ad();
209            ad();
210            if( d == 42) {
211                ad();
212                ad();
213                ad();
214                ad();
215                e=0;
216            }
217            ad();
218            T(0);
219            if( d == 61) {
220                ad();
221                ae( 80);
222                w ();
223                ae( 89);
224                ae( 392+(e == 256));
225            }
226            else if( e) {
227                if( e == 256)ae( 139);
228                else ae( 48655);
229                q++;
230            }
231        }
232        else if( e == 38) {
233            N(10,*(int*) d);
234            ad();
235        }
236        else {
237            g=*(int*) e;
238            if(!g)g=dlsym(0,M);
239            if( d == 61&j) {
240                ad();
241                w ();
242                N(6,g);
243            }
244            else if( d!= 40) {
245                N(8,g);
246                if( C == 11) {
247                    N(0,g);
248                    ae( z);
249                    ad();
250                }
251            }
252        }
253    }
254    if( d == 40) {
255        if( g == 1)ae( 80);
256        m= s(60545,0);
257        ad();
258        j=0;
259        while( d!= 41) {
260            w ();
261            s(2393225,j);
262            if( d == 44)ad();
263            j=j +4;
264        }
265        *(int*) m= j;
266        ad();
267        if(!g) {
268            e=e +4;
269            *(int*) e=s(232,*(int*) e);
270        }
271        else if( g == 1) {
272            s(2397439,j);
273            j=j +4;
274        }
275        else {
276            s(232,g-q-5);
277        }
278        if( j)s(50305,j);
279    }
280}
281
282void O (int j) {
283    int e,g,m;
284    if( j--== 1)T(1);
285    else {
286        O (j);
287        m= 0;
288        while( j == C) {
289            g=d;
290            e=z;
291            ad();
292            if( j>8) {
293                m= S(e,m);
294                O (j);
295            }
296            else {
297                ae( 80);
298                O (j);
299                ae( 89);
300                if( j == 4|j == 5) {
301                    Z(e);
302                }
303                else {
304                    ae( e);
305                    if( g == 37)ae( 146);
306                }
307            }
308        }
309        if( m&&j>8) {
310            m= S(e,m);
311            H(e^1);
312            B(5);
313            A(m);
314            H(e);
315        }
316    }
317}
318
319void w() {
320    O(11);
321}
322
323int U() {
324    w();
325    return S(0, 0);
326}
327
328void I (int j) {
329    int m,g,e;
330    if( d == 288) {
331        ad();
332        ad();
333        m= U ();
334        ad();
335        I (j);
336        if( d == 312) {
337            ad();
338            g=B(0);
339            A(m);
340            I (j);
341            A(g);
342        }
343        else {
344            A(m);
345        }
346    }
347    else if( d == 352|d == 504) {
348        e=d;
349        ad();
350        ad();
351        if( e == 352) {
352            g=q;
353            m= U ();
354        }
355        else {
356            if( d!= 59)w ();
357            ad();
358            g=q;
359            m= 0;
360            if( d!= 59)m= U ();
361            ad();
362            if( d!= 41) {
363                e=B(0);
364                w ();
365                B(g-q-5);
366                A(e);
367                g=e +4;
368            }
369        }
370        ad();
371        I(&m);
372        B(g-q-5);
373        A(m);
374    }
375    else if( d == 123) {
376        ad();
377        ab(1);
378        while( d!= 125)I (j);
379        ad();
380    }
381    else {
382        if( d == 448) {
383            ad();
384            if( d!= 59)w ();
385            K=B(K);
386        }
387        else if( d == 400) {
388            ad();
389            *(int*) j=B(*(int*) j);
390        }
391        else if( d!= 59)w ();
392        ad();
393    }
394}
395
396void ab (int j) {
397    int m;
398    while( d == 256|d!=-1&!j) {
399        if( d == 256) {
400            ad();
401            while( d!= 59) {
402                if( j) {
403                    G=G +4;
404                    *(int*) d=-G;
405                }
406                else {
407                    *(int*) d=v;
408                    v=v +4;
409                }
410                ad();
411                if( d == 44)ad()	;
412            }
413            ad();
414        }
415        else {
416            A(*(int*)(d +4));
417            *(int*) d=q;
418            ad();
419            ad();
420            m= 8;
421            while( d!= 41) {
422                *(int*) d=m;
423                m= m +4;
424                ad();
425                if( d == 44)ad();
426            }
427            ad();
428            K=G=0;
429            ae( 15042901);
430            m= s(60545,0);
431            I(0);
432            A(K);
433            ae( 50121);
434            *(int*) m= G;
435        }
436    }
437}
438
439int run(int g, int e) {
440    return (*(int(*)()) *(int*) (P + 592))(g, e);
441}
442
443int main(int g, char** e) {
444    int result;
445    Q = stdin;
446    if (g-- > 1) {
447        Q = fopen(e[1], "r");
448        if (!Q) {
449            fprintf(stderr, "otcc-ansi.c: could not open file %s\n", *(int*) e);
450            return -2;
451        }
452    }
453    D = strcpy(R = calloc(1, 99999), " int if else while break return for define main ") + 48;
454    v = calloc(1, 99999);
455    q = ac = calloc(1, 99999);
456    P = calloc(1, 99999);
457    o();
458    ad();
459    ab(0);
460    if (mprotect(ac & (~ 4095), (99999 + 4095) & (~ 4095), 7)) {
461        printf("Mprotect failed. %d\n", errno);
462        return -1;
463    }
464    fprintf(stderr, "otcc-ansi.c: About to execute compiled code:\n");
465    result = run(g, e);
466    fprintf(stderr, "atcc-ansi.c: result: %d\n", result);
467    return result;
468}
469
470