#include <stdio.h>
#include <fcntl.h>
#include <time.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include"in_out.h"
struct args
{
long int arg1;
long int arg2;
};
struct result
{
long int sum;
};
int readn(int fd, void *vptr, int n)
{
int nleft;
int nread;
char *ptr;
ptr = vptr;
nleft = n;
while (nleft > 0) {
if ( (nread = read(fd, ptr, nleft)) < 0) {
if (errno == EINTR)
nread = 0; /* and call read() again */
else
return (-1);
} else if (nread == 0)
break; /* EOF */
nleft -= nread;
ptr += nread;
}
return (n - nleft); /* return >= 0 */
}
int writen(int fd, const void *vptr, int n)
{
size_t nleft;
ssize_t nwritten;
const char *ptr;
ptr = vptr;
nleft = n;
while (nleft > 0)
{
if ( (nwritten = write(fd, ptr, nleft)) <= 0)
{
if (nwritten < 0 && errno == EINTR)
nwritten = 0;
else
return (-1);
}
nleft -= nwritten;
ptr += nwritten;
}
return (n);
}
int readline(int fd, void *vptr, size_t maxlen)
{
size_t n,rc;
char c,*ptr;
ptr=vptr;
for(n=1;n<maxlen;n++)
{
again:
if((rc=read(fd,&c,1))==1)
{
*ptr++=c;
if(c=='\n')
break;
}
else if(rc==0)
{
*ptr = 0;
return (n - 1);
}
else
{
if (errno == EINTR)
goto again;
return (-1);
}
}
*ptr = 0;
return (n);
}
void w_Endline(const char* sent)
{
if(sent[endlen]=='\n')
sent[endlen]='\0';
}
void w_White(const char* sent)
{
char* endlen=sent+whitelen;
while(endlen
>sent
&&isspace(*endlen
)) {
endlen='\0';
--endlen;
}
}
CgojaW5jbHVkZSA8c3RkaW8uaD4KICAgICAgICAgIAojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzeXMvc3RhdC5oPiAgICAgICAgICAKI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgICAgICAKI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KCgojaW5jbHVkZSJpbl9vdXQuaCIKCnN0cnVjdCBhcmdzCnsKCWxvbmcgaW50IGFyZzE7Cglsb25nIGludCBhcmcyOwp9OwoKc3RydWN0IHJlc3VsdAp7Cglsb25nIGludCBzdW07Cn07CgoKaW50IHJlYWRuKGludCBmZCwgdm9pZCAqdnB0ciwgaW50IG4pCiB7CiAgICBpbnQgbmxlZnQ7CiAgICBpbnQgbnJlYWQ7CiAgICBjaGFyICpwdHI7CiAgICBwdHIgPSB2cHRyOwogICAgbmxlZnQgPSBuOwogICAgd2hpbGUgKG5sZWZ0ID4gMCkgewogICAgaWYgKCAobnJlYWQgPSByZWFkKGZkLCBwdHIsIG5sZWZ0KSkgPCAwKSB7CiAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCiAgICAgICAgICBucmVhZCA9IDA7IC8qIGFuZCBjYWxsIHJlYWQoKSBhZ2FpbiAqLwogICAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAgfSBlbHNlIGlmIChucmVhZCA9PSAwKQogICAgICAgICAgICAgICBicmVhazsgLyogRU9GICovCiAgICAgICAgICAgICAgIG5sZWZ0IC09IG5yZWFkOwogICAgICAgICAgICAgICBwdHIgKz0gbnJlYWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiAobiAtIG5sZWZ0KTsgLyogcmV0dXJuID49IDAgKi8KIH0KCmludCAgd3JpdGVuKGludCBmZCwgY29uc3Qgdm9pZCAqdnB0ciwgaW50IG4pCiB7CiBzaXplX3QgbmxlZnQ7IAogICAgc3NpemVfdCBud3JpdHRlbjsgCiAgICBjb25zdCBjaGFyICpwdHI7CiAgICBwdHIgPSB2cHRyOyAKICAgIG5sZWZ0ID0gbjsgCiAgICB3aGlsZSAobmxlZnQgPiAwKSAKICAgIHsgICAgICAKICAgICAgICBpZiAoIChud3JpdHRlbiA9IHdyaXRlKGZkLCBwdHIsIG5sZWZ0KSkgPD0gMCkgCiAgICAgICAgIHsgCiAgICAgICAgICAgIGlmIChud3JpdHRlbiA8IDAgJiYgZXJybm8gPT0gRUlOVFIpICAgIAogICAgICAgICAgICAgICBud3JpdHRlbiA9IDA7ICAKICAgICAgICAgICAgZWxzZSAgICAgICAgICAgIAogICAgICAgICAgICAgICByZXR1cm4gKC0xKTsgICAgCiAgICAgICAgICB9CiAgICAgICAgIG5sZWZ0IC09IG53cml0dGVuOyAKICAgICAgICAgcHRyICs9IG53cml0dGVuOwogICAgfQogICAgcmV0dXJuIChuKTsgCiB9CgoKaW50IHJlYWRsaW5lKGludCBmZCwgdm9pZCAqdnB0ciwgc2l6ZV90IG1heGxlbikKIHsKc2l6ZV90IG4scmM7CiAgICBjaGFyIGMsKnB0cjsKICAgIHB0cj12cHRyOwogICAgZm9yKG49MTtuPG1heGxlbjtuKyspCiAgICB7CiAgICAgICAgYWdhaW46CiAgICAgICAgICAgICAgaWYoKHJjPXJlYWQoZmQsJmMsMSkpPT0xKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICpwdHIrKz1jOwogICAgICAgICAgICAgICAgICAgaWYoYz09J1xuJykKICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmKHJjPT0wKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICpwdHIgPSAwOwogICAgICAgICAgICAgICAgICAgcmV0dXJuIChuIC0gMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKSAKICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYWdhaW47CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAgICAgICAgfSAKICAgIH0KICAgICpwdHIgPSAwOyAgICAgICAgIAogICAgIHJldHVybiAobik7IAogfQogdm9pZCB3X0VuZGxpbmUoY29uc3QgY2hhciogc2VudCkKewogICAgIHNpemVfdCBlbmRsZW49c3RybGVuKHNlbnQpLTE7CiAgICAgaWYoc2VudFtlbmRsZW5dPT0nXG4nKQogICAgICBzZW50W2VuZGxlbl09J1wwJzsKICAgICAKfQp2b2lkIHdfV2hpdGUoY29uc3QgY2hhciogc2VudCkKewogICAgIHNpemVfdCB3aGl0ZWxlbj1zdHJsZW4oc2VudCk7CiAgICAgY2hhciogZW5kbGVuPXNlbnQrd2hpdGVsZW47CiAgICAgd2hpbGUoZW5kbGVuPnNlbnQgJiZpc3NwYWNlKCplbmRsZW4pKQogICAgIHsKICAgICAgICAgZW5kbGVuPSdcMCc7CiAgICAgICAgIC0tZW5kbGVuOwogICAgIH0KfQogCgo=